From d89cba452ca871a4f2b3e0af30b60497d5fe002a Mon Sep 17 00:00:00 2001 From: Ben Constable Date: Thu, 12 Sep 2024 19:50:51 +0100 Subject: [PATCH 01/17] Add sql query cache --- deploy_ai_search/environment.py | 1 + deploy_ai_search/text_2_sql.py | 2 - deploy_ai_search/text_2_sql_query_cache.py | 133 +++++++++++++++++++++ 3 files changed, 134 insertions(+), 2 deletions(-) create mode 100644 deploy_ai_search/text_2_sql_query_cache.py diff --git a/deploy_ai_search/environment.py b/deploy_ai_search/environment.py index 5b67c08..3e47955 100644 --- a/deploy_ai_search/environment.py +++ b/deploy_ai_search/environment.py @@ -13,6 +13,7 @@ class IndexerType(Enum): RAG_DOCUMENTS = "rag-documents" TEXT_2_SQL = "text-2-sql" + TEXT_2_SQL_QUERY_CACHE = "text-2-sql-query-cache" class IdentityType(Enum): diff --git a/deploy_ai_search/text_2_sql.py b/deploy_ai_search/text_2_sql.py index 6f44c0f..38a592e 100644 --- a/deploy_ai_search/text_2_sql.py +++ b/deploy_ai_search/text_2_sql.py @@ -40,8 +40,6 @@ def __init__(self, suffix: str | None = None, rebuild: bool | None = False): self.parsing_mode = BlobIndexerParsingMode.JSON_ARRAY - self.entities = [] - def get_index_fields(self) -> list[SearchableField]: """This function returns the index fields for sql index. diff --git a/deploy_ai_search/text_2_sql_query_cache.py b/deploy_ai_search/text_2_sql_query_cache.py new file mode 100644 index 0000000..54cd458 --- /dev/null +++ b/deploy_ai_search/text_2_sql_query_cache.py @@ -0,0 +1,133 @@ +# Copyright (c) Microsoft Corporation. +# Licensed under the MIT License. + +from azure.search.documents.indexes.models import ( + SearchFieldDataType, + SearchField, + SearchableField, + SemanticField, + SemanticPrioritizedFields, + SemanticConfiguration, + SemanticSearch, + SimpleField, + ComplexField, +) +from ai_search import AISearch +from environment import ( + IndexerType, +) + + +class Text2SqlAISearch(AISearch): + """This class is used to deploy the sql index.""" + + def __init__(self, suffix: str | None = None, rebuild: bool | None = False): + """Initialize the Text2SqlAISearch class. This class implements the deployment of the sql index. + + Args: + suffix (str, optional): The suffix for the indexer. Defaults to None. If an suffix is provided, it is assumed to be a test indexer. + rebuild (bool, optional): Whether to rebuild the index. Defaults to False. + """ + self.indexer_type = IndexerType.TEXT_2_SQL_QUERY_CACHE + super().__init__(suffix, rebuild) + + def get_index_fields(self) -> list[SearchableField]: + """This function returns the index fields for sql index. + + Returns: + list[SearchableField]: The index fields for sql index""" + + fields = [ + SearchableField( + name="Question", + type=SearchFieldDataType.String, + key=True, + analyzer_name="keyword", + ), + SearchField( + name="QuestionEmbedding", + type=SearchFieldDataType.Collection(SearchFieldDataType.Single), + vector_search_dimensions=self.environment.open_ai_embedding_dimensions, + vector_search_profile_name=self.vector_search_profile_name, + ), + SearchableField( + name="Query", type=SearchFieldDataType.String, filterable=True + ), + SearchField( + name="QueryEmbedding", + type=SearchFieldDataType.Collection(SearchFieldDataType.Single), + vector_search_dimensions=self.environment.open_ai_embedding_dimensions, + vector_search_profile_name=self.vector_search_profile_name, + ), + SearchableField( + name="Description", + type=SearchFieldDataType.String, + sortable=False, + filterable=False, + facetable=False, + ), + SearchField( + name="DescriptionEmbedding", + type=SearchFieldDataType.Collection(SearchFieldDataType.Single), + vector_search_dimensions=self.environment.open_ai_embedding_dimensions, + vector_search_profile_name=self.vector_search_profile_name, + ), + ComplexField( + name="Schemas", + collection=True, + fields=[ + SearchableField( + name="EntityName", + type=SearchFieldDataType.String, + filterable=True, + ), + ComplexField( + name="Columns", + collection=True, + fields=[ + SearchableField( + name="Name", type=SearchFieldDataType.String + ), + SearchableField( + name="Definition", type=SearchFieldDataType.String + ), + SearchableField( + name="Type", type=SearchFieldDataType.String + ), + SimpleField( + name="AllowedValues", + type=SearchFieldDataType.String, + collection=True, + ), + SimpleField( + name="SampleValues", + type=SearchFieldDataType.String, + collection=True, + ), + ], + ), + ], + ), + ] + + return fields + + def get_semantic_search(self) -> SemanticSearch: + """This function returns the semantic search configuration for sql index + + Returns: + SemanticSearch: The semantic search configuration""" + + semantic_config = SemanticConfiguration( + name=self.semantic_config_name, + prioritized_fields=SemanticPrioritizedFields( + title_field=SemanticField(field_name="Question"), + keywords_fields=[ + SemanticField(field_name="Query"), + ], + ), + ) + + semantic_search = SemanticSearch(configurations=[semantic_config]) + + return semantic_search From 8a70aa6c5a18cefb7517d3bfaacf4a459da5e291 Mon Sep 17 00:00:00 2001 From: Ben Constable Date: Thu, 12 Sep 2024 19:55:22 +0100 Subject: [PATCH 02/17] Update env --- text_2_sql/.env | 32 +++++++++++++++++--------------- 1 file changed, 17 insertions(+), 15 deletions(-) diff --git a/text_2_sql/.env b/text_2_sql/.env index 76c7318..ac8f1df 100644 --- a/text_2_sql/.env +++ b/text_2_sql/.env @@ -1,16 +1,18 @@ -OpenAI__CompletionDeployment= -OpenAI__EmbeddingModel= -OpenAI__Endpoint= -OpenAI__ApiKey= -OpenAI__ApiVersion= -Text2Sql__DatabaseEngine= -Text2Sql__DatabaseName= -Text2Sql__DatabaseConnectionString= -AIService__AzureSearchOptions__Endpoint= -AIService__AzureSearchOptions__Key= -AIService__AzureSearchOptions__RagDocuments__Index= -AIService__AzureSearchOptions__Text2Sql__Index= -AIService__AzureSearchOptions__RagDocuments__SemanticConfig= -AIService__AzureSearchOptions__Text2Sql__SemanticConfig= -IdentityType= # system_assigned or user_assigned or key +OpenAI__CompletionDeployment= +OpenAI__EmbeddingModel= +OpenAI__Endpoint= +OpenAI__ApiKey= +OpenAI__ApiVersion= +Text2Sql__DatabaseEngine= +Text2Sql__DatabaseName= +Text2Sql__DatabaseConnectionString= +AIService__AzureSearchOptions__Endpoint= +AIService__AzureSearchOptions__Key= +AIService__AzureSearchOptions__RagDocuments__Index= +AIService__AzureSearchOptions__Text2Sql__Index= +AIService__AzureSearchOptions__Text2SqlQueryCache__Index= +AIService__AzureSearchOptions__RagDocuments__SemanticConfig= +AIService__AzureSearchOptions__Text2Sql__SemanticConfig= +AIService__AzureSearchOptions__Text2SqlQueryCache__SemanticConfig= +IdentityType= # system_assigned or user_assigned or key ClientId= From d33fc135cb17e882648b3eed4f66ea3c2c8b8af8 Mon Sep 17 00:00:00 2001 From: Ben Constable Date: Thu, 12 Sep 2024 19:59:34 +0100 Subject: [PATCH 03/17] Add deployment options for query cache --- deploy_ai_search/README.md | 4 ++-- deploy_ai_search/deploy.py | 11 ++++++++--- deploy_ai_search/text_2_sql_query_cache.py | 15 +-------------- 3 files changed, 11 insertions(+), 19 deletions(-) diff --git a/deploy_ai_search/README.md b/deploy_ai_search/README.md index 0e30f1e..874114a 100644 --- a/deploy_ai_search/README.md +++ b/deploy_ai_search/README.md @@ -8,7 +8,7 @@ The associated scripts in this portion of the repository contains pre-built scri 2. Adjust `rag_documents.py` with any changes to the index / indexer. The `get_skills()` method implements the skills pipeline. Make any adjustments here in the skills needed to enrich the data source. 3. Run `deploy.py` with the following args: - - `indexer_type rag`. This selects the `RagDocumentsAISearch` sub class. + - `index_type rag`. This selects the `RagDocumentsAISearch` sub class. - `enable_page_chunking True`. This determines whether page wise chunking is applied in ADI, or whether the inbuilt skill is used for TextSplit. **Page wise analysis in ADI is recommended to avoid splitting tables / figures across multiple chunks, when the chunking is performed.** - `rebuild`. Whether to delete and rebuild the index. - `suffix`. Optional parameter that will apply a suffix onto the deployed index and indexer. This is useful if you want deploy a test version, before overwriting the main version. @@ -19,7 +19,7 @@ The associated scripts in this portion of the repository contains pre-built scri 2. Adjust `text_2_sql.py` with any changes to the index / indexer. The `get_skills()` method implements the skills pipeline. Make any adjustments here in the skills needed to enrich the data source. 3. Run `deploy.py` with the following args: - - `indexer_type text_2_sql`. This selects the `Text2SQLAISearch` sub class. + - `index_type text_2_sql`. This selects the `Text2SQLAISearch` sub class. - `rebuild`. Whether to delete and rebuild the index. - `suffix`. Optional parameter that will apply a suffix onto the deployed index and indexer. This is useful if you want deploy a test version, before overwriting the main version. diff --git a/deploy_ai_search/deploy.py b/deploy_ai_search/deploy.py index ee40aef..3288ebf 100644 --- a/deploy_ai_search/deploy.py +++ b/deploy_ai_search/deploy.py @@ -3,6 +3,7 @@ import argparse from rag_documents import RagDocumentsAISearch from text_2_sql import Text2SqlAISearch +from text_2_sql_query_cache import Text2SqlQueryCacheAISearch def deploy_config(arguments: argparse.Namespace): @@ -10,16 +11,20 @@ def deploy_config(arguments: argparse.Namespace): Args: arguments (argparse.Namespace): The arguments passed to the script""" - if arguments.indexer_type == "rag": + if arguments.index_type == "rag": index_config = RagDocumentsAISearch( suffix=arguments.suffix, rebuild=arguments.rebuild, enable_page_by_chunking=arguments.enable_page_chunking, ) - elif arguments.indexer_type == "text_2_sql": + elif arguments.index_type == "text_2_sql": index_config = Text2SqlAISearch( suffix=arguments.suffix, rebuild=arguments.rebuild ) + elif arguments.index_type == "text_2_sql_query_cache": + index_config = Text2SqlQueryCacheAISearch( + suffix=arguments.suffix, rebuild=arguments.rebuild + ) else: raise ValueError("Invalid Indexer Type") @@ -32,7 +37,7 @@ def deploy_config(arguments: argparse.Namespace): if __name__ == "__main__": parser = argparse.ArgumentParser(description="Process some arguments.") parser.add_argument( - "--indexer_type", + "--index_type", type=str, required=True, help="Type of Indexer want to deploy.", diff --git a/deploy_ai_search/text_2_sql_query_cache.py b/deploy_ai_search/text_2_sql_query_cache.py index 54cd458..dc1b06f 100644 --- a/deploy_ai_search/text_2_sql_query_cache.py +++ b/deploy_ai_search/text_2_sql_query_cache.py @@ -18,7 +18,7 @@ ) -class Text2SqlAISearch(AISearch): +class Text2SqlQueryCacheAISearch(AISearch): """This class is used to deploy the sql index.""" def __init__(self, suffix: str | None = None, rebuild: bool | None = False): @@ -59,19 +59,6 @@ def get_index_fields(self) -> list[SearchableField]: vector_search_dimensions=self.environment.open_ai_embedding_dimensions, vector_search_profile_name=self.vector_search_profile_name, ), - SearchableField( - name="Description", - type=SearchFieldDataType.String, - sortable=False, - filterable=False, - facetable=False, - ), - SearchField( - name="DescriptionEmbedding", - type=SearchFieldDataType.Collection(SearchFieldDataType.Single), - vector_search_dimensions=self.environment.open_ai_embedding_dimensions, - vector_search_profile_name=self.vector_search_profile_name, - ), ComplexField( name="Schemas", collection=True, From aac9d19a6f0306f949a16677ec60f71609be793a Mon Sep 17 00:00:00 2001 From: Ben Constable Date: Thu, 12 Sep 2024 20:12:10 +0100 Subject: [PATCH 04/17] Query cache param --- text_2_sql/.env | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/text_2_sql/.env b/text_2_sql/.env index ac8f1df..85e9dd8 100644 --- a/text_2_sql/.env +++ b/text_2_sql/.env @@ -4,6 +4,7 @@ OpenAI__Endpoint= OpenAI__ApiKey= OpenAI__ApiVersion= Text2Sql__DatabaseEngine= +Text2Sql__UseQueryCache= Text2Sql__DatabaseName= Text2Sql__DatabaseConnectionString= AIService__AzureSearchOptions__Endpoint= @@ -15,4 +16,4 @@ AIService__AzureSearchOptions__RagDocuments__SemanticConfig= AIService__AzureSearchOptions__Text2SqlQueryCache__SemanticConfig= IdentityType= # system_assigned or user_assigned or key -ClientId= +ClientId= From a4c97ca8068371aee3738ffb29874852a9e6c05a Mon Sep 17 00:00:00 2001 From: Ben Constable Date: Thu, 12 Sep 2024 20:32:07 +0100 Subject: [PATCH 05/17] Update the prompt files --- text_2_sql/ai_search.py | 115 ++ text_2_sql/environment.py | 30 + .../ai_search_plugin/ai_search_plugin.py | 81 +- .../vector_based_sql_plugin.py | 120 +- .../{prompt.yaml => prompt_based_prompt.yaml} | 0 .../rag_with_ai_search_and_text_2_sql.ipynb | 2 +- .../rag_with_prompt_based_text_2_sql.ipynb | 4 +- .../rag_with_vector_based_text_2_sql.ipynb | 4 +- ..._vector_based_text_2_sql_query_cache.ipynb | 1062 +++++++++++++++++ text_2_sql/vector_based_prompt.yaml | 113 ++ 10 files changed, 1368 insertions(+), 163 deletions(-) create mode 100644 text_2_sql/ai_search.py create mode 100644 text_2_sql/environment.py rename text_2_sql/{prompt.yaml => prompt_based_prompt.yaml} (100%) create mode 100644 text_2_sql/rag_with_vector_based_text_2_sql_query_cache.ipynb create mode 100644 text_2_sql/vector_based_prompt.yaml diff --git a/text_2_sql/ai_search.py b/text_2_sql/ai_search.py new file mode 100644 index 0000000..2911b2c --- /dev/null +++ b/text_2_sql/ai_search.py @@ -0,0 +1,115 @@ +# Copyright (c) Microsoft Corporation. +# Licensed under the MIT License. +from azure.identity import DefaultAzureCredential +from openai import AsyncAzureOpenAI +from azure.core.credentials import AzureKeyCredential +from azure.search.documents.models import VectorizedQuery +from azure.search.documents.aio import SearchClient +from environment import IdentityType, get_identity_type +import os +import logging + + +async def run_ai_search_query( + query, + vector_fields: list[str], + retrieval_fields: list[str], + index_name: str, + semantic_config: str, +): + """Run the AI search query.""" + identity_type = get_identity_type() + + async with AsyncAzureOpenAI( + # This is the default and can be omitted + api_key=os.environ["OpenAI__ApiKey"], + azure_endpoint=os.environ["OpenAI__Endpoint"], + api_version=os.environ["OpenAI__ApiVersion"], + ) as open_ai_client: + embeddings = await open_ai_client.embeddings.create( + model=os.environ["OpenAI__EmbeddingModel"], input=query + ) + + # Extract the embedding vector + embedding_vector = embeddings.data[0].embedding + + vector_query = VectorizedQuery( + vector=embedding_vector, + k_nearest_neighbors=5, + fields=",".join(vector_fields), + ) + + if identity_type == IdentityType.SYSTEM_ASSIGNED: + credential = DefaultAzureCredential() + elif identity_type == IdentityType.USER_ASSIGNED: + credential = DefaultAzureCredential( + managed_identity_client_id=os.environ["ClientID"] + ) + else: + credential = AzureKeyCredential( + os.environ["AIService__AzureSearchOptions__Key"] + ) + async with SearchClient( + endpoint=os.environ["AIService__AzureSearchOptions__Endpoint"], + index_name=index_name, + credential=credential, + ) as search_client: + results = await search_client.search( + top=5, + query_type="semantic", + semantic_configuration_name=semantic_config, + search_text=query, + select=",".join(retrieval_fields), + vector_queries=[vector_query], + ) + + combined_results = [ + result async for results in results.by_page() async for result in results + ] + + return combined_results + + +async def add_entry_to_index(document: dict, vector_fields: list[str], index_name: str): + """Add an entry to the search index.""" + + for field in vector_fields: + if field not in document: + raise ValueError(f"Field {field} is not in the document.") + + identity_type = get_identity_type() + + fields_to_embed = {field: document[field] for field in vector_fields} + + async with AsyncAzureOpenAI( + # This is the default and can be omitted + api_key=os.environ["OpenAI__ApiKey"], + azure_endpoint=os.environ["OpenAI__Endpoint"], + api_version=os.environ["OpenAI__ApiVersion"], + ) as open_ai_client: + embeddings = await open_ai_client.embeddings.create( + model=os.environ["OpenAI__EmbeddingModel"], input=fields_to_embed.values() + ) + + # Extract the embedding vector + for i, field in enumerate(vector_fields): + document[field] = embeddings.data[i].embedding + + logging.debug("Document with embeddings: %s", document) + + if identity_type == IdentityType.SYSTEM_ASSIGNED: + credential = DefaultAzureCredential() + elif identity_type == IdentityType.USER_ASSIGNED: + credential = DefaultAzureCredential( + managed_identity_client_id=os.environ["ClientID"] + ) + else: + credential = AzureKeyCredential( + os.environ["AIService__AzureSearchOptions__Key"] + ) + async with SearchClient( + endpoint=os.environ["AIService__AzureSearchOptions__Endpoint"], + index_name=index_name, + credential=credential, + ) as search_client: + await search_client.upload_documents(documents=[document]) diff --git a/text_2_sql/environment.py b/text_2_sql/environment.py new file mode 100644 index 0000000..232254e --- /dev/null +++ b/text_2_sql/environment.py @@ -0,0 +1,30 @@ +# Copyright (c) Microsoft Corporation. +# Licensed under the MIT License. +import os +from enum import Enum + + +class IdentityType(Enum): + """The type of the indexer""" + + USER_ASSIGNED = "user_assigned" + SYSTEM_ASSIGNED = "system_assigned" + KEY = "key" + + +def get_identity_type() -> IdentityType: + """This function returns the identity type. + + Returns: + IdentityType: The identity type + """ + identity = os.environ.get("IdentityType") + + if identity == "user_assigned": + return IdentityType.USER_ASSIGNED + elif identity == "system_assigned": + return IdentityType.SYSTEM_ASSIGNED + elif identity == "key": + return IdentityType.KEY + else: + raise ValueError("Invalid identity type") diff --git a/text_2_sql/plugins/ai_search_plugin/ai_search_plugin.py b/text_2_sql/plugins/ai_search_plugin/ai_search_plugin.py index fdd18c8..b09997f 100644 --- a/text_2_sql/plugins/ai_search_plugin/ai_search_plugin.py +++ b/text_2_sql/plugins/ai_search_plugin/ai_search_plugin.py @@ -2,23 +2,10 @@ # Licensed under the MIT License. from semantic_kernel.functions import kernel_function from typing import Annotated -from azure.identity import DefaultAzureCredential -from openai import AsyncAzureOpenAI -from azure.core.credentials import AzureKeyCredential -from azure.search.documents.models import VectorizedQuery -from azure.search.documents.aio import SearchClient import os import json import logging -from enum import Enum - - -class IdentityType(Enum): - """The type of the indexer""" - - USER_ASSIGNED = "user_assigned" - SYSTEM_ASSIGNED = "system_assigned" - KEY = "key" +from ai_search import run_ai_search_query class AISearchPlugin: @@ -47,67 +34,13 @@ async def query_document_storage( str: The JSON representation of the search results. """ - identity = os.environ.get("IdentityType").lower() - - if identity == "user_assigned": - identity_type = IdentityType.USER_ASSIGNED - elif identity == "system_assigned": - identity_type = IdentityType.SYSTEM_ASSIGNED - elif identity == "key": - identity_type = IdentityType.KEY - else: - raise ValueError("Invalid identity type") - - async with AsyncAzureOpenAI( - # This is the default and can be omitted - api_key=os.environ["OpenAI__ApiKey"], - azure_endpoint=os.environ["OpenAI__Endpoint"], - api_version=os.environ["OpenAI__ApiVersion"], - ) as open_ai_client: - embeddings = await open_ai_client.embeddings.create( - model=os.environ["OpenAI__EmbeddingModel"], input=text - ) - - # Extract the embedding vector - embedding_vector = embeddings.data[0].embedding - - vector_query = VectorizedQuery( - vector=embedding_vector, - k_nearest_neighbors=5, - fields="ChunkEmbedding", + documents = await run_ai_search_query( + text, + ["ChunkEmbedding"], + ["Title", "Chunk", "SourceUri"], + os.environ["AIService__AzureSearchOptions__RagDocuments__Index"], + os.environ["AIService__AzureSearchOptions__RagDocuments__SemanticConfig"], ) - if identity_type == IdentityType.SYSTEM_ASSIGNED: - credential = DefaultAzureCredential() - elif identity_type == IdentityType.USER_ASSIGNED: - credential = DefaultAzureCredential( - managed_identity_client_id=os.environ["ClientID"] - ) - else: - credential = AzureKeyCredential( - os.environ["AIService__AzureSearchOptions__Key"] - ) - async with SearchClient( - endpoint=os.environ["AIService__AzureSearchOptions__Endpoint"], - index_name=os.environ["AIService__AzureSearchOptions__RagDocuments__Index"], - credential=credential, - ) as search_client: - results = await search_client.search( - top=5, - query_type="semantic", - semantic_configuration_name=os.environ[ - "AIService__AzureSearchOptions__RagDocuments__SemanticConfig" - ], - search_text=text, - select="Title,Chunk,SourceUri", - vector_queries=[vector_query], - ) - - documents = [ - document - async for result in results.by_page() - async for document in result - ] - logging.debug("Results: %s", documents) return json.dumps(documents, default=str) diff --git a/text_2_sql/plugins/vector_based_sql_plugin/vector_based_sql_plugin.py b/text_2_sql/plugins/vector_based_sql_plugin/vector_based_sql_plugin.py index 0a4930a..f7c0bbc 100644 --- a/text_2_sql/plugins/vector_based_sql_plugin/vector_based_sql_plugin.py +++ b/text_2_sql/plugins/vector_based_sql_plugin/vector_based_sql_plugin.py @@ -5,21 +5,8 @@ from typing import Annotated import os import json -from azure.core.credentials import AzureKeyCredential import logging -from azure.identity import DefaultAzureCredential -from openai import AsyncAzureOpenAI -from azure.search.documents.models import VectorizedQuery -from azure.search.documents.aio import SearchClient -from enum import Enum - - -class IdentityType(Enum): - """The type of the indexer""" - - USER_ASSIGNED = "user_assigned" - SYSTEM_ASSIGNED = "system_assigned" - KEY = "key" +from ai_search import run_ai_search_query class VectorBasedSQLPlugin: @@ -40,7 +27,9 @@ def __init__(self, database: str, target_engine: str = "Microsoft TSQL Server"): self.database = database self.target_engine = target_engine - def system_prompt(self, engine_specific_rules: str | None = None) -> str: + def system_prompt( + self, engine_specific_rules: str | None = None, query_cache: str | None = None + ) -> str: """Get the schemas for the database entities and provide a system prompt for the user. Returns: @@ -50,19 +39,36 @@ def system_prompt(self, engine_specific_rules: str | None = None) -> str: if engine_specific_rules: engine_specific_rules = f"\n The following {self.target_engine} Syntax rules must be adhered to.\n {engine_specific_rules}" - system_prompt = f"""Use the 'GetEntitySchema()' function to search for the most relevant schemas for the data that you wish to obtain. Use the 'RunSQLQuery()' function to run the SQL query against the database. + use_query_cache = ( + os.environ.get("Text2Sql__UseQueryCache", "False").lower() == "true" + ) + + if use_query_cache: + query_prompt = f"""First look at the cached queries, SQL templates and schemas to see if you can use them to formulate a SQL query. If you can't find a suitable query, use the 'GetEntitySchema()' function to search for the most relevant schemas for the data that you wish to obtain. + + [BEGIN QUERY CACHE] + {query_cache} + [END QUERY CACHE] + """ + else: + query_prompt = """Use the 'GetEntitySchema()' function to search for the most relevant schemas for the data that you wish to obtain. + + Always generate the SQL query based on the GetEntitySchema() function output, do not use the chat history data to generate the SQL query. + Only use the column names obtained from GetEntitySchema() when constructing a SQL query, do not make up column names.""" + + system_prompt = f"""{query_prompt} + + Use the 'RunSQLQuery()' function to run the SQL query against the database. Output corresponding text values in the answer for columns where there is an ID. For example, if the column is 'ProductID', output the corresponding 'ProductModel' in the response. Do not include the ID in the response. If a user is asking for a comparison, always compare the relevant values in the database. The target database engine is {self.target_engine}, SQL queries must be able compatible to run on {self.target_engine}. {engine_specific_rules} - Always generate the SQL query based on the GetEntitySchema() function output, do not use the chat history data to generate the SQL query. - Only use the column names obtained from GetEntitySchema() when constructing a SQL query, do not make up column names. You must only provide SELECT SQL queries. - For a given entity, use the 'SelectFromEntity' property returned from 'GetEntitySchema()' function in the SELECT FROM part of the SQL query. If the property is {{'SelectFromEntity': 'test_schema.test_table'}}, the select statement will be formulated from 'SELECT FROM test_schema.test_table WHERE . + For a given entity, use the 'SelectFromEntity' property returned in the schema in the SELECT FROM part of the SQL query. If the property is {{'SelectFromEntity': 'test_schema.test_table'}}, the select statement will be formulated from 'SELECT FROM test_schema.test_table WHERE . If you don't know how the value is formatted in a column, run a query against the column to get the unique values that might match your query. - Some columns returned from 'GetEntitySchema()' may have the properties 'AllowedValues' or 'SampleValues'. Use these values to determine the possible values that can be used in the SQL query. + Some columns in the schema may have the properties 'AllowedValues' or 'SampleValues'. Use these values to determine the possible values that can be used in the SQL query. The source title to cite is the 'EntityName' property. The source reference is the SQL query used. The source chunk is the result of the SQL query used to answer the user query in Markdown table format. e.g. {{ 'title': "vProductAndDescription", 'chunk': '| ProductID | Name | ProductModel | Culture | Description |\\n|-----------|-------------------|--------------|---------|----------------------------------|\\n| 101 | Mountain Bike | MT-100 | en | A durable bike for mountain use. |\\n| 102 | Road Bike | RB-200 | en | Lightweight bike for road use. |\\n| 103 | Hybrid Bike | HB-300 | fr | Vélo hybride pour usage mixte. |\\n', 'reference': 'SELECT ProductID, Name, ProductModel, Culture, Description FROM vProductAndDescription WHERE Culture = \"en\";' }}""" @@ -89,72 +95,18 @@ async def get_entity_schemas( str: The schema of the views or tables in JSON format. """ - identity = os.environ.get("IdentityType").lower() - - if identity == "user_assigned": - identity_type = IdentityType.USER_ASSIGNED - elif identity == "system_assigned": - identity_type = IdentityType.SYSTEM_ASSIGNED - elif identity == "key": - identity_type = IdentityType.KEY - else: - raise ValueError("Invalid identity type") - - async with AsyncAzureOpenAI( - # This is the default and can be omitted - api_key=os.environ["OpenAI__ApiKey"], - azure_endpoint=os.environ["OpenAI__Endpoint"], - api_version=os.environ["OpenAI__ApiVersion"], - ) as open_ai_client: - embeddings = await open_ai_client.embeddings.create( - model=os.environ["OpenAI__EmbeddingModel"], input=text - ) - - # Extract the embedding vector - embedding_vector = embeddings.data[0].embedding - - vector_query = VectorizedQuery( - vector=embedding_vector, - k_nearest_neighbors=5, - fields="DescriptionEmbedding", + schemas = await run_ai_search_query( + text, + ["DescriptionEmbedding"], + ["Entity", "EntityName", "Description", "Columns"], + os.environ["AIService__AzureSearchOptions__Text2Sql__Index"], + os.environ["AIService__AzureSearchOptions__Text2Sql__SemanticConfig"], ) - if identity_type == IdentityType.SYSTEM_ASSIGNED: - credential = DefaultAzureCredential() - elif identity_type == IdentityType.USER_ASSIGNED: - credential = DefaultAzureCredential( - managed_identity_client_id=os.environ["ClientID"] - ) - else: - credential = AzureKeyCredential( - os.environ["AIService__AzureSearchOptions__Key"] - ) - - async with SearchClient( - endpoint=os.environ["AIService__AzureSearchOptions__Endpoint"], - index_name=os.environ["AIService__AzureSearchOptions__Text2Sql__Index"], - credential=credential, - ) as search_client: - results = await search_client.search( - top=3, - query_type="semantic", - semantic_configuration_name=os.environ[ - "AIService__AzureSearchOptions__Text2Sql__SemanticConfig" - ], - search_text=text, - select="Entity,EntityName,Description,Columns", - vector_queries=[vector_query], - ) - - entities = [] - # Add the SelectFromEntity property to the entity - async for result in results.by_page(): - async for entity in result: - entity["SelectFromEntity"] = f"{self.database}.{entity['Entity']}" - entities.append(entity) - - logging.debug("Results: %s", entities) - return json.dumps(entities, default=str) + for schema in schemas: + schema["SelectFromEntity"] = f"{self.database}.{schema['Entity']}" + + return json.dumps(schemas, default=str) @kernel_function( description="Runs an SQL query against the SQL Database to extract information.", diff --git a/text_2_sql/prompt.yaml b/text_2_sql/prompt_based_prompt.yaml similarity index 100% rename from text_2_sql/prompt.yaml rename to text_2_sql/prompt_based_prompt.yaml diff --git a/text_2_sql/rag_with_ai_search_and_text_2_sql.ipynb b/text_2_sql/rag_with_ai_search_and_text_2_sql.ipynb index f774448..54c1112 100644 --- a/text_2_sql/rag_with_ai_search_and_text_2_sql.ipynb +++ b/text_2_sql/rag_with_ai_search_and_text_2_sql.ipynb @@ -208,7 +208,7 @@ "outputs": [], "source": [ "# Load prompt and execution settings from the file\n", - "with open(\"./prompt.yaml\", \"r\") as file:\n", + "with open(\"./prompt_based_prompt.yaml\", \"r\") as file:\n", " data = yaml.safe_load(file.read())\n", " prompt_template_config = PromptTemplateConfig(**data)" ] diff --git a/text_2_sql/rag_with_prompt_based_text_2_sql.ipynb b/text_2_sql/rag_with_prompt_based_text_2_sql.ipynb index 88e26b4..1e374e9 100644 --- a/text_2_sql/rag_with_prompt_based_text_2_sql.ipynb +++ b/text_2_sql/rag_with_prompt_based_text_2_sql.ipynb @@ -186,7 +186,7 @@ "outputs": [], "source": [ "# Load prompt and execution settings from the file\n", - "with open(\"./prompt.yaml\", \"r\") as file:\n", + "with open(\"./prompt_based_prompt.yaml\", \"r\") as file:\n", " data = yaml.safe_load(file.read())\n", " prompt_template_config = PromptTemplateConfig(**data)" ] @@ -938,7 +938,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.11.9" + "version": "3.12.3" }, "microsoft": { "host": { diff --git a/text_2_sql/rag_with_vector_based_text_2_sql.ipynb b/text_2_sql/rag_with_vector_based_text_2_sql.ipynb index 7563494..783632a 100644 --- a/text_2_sql/rag_with_vector_based_text_2_sql.ipynb +++ b/text_2_sql/rag_with_vector_based_text_2_sql.ipynb @@ -53,7 +53,7 @@ "from semantic_kernel.functions.kernel_arguments import KernelArguments\n", "from semantic_kernel.prompt_template.prompt_template_config import PromptTemplateConfig\n", "from IPython.display import display, Markdown\n", - "\n", + "import time\n", "logging.basicConfig(level=logging.INFO)" ] }, @@ -186,7 +186,7 @@ "outputs": [], "source": [ "# Load prompt and execution settings from the file\n", - "with open(\"./prompt.yaml\", \"r\") as file:\n", + "with open(\"./vector_based_prompt.yaml\", \"r\") as file:\n", " data = yaml.safe_load(file.read())\n", " prompt_template_config = PromptTemplateConfig(**data)" ] diff --git a/text_2_sql/rag_with_vector_based_text_2_sql_query_cache.ipynb b/text_2_sql/rag_with_vector_based_text_2_sql_query_cache.ipynb new file mode 100644 index 0000000..48dec7a --- /dev/null +++ b/text_2_sql/rag_with_vector_based_text_2_sql_query_cache.ipynb @@ -0,0 +1,1062 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Copyright (c) Microsoft Corporation.\n", + "\n", + "Licensed under the MIT License." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Text2SQL with Semantic Kernel & Azure OpenAI\n", + "\n", + "This notebook demonstrates how the SQL plugin can be integrated with Semantic Kernel and Azure OpenAI to answer questions from the database based on the schemas provided. \n", + "\n", + "A multi-shot approach is used for SQL generation for more reliable results and reduced token usage. More details can be found in the README.md." + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": { + "gather": { + "logged": 1718623217703 + }, + "jupyter": { + "outputs_hidden": false, + "source_hidden": false + }, + "nteract": { + "transient": { + "deleting": false + } + } + }, + "outputs": [], + "source": [ + "import logging\n", + "import os\n", + "import yaml\n", + "import dotenv\n", + "import json\n", + "from semantic_kernel.connectors.ai.open_ai import (\n", + " AzureChatCompletion,\n", + ")\n", + "from semantic_kernel.contents.chat_history import ChatHistory\n", + "from semantic_kernel.kernel import Kernel\n", + "from plugins.vector_based_sql_plugin.vector_based_sql_plugin import VectorBasedSQLPlugin\n", + "from semantic_kernel.functions.kernel_arguments import KernelArguments\n", + "from semantic_kernel.prompt_template.prompt_template_config import PromptTemplateConfig\n", + "from IPython.display import display, Markdown\n", + "from ai_search import run_ai_search_query, add_entry_to_index\n", + "import time\n", + "logging.basicConfig(level=logging.INFO)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Kernel Setup" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "dotenv.load_dotenv()\n", + "kernel = Kernel()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Set up GPT connections" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": { + "gather": { + "logged": 1718623218006 + }, + "jupyter": { + "outputs_hidden": false, + "source_hidden": false + }, + "nteract": { + "transient": { + "deleting": false + } + } + }, + "outputs": [], + "source": [ + "service_id = \"chat\"" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": { + "gather": { + "logged": 1718623218267 + }, + "jupyter": { + "outputs_hidden": false, + "source_hidden": false + }, + "nteract": { + "transient": { + "deleting": false + } + } + }, + "outputs": [], + "source": [ + "chat_service = AzureChatCompletion(\n", + " service_id=service_id,\n", + " deployment_name=os.environ[\"OpenAI__CompletionDeployment\"],\n", + " endpoint=os.environ[\"OpenAI__Endpoint\"],\n", + " api_key=os.environ[\"OpenAI__ApiKey\"],\n", + ")\n", + "kernel.add_service(chat_service)" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": { + "gather": { + "logged": 1718623218614 + }, + "jupyter": { + "outputs_hidden": false, + "source_hidden": false + }, + "nteract": { + "transient": { + "deleting": false + } + } + }, + "outputs": [ + { + "data": { + "text/plain": [ + "KernelPlugin(name='SQL', description=None, functions={'GetEntitySchema': KernelFunctionFromMethod(metadata=KernelFunctionMetadata(name='GetEntitySchema', plugin_name='SQL', description='Gets the schema of a view or table in the SQL Database by selecting the most relevant entity based on the search term. Several entities may be returned.', parameters=[KernelParameterMetadata(name='text', description='The text to run a semantic search against. Relevant entities will be returned.', default_value=None, type_='str', is_required=True, type_object=, schema_data={'type': 'string', 'description': 'The text to run a semantic search against. Relevant entities will be returned.'}, function_schema_include=True)], is_prompt=False, is_asynchronous=True, return_parameter=KernelParameterMetadata(name='return', description='', default_value=None, type_='str', is_required=True, type_object=, schema_data={'type': 'string'}, function_schema_include=True), additional_properties={}), invocation_duration_histogram=, streaming_duration_histogram=, method=>, stream_method=None), 'RunSQLQuery': KernelFunctionFromMethod(metadata=KernelFunctionMetadata(name='RunSQLQuery', plugin_name='SQL', description='Runs an SQL query against the SQL Database to extract information.', parameters=[KernelParameterMetadata(name='sql_query', description='The SQL query to run against the DB', default_value=None, type_='str', is_required=True, type_object=, schema_data={'type': 'string', 'description': 'The SQL query to run against the DB'}, function_schema_include=True)], is_prompt=False, is_asynchronous=True, return_parameter=KernelParameterMetadata(name='return', description='', default_value=None, type_='str', is_required=True, type_object=, schema_data={'type': 'string'}, function_schema_include=True), additional_properties={}), invocation_duration_histogram=, streaming_duration_histogram=, method=>, stream_method=None)})" + ] + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Register the SQL Plugin with the Database name to use.\n", + "sql_plugin = VectorBasedSQLPlugin(database=os.environ[\"Text2Sql__DatabaseName\"])\n", + "kernel.add_plugin(sql_plugin, \"SQL\")" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "nteract": { + "transient": { + "deleting": false + } + } + }, + "source": [ + "## Prompt Setup" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [], + "source": [ + "# Load prompt and execution settings from the file\n", + "with open(\"./vector_based_prompt.yaml\", \"r\") as file:\n", + " data = yaml.safe_load(file.read())\n", + " prompt_template_config = PromptTemplateConfig(**data)" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [], + "source": [ + "chat_function = kernel.add_function(\n", + " prompt_template_config=prompt_template_config,\n", + " plugin_name=\"ChatBot\",\n", + " function_name=\"Chat\",\n", + ")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## ChatBot setup" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [], + "source": [ + "history = ChatHistory()" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [], + "source": [ + "async def ask_question(question: str, chat_history: ChatHistory) -> str:\n", + " \"\"\"Asks a question to the chatbot and returns the answer.\n", + " \n", + " Args:\n", + " question (str): The question to ask the chatbot.\n", + " chat_history (ChatHistory): The chat history object.\n", + " \n", + " Returns:\n", + " str: The answer from the chatbot.\n", + " \"\"\"\n", + "\n", + " start_time = time.time()\n", + " cached_schemas = await run_ai_search_query(\n", + " question,\n", + " [\"QuestionEmbedding\", \"QueryEmbedding\"],\n", + " [\"Question\", \"Query\", \"Schemas\"],\n", + " os.environ[\"AIService__AzureSearchOptions__Text2SqlQueryCache__Index\"],\n", + " os.environ[\"AIService__AzureSearchOptions__Text2SqlQueryCache__SemanticConfig\"],\n", + " )\n", + "\n", + " # Create important information prompt that contains the SQL database information.\n", + " engine_specific_rules = \"Use TOP X to limit the number of rows returned instead of LIMIT X. NEVER USE LIMIT X as it produces a syntax error.\"\n", + " important_information_prompt = f\"\"\"\n", + " [SQL DATABASE INFORMATION]\n", + " {sql_plugin.system_prompt(engine_specific_rules=engine_specific_rules, query_cache=cached_schemas)}\n", + " [END SQL DATABASE INFORMATION]\n", + " \"\"\"\n", + "\n", + " arguments = KernelArguments()\n", + " arguments[\"chat_history\"] = chat_history\n", + " arguments[\"important_information\"] = important_information_prompt\n", + " arguments[\"user_input\"] = question\n", + "\n", + " logging.info(\"Question: %s\", question)\n", + "\n", + " answer = await kernel.invoke(\n", + " function_name=\"Chat\",\n", + " plugin_name=\"ChatBot\",\n", + " arguments=arguments,\n", + " chat_history=chat_history,\n", + " )\n", + "\n", + " logging.info(\"Answer: %s\", answer)\n", + "\n", + " end_time = time.time()\n", + " logging.info(\"Time taken: %s\", end_time - start_time)\n", + "\n", + " # Log the question and answer to the chat history.\n", + " chat_history.add_user_message(question)\n", + " chat_history.add_message({\"role\": \"assistant\", \"message\": answer})\n", + "\n", + " json_answer = json.loads(str(answer))\n", + "\n", + " display(Markdown(json_answer[\"answer\"]))" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:root:Question: What are the different product categories we have?\n", + "INFO:semantic_kernel.functions.kernel_function:Function ChatBot-Chat invoking.\n", + "INFO:semantic_kernel.contents.chat_history:Could not parse prompt \n", + "As a senior analyst, your primary responsibility is to provide precise and thorough answers to the user's queries. Utilize all the provided functions to craft your responses. You must deliver detailed and accurate final answers with clear explanations and actionable insights.\n", + "\n", + "Always use the provided functions to obtain key information in order to answer the question.\n", + "If you are asked to use always use a function, you must use that function to compliment the answer.\n", + "Always use multiple functions to formulate the answer.\n", + "Always execute multiple functions in parallel to compliment the results.\n", + "\n", + "The response to the user must meet the requirements in RESPONSE OUTPUT REQUIREMENTS.\n", + "IMPORTANT INFORMATION contains useful information that you can use to aid your knowledge.\n", + "CHAT HISTORY contains the previous question and answer pairs in the conversation in JSON format. Do not use this information to answer the question, but to provide context on what was asked previously.\n", + "\n", + "[IMPORTANT INFORMATION]\n", + "\n", + "\n", + " [SQL DATABASE INFORMATION]\n", + " Use the 'GetEntitySchema()' function to search for the most relevant schemas for the data that you wish to obtain. Use the 'RunSQLQuery()' function to run the SQL query against the database.\n", + "\n", + " Output corresponding text values in the answer for columns where there is an ID. For example, if the column is 'ProductID', output the corresponding 'ProductModel' in the response. Do not include the ID in the response.\n", + " If a user is asking for a comparison, always compare the relevant values in the database.\n", + "\n", + " The target database engine is Microsoft TSQL Server, SQL queries must be able compatible to run on Microsoft TSQL Server. \n", + " The following Microsoft TSQL Server Syntax rules must be adhered to.\n", + " Use TOP X to limit the number of rows returned instead of LIMIT X. NEVER USE LIMIT X as it produces a syntax error.\n", + " Always generate the SQL query based on the GetEntitySchema() function output, do not use the chat history data to generate the SQL query.\n", + " Only use the column names obtained from GetEntitySchema() when constructing a SQL query, do not make up column names.\n", + " You must only provide SELECT SQL queries.\n", + " For a given entity, use the 'SelectFromEntity' property returned from 'GetEntitySchema()' function in the SELECT FROM part of the SQL query. If the property is {'SelectFromEntity': 'test_schema.test_table'}, the select statement will be formulated from 'SELECT <VALUES> FROM test_schema.test_table WHERE <CONDITION>.\n", + "\n", + " If you don't know how the value is formatted in a column, run a query against the column to get the unique values that might match your query.\n", + " Some columns returned from 'GetEntitySchema()' may have the properties 'AllowedValues' or 'SampleValues'. Use these values to determine the possible values that can be used in the SQL query.\n", + "\n", + " The source title to cite is the 'EntityName' property. The source reference is the SQL query used. The source chunk is the result of the SQL query used to answer the user query in Markdown table format. e.g. { 'title': "vProductAndDescription", 'chunk': '| ProductID | Name | ProductModel | Culture | Description |\\n|-----------|-------------------|--------------|---------|----------------------------------|\\n| 101 | Mountain Bike | MT-100 | en | A durable bike for mountain use. |\\n| 102 | Road Bike | RB-200 | en | Lightweight bike for road use. |\\n| 103 | Hybrid Bike | HB-300 | fr | V\u00e9lo hybride pour usage mixte. |\\n', 'reference': 'SELECT ProductID, Name, ProductModel, Culture, Description FROM vProductAndDescription WHERE Culture = "en";' }\n", + " [END SQL DATABASE INFORMATION]\n", + " \n", + "\n", + "[END IMPORTANT INFORMATION]\n", + "\n", + "[RESPONSE OUTPUT REQUIREMENTS]\n", + "\n", + " The answer MUST be returned in JSON format as { \"answer\": \"\", \"sources\": [ {\"title\": , \"chunk\": , \"reference\": \"\"}, {\"title\": , \"chunk\": , \"reference\": \"\"} ] }.\n", + "\n", + " The 'answer' property MUST meet the requirements in the ANSWER PROPERTY REQUIREMENTS.\n", + " The 'sources' property MUST meet the requirements in the SOURCES PROPERTY REQUIREMENTS.\n", + "\n", + " Do NOT return anything outside of the provided JSON property. Ensure that this is valid JSON returned.\n", + "\n", + " Never return an empty response or null value. Always answer the question.\n", + "\n", + " [ANSWER PROPERTY REQUIREMENTS]\n", + " 1. Language and Tone:\n", + " Use only British English throughout the response.\n", + " Employ a business-friendly language that is professional and easy to understand.\n", + "\n", + " 2. Content Restrictions:\n", + " Do not use any profanity, offensive language, hate speech, or code in the response.\n", + " If you encounter any such content, handle it gracefully by omitting or rephrasing it appropriately.\n", + "\n", + " 3. Information Sources:\n", + " Use only information from the provided functions and specified important information.\n", + " Do not use any external sources or the chat history for constructing the response.\n", + " In case of conflicting information, prioritize data from the SQL Database as the primary source of truth.\n", + "\n", + " 4. Calculations:\n", + " For any required calculations, use only the values provided in the context.\n", + " Provide a brief, clear explanation of the calculations beneath the results.\n", + "\n", + " 5. Response Structure:\n", + " Ensure the response is direct, easy to understand, and well-structured.\n", + " Format the response using Markdown for clarity and readability.\n", + " Use bold sub-headings for clarity where needed. Only use Markdown headings Level 3 (###) and Level 4 (####).\n", + " Use bullet points or numbered lists when appropriate.\n", + " Do not vary the font size within the same sentence.\n", + "\n", + " 6. Citations:\n", + " All factual information used in the answer must be cited with numbered references. For example, [1] should be used to refer to the first source.\n", + " Each citation in the answer must correspond to a single entry in the 'sources' object.\n", + " The same citation and corresponding context chunk may be used multiple times if needed.\n", + " Place the numbered citation at the end of each relevant sentence that uses information from the sources.\n", + " Ensure that each source listed in the 'sources' property is cited at least once in the answer.\n", + " Do not provide a list of definitions from the business glossary; use such information only to enhance the answer contextually.\n", + "\n", + " 7. Citations Format:\n", + " Citations should be embedded within the text, not as a separate list at the end of the 'answer' property.\n", + " [END ANSWER PROPERTY REQUIREMENTS]\n", + "\n", + " [SOURCES PROPERTY REQUIREMENTS]\n", + " 1. Reference Inclusion:\n", + " Include all corresponding references for all cited content in the 'answer' property.\n", + " Place the references in the 'sources' property.\n", + "\n", + " 2. Source Format:\n", + " Each entry in the 'sources' property must be formatted as: {\"title\": \"\", \"chunk\": \"\", \"reference\": \"\"}\n", + " For example, a complete response with two citations would be formatted as: { \"answer\": \"\", \"sources\": [ {\"title\": , \"chunk\": , \"reference\": \"\"}, {\"title\": , \"chunk\": , \"reference\": \"\"} ] }\n", + "\n", + " 3. Source Chunk:\n", + " The 'chunk' property should contain a concise, unedited snippet of the relevant context that supports the answer.\n", + "\n", + " 4. Mandatory References:\n", + " Ensure that every citation in the 'answer' has a corresponding entry in the 'sources' property.\n", + " Every entry in the 'sources' property must be cited at least once in the answer.\n", + " [END SOURCES PROPERTY REQUIREMENTS]\n", + "\n", + "[END RESPONSE OUTPUT REQUIREMENTS]\n", + "\n", + "\n", + "What are the different product categories we have? as xml, treating as text, error was: not well-formed (invalid token): line 41, column 78\n", + "INFO:httpx:HTTP Request: POST https://open-ai-gpt-001.openai.azure.com/openai/deployments/gpt-4o/chat/completions?api-version=2024-02-01 \"HTTP/1.1 200 OK\"\n", + "INFO:semantic_kernel.connectors.ai.open_ai.services.open_ai_handler:OpenAI usage: CompletionUsage(completion_tokens=51, prompt_tokens=1815, total_tokens=1866)\n", + "INFO:semantic_kernel.connectors.ai.open_ai.services.open_ai_chat_completion_base:processing 2 tool calls in parallel.\n", + "INFO:semantic_kernel.kernel:Calling SQL-GetEntitySchema function with args: {\"text\": \"Product Category\"}\n", + "INFO:semantic_kernel.functions.kernel_function:Function SQL-GetEntitySchema invoking.\n", + "INFO:semantic_kernel.kernel:Calling SQL-GetEntitySchema function with args: {\"text\": \"Product\"}\n", + "INFO:semantic_kernel.functions.kernel_function:Function SQL-GetEntitySchema invoking.\n", + "INFO:httpx:HTTP Request: POST https://open-ai-gpt-001.openai.azure.com/openai/deployments/text-embedding-ada-002/embeddings?api-version=2023-03-15-preview \"HTTP/1.1 200 OK\"\n", + "INFO:azure.core.pipeline.policies.http_logging_policy:Request URL: 'https://open-ai-vector-db.search.windows.net/indexes('text-2-sql-index')/docs/search.post.search?api-version=REDACTED'\n", + "Request method: 'POST'\n", + "Request headers:\n", + " 'Content-Type': 'application/json'\n", + " 'Content-Length': '34765'\n", + " 'api-key': 'REDACTED'\n", + " 'Accept': 'application/json;odata.metadata=none'\n", + " 'x-ms-client-request-id': '435b3768-706a-11ef-ae73-0242ac110002'\n", + " 'User-Agent': 'azsdk-python-search-documents/11.6.0b4 Python/3.12.3 (Linux-5.15.153.1-microsoft-standard-WSL2-x86_64-with-glibc2.36)'\n", + "A body is sent with the request\n", + "INFO:httpx:HTTP Request: POST https://open-ai-gpt-001.openai.azure.com/openai/deployments/text-embedding-ada-002/embeddings?api-version=2023-03-15-preview \"HTTP/1.1 200 OK\"\n", + "INFO:azure.core.pipeline.policies.http_logging_policy:Request URL: 'https://open-ai-vector-db.search.windows.net/indexes('text-2-sql-index')/docs/search.post.search?api-version=REDACTED'\n", + "Request method: 'POST'\n", + "Request headers:\n", + " 'Content-Type': 'application/json'\n", + " 'Content-Length': '34721'\n", + " 'api-key': 'REDACTED'\n", + " 'Accept': 'application/json;odata.metadata=none'\n", + " 'x-ms-client-request-id': '4360c9a8-706a-11ef-ae73-0242ac110002'\n", + " 'User-Agent': 'azsdk-python-search-documents/11.6.0b4 Python/3.12.3 (Linux-5.15.153.1-microsoft-standard-WSL2-x86_64-with-glibc2.36)'\n", + "A body is sent with the request\n", + "INFO:azure.core.pipeline.policies.http_logging_policy:Response status: 200\n", + "Response headers:\n", + " 'Transfer-Encoding': 'chunked'\n", + " 'Content-Type': 'application/json; odata.metadata=none; odata.streaming=true; charset=utf-8'\n", + " 'Content-Encoding': 'REDACTED'\n", + " 'Vary': 'REDACTED'\n", + " 'Server': 'Microsoft-IIS/10.0'\n", + " 'Strict-Transport-Security': 'REDACTED'\n", + " 'Preference-Applied': 'REDACTED'\n", + " 'OData-Version': 'REDACTED'\n", + " 'request-id': '435b3768-706a-11ef-ae73-0242ac110002'\n", + " 'elapsed-time': 'REDACTED'\n", + " 'Strict-Transport-Security': 'REDACTED'\n", + " 'Date': 'Wed, 11 Sep 2024 18:18:39 GMT'\n", + "INFO:semantic_kernel.functions.kernel_function:Function SQL-GetEntitySchema succeeded.\n", + "INFO:semantic_kernel.functions.kernel_function:Function completed. Duration: 0.590935s\n", + "INFO:azure.core.pipeline.policies.http_logging_policy:Response status: 200\n", + "Response headers:\n", + " 'Transfer-Encoding': 'chunked'\n", + " 'Content-Type': 'application/json; odata.metadata=none; odata.streaming=true; charset=utf-8'\n", + " 'Content-Encoding': 'REDACTED'\n", + " 'Vary': 'REDACTED'\n", + " 'Server': 'Microsoft-IIS/10.0'\n", + " 'Strict-Transport-Security': 'REDACTED'\n", + " 'Preference-Applied': 'REDACTED'\n", + " 'OData-Version': 'REDACTED'\n", + " 'request-id': '4360c9a8-706a-11ef-ae73-0242ac110002'\n", + " 'elapsed-time': 'REDACTED'\n", + " 'Strict-Transport-Security': 'REDACTED'\n", + " 'Date': 'Wed, 11 Sep 2024 18:18:39 GMT'\n", + "INFO:semantic_kernel.functions.kernel_function:Function SQL-GetEntitySchema succeeded.\n", + "INFO:semantic_kernel.functions.kernel_function:Function completed. Duration: 0.566008s\n", + "INFO:httpx:HTTP Request: POST https://open-ai-gpt-001.openai.azure.com/openai/deployments/gpt-4o/chat/completions?api-version=2024-02-01 \"HTTP/1.1 429 Too Many Requests\"\n", + "INFO:openai._base_client:Retrying request to /chat/completions in 1.000000 seconds\n", + "INFO:httpx:HTTP Request: POST https://open-ai-gpt-001.openai.azure.com/openai/deployments/gpt-4o/chat/completions?api-version=2024-02-01 \"HTTP/1.1 200 OK\"\n", + "INFO:semantic_kernel.connectors.ai.open_ai.services.open_ai_handler:OpenAI usage: CompletionUsage(completion_tokens=34, prompt_tokens=5818, total_tokens=5852)\n", + "INFO:semantic_kernel.connectors.ai.open_ai.services.open_ai_chat_completion_base:processing 1 tool calls in parallel.\n", + "INFO:semantic_kernel.kernel:Calling SQL-RunSQLQuery function with args: {\"sql_query\":\"SELECT ParentProductCategoryName, ProductCategoryName FROM SalesLT.vGetAllCategories;\"}\n", + "INFO:semantic_kernel.functions.kernel_function:Function SQL-RunSQLQuery invoking.\n", + "INFO:root:Executing SQL Query\n", + "INFO:semantic_kernel.functions.kernel_function:Function SQL-RunSQLQuery succeeded.\n", + "INFO:semantic_kernel.functions.kernel_function:Function completed. Duration: 0.369210s\n", + "INFO:httpx:HTTP Request: POST https://open-ai-gpt-001.openai.azure.com/openai/deployments/gpt-4o/chat/completions?api-version=2024-02-01 \"HTTP/1.1 200 OK\"\n", + "INFO:semantic_kernel.connectors.ai.open_ai.services.open_ai_handler:OpenAI usage: CompletionUsage(completion_tokens=636, prompt_tokens=6556, total_tokens=7192)\n", + "INFO:semantic_kernel.functions.kernel_function:Function ChatBot-Chat succeeded.\n", + "INFO:semantic_kernel.functions.kernel_function:Function completed. Duration: 9.696862s\n", + "INFO:root:Answer: {\n", + " \"answer\": \"Our product categories are organised into several parent categories, each containing multiple subcategories. Here is a detailed list of the different product categories we have:\\n\\n### Accessories\\n- Bike Racks\\n- Bike Stands\\n- Bottles and Cages\\n- Cleaners\\n- Fenders\\n- Helmets\\n- Hydration Packs\\n- Lights\\n- Locks\\n- Panniers\\n- Pumps\\n- Tires and Tubes\\n\\n### Clothing\\n- Bib-Shorts\\n- Caps\\n- Gloves\\n- Jerseys\\n- Shorts\\n- Socks\\n- Tights\\n- Vests\\n\\n### Components\\n- Handlebars\\n- Bottom Brackets\\n- Brakes\\n- Chains\\n- Cranksets\\n- Derailleurs\\n- Forks\\n- Headsets\\n- Mountain Frames\\n- Pedals\\n- Road Frames\\n- Saddles\\n- Touring Frames\\n- Wheels\\n\\n### Bikes\\n- Mountain Bikes\\n- Road Bikes\\n- Touring Bikes\\n\\nThese categories help in better organising and managing our product inventory, making it easier for customers to find what they need [1].\",\n", + " \"sources\": [\n", + " {\n", + " \"title\": \"Get All Categories\",\n", + " \"chunk\": \"| ParentProductCategoryName | ProductCategoryName |\\n|---------------------------|---------------------|\\n| Accessories | Bike Racks |\\n| Accessories | Bike Stands |\\n| Accessories | Bottles and Cages |\\n| Accessories | Cleaners |\\n| Accessories | Fenders |\\n| Accessories | Helmets |\\n| Accessories | Hydration Packs |\\n| Accessories | Lights |\\n| Accessories | Locks |\\n| Accessories | Panniers |\\n| Accessories | Pumps |\\n| Accessories | Tires and Tubes |\\n| Clothing | Bib-Shorts |\\n| Clothing | Caps |\\n| Clothing | Gloves |\\n| Clothing | Jerseys |\\n| Clothing | Shorts |\\n| Clothing | Socks |\\n| Clothing | Tights |\\n| Clothing | Vests |\\n| Components | Handlebars |\\n| Components | Bottom Brackets |\\n| Components | Brakes |\\n| Components | Chains |\\n| Components | Cranksets |\\n| Components | Derailleurs |\\n| Components | Forks |\\n| Components | Headsets |\\n| Components | Mountain Frames |\\n| Components | Pedals |\\n| Components | Road Frames |\\n| Components | Saddles |\\n| Components | Touring Frames |\\n| Components | Wheels |\\n| Bikes | Mountain Bikes |\\n| Bikes | Road Bikes |\\n| Bikes | Touring Bikes |\\n\",\n", + " \"reference\": \"SELECT ParentProductCategoryName, ProductCategoryName FROM SalesLT.vGetAllCategories;\"\n", + " }\n", + " ]\n", + "}\n" + ] + }, + { + "data": { + "text/markdown": [ + "Our product categories are organised into several parent categories, each containing multiple subcategories. Here is a detailed list of the different product categories we have:\n", + "\n", + "### Accessories\n", + "- Bike Racks\n", + "- Bike Stands\n", + "- Bottles and Cages\n", + "- Cleaners\n", + "- Fenders\n", + "- Helmets\n", + "- Hydration Packs\n", + "- Lights\n", + "- Locks\n", + "- Panniers\n", + "- Pumps\n", + "- Tires and Tubes\n", + "\n", + "### Clothing\n", + "- Bib-Shorts\n", + "- Caps\n", + "- Gloves\n", + "- Jerseys\n", + "- Shorts\n", + "- Socks\n", + "- Tights\n", + "- Vests\n", + "\n", + "### Components\n", + "- Handlebars\n", + "- Bottom Brackets\n", + "- Brakes\n", + "- Chains\n", + "- Cranksets\n", + "- Derailleurs\n", + "- Forks\n", + "- Headsets\n", + "- Mountain Frames\n", + "- Pedals\n", + "- Road Frames\n", + "- Saddles\n", + "- Touring Frames\n", + "- Wheels\n", + "\n", + "### Bikes\n", + "- Mountain Bikes\n", + "- Road Bikes\n", + "- Touring Bikes\n", + "\n", + "These categories help in better organising and managing our product inventory, making it easier for customers to find what they need [1]." + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "await ask_question(\"What are the different product categories we have?\", history)" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:root:Question: What is the top performing product by quantity of units sold?\n", + "INFO:semantic_kernel.functions.kernel_function:Function ChatBot-Chat invoking.\n", + "INFO:semantic_kernel.contents.chat_history:Could not parse prompt \n", + "As a senior analyst, your primary responsibility is to provide precise and thorough answers to the user's queries. Utilize all the provided functions to craft your responses. You must deliver detailed and accurate final answers with clear explanations and actionable insights.\n", + "\n", + "Always use the provided functions to obtain key information in order to answer the question.\n", + "If you are asked to use always use a function, you must use that function to compliment the answer.\n", + "Always use multiple functions to formulate the answer.\n", + "Always execute multiple functions in parallel to compliment the results.\n", + "\n", + "The response to the user must meet the requirements in RESPONSE OUTPUT REQUIREMENTS.\n", + "IMPORTANT INFORMATION contains useful information that you can use to aid your knowledge.\n", + "CHAT HISTORY contains the previous question and answer pairs in the conversation in JSON format. Do not use this information to answer the question, but to provide context on what was asked previously.\n", + "\n", + "[IMPORTANT INFORMATION]\n", + "\n", + "\n", + " [SQL DATABASE INFORMATION]\n", + " Use the 'GetEntitySchema()' function to search for the most relevant schemas for the data that you wish to obtain. Use the 'RunSQLQuery()' function to run the SQL query against the database.\n", + "\n", + " Output corresponding text values in the answer for columns where there is an ID. For example, if the column is 'ProductID', output the corresponding 'ProductModel' in the response. Do not include the ID in the response.\n", + " If a user is asking for a comparison, always compare the relevant values in the database.\n", + "\n", + " The target database engine is Microsoft TSQL Server, SQL queries must be able compatible to run on Microsoft TSQL Server. \n", + " The following Microsoft TSQL Server Syntax rules must be adhered to.\n", + " Use TOP X to limit the number of rows returned instead of LIMIT X. NEVER USE LIMIT X as it produces a syntax error.\n", + " Always generate the SQL query based on the GetEntitySchema() function output, do not use the chat history data to generate the SQL query.\n", + " Only use the column names obtained from GetEntitySchema() when constructing a SQL query, do not make up column names.\n", + " You must only provide SELECT SQL queries.\n", + " For a given entity, use the 'SelectFromEntity' property returned from 'GetEntitySchema()' function in the SELECT FROM part of the SQL query. If the property is {'SelectFromEntity': 'test_schema.test_table'}, the select statement will be formulated from 'SELECT <VALUES> FROM test_schema.test_table WHERE <CONDITION>.\n", + "\n", + " If you don't know how the value is formatted in a column, run a query against the column to get the unique values that might match your query.\n", + " Some columns returned from 'GetEntitySchema()' may have the properties 'AllowedValues' or 'SampleValues'. Use these values to determine the possible values that can be used in the SQL query.\n", + "\n", + " The source title to cite is the 'EntityName' property. The source reference is the SQL query used. The source chunk is the result of the SQL query used to answer the user query in Markdown table format. e.g. { 'title': "vProductAndDescription", 'chunk': '| ProductID | Name | ProductModel | Culture | Description |\\n|-----------|-------------------|--------------|---------|----------------------------------|\\n| 101 | Mountain Bike | MT-100 | en | A durable bike for mountain use. |\\n| 102 | Road Bike | RB-200 | en | Lightweight bike for road use. |\\n| 103 | Hybrid Bike | HB-300 | fr | V\u00e9lo hybride pour usage mixte. |\\n', 'reference': 'SELECT ProductID, Name, ProductModel, Culture, Description FROM vProductAndDescription WHERE Culture = "en";' }\n", + " [END SQL DATABASE INFORMATION]\n", + " \n", + "\n", + "[END IMPORTANT INFORMATION]\n", + "\n", + "[RESPONSE OUTPUT REQUIREMENTS]\n", + "\n", + " The answer MUST be returned in JSON format as { \"answer\": \"\", \"sources\": [ {\"title\": , \"chunk\": , \"reference\": \"\"}, {\"title\": , \"chunk\": , \"reference\": \"\"} ] }.\n", + "\n", + " The 'answer' property MUST meet the requirements in the ANSWER PROPERTY REQUIREMENTS.\n", + " The 'sources' property MUST meet the requirements in the SOURCES PROPERTY REQUIREMENTS.\n", + "\n", + " Do NOT return anything outside of the provided JSON property. Ensure that this is valid JSON returned.\n", + "\n", + " Never return an empty response or null value. Always answer the question.\n", + "\n", + " [ANSWER PROPERTY REQUIREMENTS]\n", + " 1. Language and Tone:\n", + " Use only British English throughout the response.\n", + " Employ a business-friendly language that is professional and easy to understand.\n", + "\n", + " 2. Content Restrictions:\n", + " Do not use any profanity, offensive language, hate speech, or code in the response.\n", + " If you encounter any such content, handle it gracefully by omitting or rephrasing it appropriately.\n", + "\n", + " 3. Information Sources:\n", + " Use only information from the provided functions and specified important information.\n", + " Do not use any external sources or the chat history for constructing the response.\n", + " In case of conflicting information, prioritize data from the SQL Database as the primary source of truth.\n", + "\n", + " 4. Calculations:\n", + " For any required calculations, use only the values provided in the context.\n", + " Provide a brief, clear explanation of the calculations beneath the results.\n", + "\n", + " 5. Response Structure:\n", + " Ensure the response is direct, easy to understand, and well-structured.\n", + " Format the response using Markdown for clarity and readability.\n", + " Use bold sub-headings for clarity where needed. Only use Markdown headings Level 3 (###) and Level 4 (####).\n", + " Use bullet points or numbered lists when appropriate.\n", + " Do not vary the font size within the same sentence.\n", + "\n", + " 6. Citations:\n", + " All factual information used in the answer must be cited with numbered references. For example, [1] should be used to refer to the first source.\n", + " Each citation in the answer must correspond to a single entry in the 'sources' object.\n", + " The same citation and corresponding context chunk may be used multiple times if needed.\n", + " Place the numbered citation at the end of each relevant sentence that uses information from the sources.\n", + " Ensure that each source listed in the 'sources' property is cited at least once in the answer.\n", + " Do not provide a list of definitions from the business glossary; use such information only to enhance the answer contextually.\n", + "\n", + " 7. Citations Format:\n", + " Citations should be embedded within the text, not as a separate list at the end of the 'answer' property.\n", + " [END ANSWER PROPERTY REQUIREMENTS]\n", + "\n", + " [SOURCES PROPERTY REQUIREMENTS]\n", + " 1. Reference Inclusion:\n", + " Include all corresponding references for all cited content in the 'answer' property.\n", + " Place the references in the 'sources' property.\n", + "\n", + " 2. Source Format:\n", + " Each entry in the 'sources' property must be formatted as: {\"title\": \"\", \"chunk\": \"\", \"reference\": \"\"}\n", + " For example, a complete response with two citations would be formatted as: { \"answer\": \"\", \"sources\": [ {\"title\": , \"chunk\": , \"reference\": \"\"}, {\"title\": , \"chunk\": , \"reference\": \"\"} ] }\n", + "\n", + " 3. Source Chunk:\n", + " The 'chunk' property should contain a concise, unedited snippet of the relevant context that supports the answer.\n", + "\n", + " 4. Mandatory References:\n", + " Ensure that every citation in the 'answer' has a corresponding entry in the 'sources' property.\n", + " Every entry in the 'sources' property must be cited at least once in the answer.\n", + " [END SOURCES PROPERTY REQUIREMENTS]\n", + "\n", + "[END RESPONSE OUTPUT REQUIREMENTS]\n", + "\n", + "What are the different product categories we have?\n", + "What is the top performing product by quantity of units sold? as xml, treating as text, error was: not well-formed (invalid token): line 41, column 78\n", + "INFO:httpx:HTTP Request: POST https://open-ai-gpt-001.openai.azure.com/openai/deployments/gpt-4o/chat/completions?api-version=2024-02-01 \"HTTP/1.1 200 OK\"\n", + "INFO:semantic_kernel.connectors.ai.open_ai.services.open_ai_handler:OpenAI usage: CompletionUsage(completion_tokens=51, prompt_tokens=1847, total_tokens=1898)\n", + "INFO:semantic_kernel.connectors.ai.open_ai.services.open_ai_chat_completion_base:processing 2 tool calls in parallel.\n", + "INFO:semantic_kernel.kernel:Calling SQL-GetEntitySchema function with args: {\"text\": \"product sales\"}\n", + "INFO:semantic_kernel.functions.kernel_function:Function SQL-GetEntitySchema invoking.\n", + "INFO:semantic_kernel.kernel:Calling SQL-GetEntitySchema function with args: {\"text\": \"products\"}\n", + "INFO:semantic_kernel.functions.kernel_function:Function SQL-GetEntitySchema invoking.\n", + "INFO:httpx:HTTP Request: POST https://open-ai-gpt-001.openai.azure.com/openai/deployments/text-embedding-ada-002/embeddings?api-version=2023-03-15-preview \"HTTP/1.1 200 OK\"\n", + "INFO:azure.core.pipeline.policies.http_logging_policy:Request URL: 'https://open-ai-vector-db.search.windows.net/indexes('text-2-sql-index')/docs/search.post.search?api-version=REDACTED'\n", + "Request method: 'POST'\n", + "Request headers:\n", + " 'Content-Type': 'application/json'\n", + " 'Content-Length': '34711'\n", + " 'api-key': 'REDACTED'\n", + " 'Accept': 'application/json;odata.metadata=none'\n", + " 'x-ms-client-request-id': '48f29234-706a-11ef-ae73-0242ac110002'\n", + " 'User-Agent': 'azsdk-python-search-documents/11.6.0b4 Python/3.12.3 (Linux-5.15.153.1-microsoft-standard-WSL2-x86_64-with-glibc2.36)'\n", + "A body is sent with the request\n", + "INFO:httpx:HTTP Request: POST https://open-ai-gpt-001.openai.azure.com/openai/deployments/text-embedding-ada-002/embeddings?api-version=2023-03-15-preview \"HTTP/1.1 200 OK\"\n", + "INFO:azure.core.pipeline.policies.http_logging_policy:Request URL: 'https://open-ai-vector-db.search.windows.net/indexes('text-2-sql-index')/docs/search.post.search?api-version=REDACTED'\n", + "Request method: 'POST'\n", + "Request headers:\n", + " 'Content-Type': 'application/json'\n", + " 'Content-Length': '34720'\n", + " 'api-key': 'REDACTED'\n", + " 'Accept': 'application/json;odata.metadata=none'\n", + " 'x-ms-client-request-id': '48f7c98e-706a-11ef-ae73-0242ac110002'\n", + " 'User-Agent': 'azsdk-python-search-documents/11.6.0b4 Python/3.12.3 (Linux-5.15.153.1-microsoft-standard-WSL2-x86_64-with-glibc2.36)'\n", + "A body is sent with the request\n", + "INFO:azure.core.pipeline.policies.http_logging_policy:Response status: 200\n", + "Response headers:\n", + " 'Transfer-Encoding': 'chunked'\n", + " 'Content-Type': 'application/json; odata.metadata=none; odata.streaming=true; charset=utf-8'\n", + " 'Content-Encoding': 'REDACTED'\n", + " 'Vary': 'REDACTED'\n", + " 'Server': 'Microsoft-IIS/10.0'\n", + " 'Strict-Transport-Security': 'REDACTED'\n", + " 'Preference-Applied': 'REDACTED'\n", + " 'OData-Version': 'REDACTED'\n", + " 'request-id': '48f29234-706a-11ef-ae73-0242ac110002'\n", + " 'elapsed-time': 'REDACTED'\n", + " 'Strict-Transport-Security': 'REDACTED'\n", + " 'Date': 'Wed, 11 Sep 2024 18:18:48 GMT'\n", + "INFO:semantic_kernel.functions.kernel_function:Function SQL-GetEntitySchema succeeded.\n", + "INFO:semantic_kernel.functions.kernel_function:Function completed. Duration: 0.482475s\n", + "INFO:azure.core.pipeline.policies.http_logging_policy:Response status: 200\n", + "Response headers:\n", + " 'Transfer-Encoding': 'chunked'\n", + " 'Content-Type': 'application/json; odata.metadata=none; odata.streaming=true; charset=utf-8'\n", + " 'Content-Encoding': 'REDACTED'\n", + " 'Vary': 'REDACTED'\n", + " 'Server': 'Microsoft-IIS/10.0'\n", + " 'Strict-Transport-Security': 'REDACTED'\n", + " 'Preference-Applied': 'REDACTED'\n", + " 'OData-Version': 'REDACTED'\n", + " 'request-id': '48f7c98e-706a-11ef-ae73-0242ac110002'\n", + " 'elapsed-time': 'REDACTED'\n", + " 'Strict-Transport-Security': 'REDACTED'\n", + " 'Date': 'Wed, 11 Sep 2024 18:18:48 GMT'\n", + "INFO:semantic_kernel.functions.kernel_function:Function SQL-GetEntitySchema succeeded.\n", + "INFO:semantic_kernel.functions.kernel_function:Function completed. Duration: 0.533455s\n", + "INFO:httpx:HTTP Request: POST https://open-ai-gpt-001.openai.azure.com/openai/deployments/gpt-4o/chat/completions?api-version=2024-02-01 \"HTTP/1.1 200 OK\"\n", + "INFO:semantic_kernel.connectors.ai.open_ai.services.open_ai_handler:OpenAI usage: CompletionUsage(completion_tokens=65, prompt_tokens=5827, total_tokens=5892)\n", + "INFO:semantic_kernel.connectors.ai.open_ai.services.open_ai_chat_completion_base:processing 1 tool calls in parallel.\n", + "INFO:semantic_kernel.kernel:Calling SQL-RunSQLQuery function with args: {\"sql_query\":\"SELECT TOP 1 p.Name, SUM(d.OrderQty) AS TotalUnitsSold FROM SalesLT.SalesOrderDetail d JOIN SalesLT.Product p ON d.ProductID = p.ProductID GROUP BY p.Name ORDER BY TotalUnitsSold DESC;\"}\n", + "INFO:semantic_kernel.functions.kernel_function:Function SQL-RunSQLQuery invoking.\n", + "INFO:root:Executing SQL Query\n", + "INFO:semantic_kernel.functions.kernel_function:Function SQL-RunSQLQuery succeeded.\n", + "INFO:semantic_kernel.functions.kernel_function:Function completed. Duration: 0.301421s\n", + "INFO:httpx:HTTP Request: POST https://open-ai-gpt-001.openai.azure.com/openai/deployments/gpt-4o/chat/completions?api-version=2024-02-01 \"HTTP/1.1 200 OK\"\n", + "INFO:semantic_kernel.connectors.ai.open_ai.services.open_ai_handler:OpenAI usage: CompletionUsage(completion_tokens=142, prompt_tokens=5921, total_tokens=6063)\n", + "INFO:semantic_kernel.functions.kernel_function:Function ChatBot-Chat succeeded.\n", + "INFO:semantic_kernel.functions.kernel_function:Function completed. Duration: 3.936345s\n", + "INFO:root:Answer: { \n", + " \"answer\": \"The top performing product by quantity of units sold is the 'Classic Vest, S' with a total of 87 units sold [1].\",\n", + " \"sources\": [\n", + " {\n", + " \"title\": \"Sales Order Detail\",\n", + " \"chunk\": \"| Name | TotalUnitsSold |\\n|---------------|----------------|\\n| Classic Vest, S | 87 |\\n\",\n", + " \"reference\": \"SELECT TOP 1 p.Name, SUM(d.OrderQty) AS TotalUnitsSold FROM SalesLT.SalesOrderDetail d JOIN SalesLT.Product p ON d.ProductID = p.ProductID GROUP BY p.Name ORDER BY TotalUnitsSold DESC;\"\n", + " }\n", + " ]\n", + "}\n" + ] + }, + { + "data": { + "text/markdown": [ + "The top performing product by quantity of units sold is the 'Classic Vest, S' with a total of 87 units sold [1]." + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "await ask_question(\"What is the top performing product by quantity of units sold?\", history)" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:root:Question: Which country did we sell the most to in June 2008?\n", + "INFO:semantic_kernel.functions.kernel_function:Function ChatBot-Chat invoking.\n", + "INFO:semantic_kernel.contents.chat_history:Could not parse prompt \n", + "As a senior analyst, your primary responsibility is to provide precise and thorough answers to the user's queries. Utilize all the provided functions to craft your responses. You must deliver detailed and accurate final answers with clear explanations and actionable insights.\n", + "\n", + "Always use the provided functions to obtain key information in order to answer the question.\n", + "If you are asked to use always use a function, you must use that function to compliment the answer.\n", + "Always use multiple functions to formulate the answer.\n", + "Always execute multiple functions in parallel to compliment the results.\n", + "\n", + "The response to the user must meet the requirements in RESPONSE OUTPUT REQUIREMENTS.\n", + "IMPORTANT INFORMATION contains useful information that you can use to aid your knowledge.\n", + "CHAT HISTORY contains the previous question and answer pairs in the conversation in JSON format. Do not use this information to answer the question, but to provide context on what was asked previously.\n", + "\n", + "[IMPORTANT INFORMATION]\n", + "\n", + "\n", + " [SQL DATABASE INFORMATION]\n", + " Use the 'GetEntitySchema()' function to search for the most relevant schemas for the data that you wish to obtain. Use the 'RunSQLQuery()' function to run the SQL query against the database.\n", + "\n", + " Output corresponding text values in the answer for columns where there is an ID. For example, if the column is 'ProductID', output the corresponding 'ProductModel' in the response. Do not include the ID in the response.\n", + " If a user is asking for a comparison, always compare the relevant values in the database.\n", + "\n", + " The target database engine is Microsoft TSQL Server, SQL queries must be able compatible to run on Microsoft TSQL Server. \n", + " The following Microsoft TSQL Server Syntax rules must be adhered to.\n", + " Use TOP X to limit the number of rows returned instead of LIMIT X. NEVER USE LIMIT X as it produces a syntax error.\n", + " Always generate the SQL query based on the GetEntitySchema() function output, do not use the chat history data to generate the SQL query.\n", + " Only use the column names obtained from GetEntitySchema() when constructing a SQL query, do not make up column names.\n", + " You must only provide SELECT SQL queries.\n", + " For a given entity, use the 'SelectFromEntity' property returned from 'GetEntitySchema()' function in the SELECT FROM part of the SQL query. If the property is {'SelectFromEntity': 'test_schema.test_table'}, the select statement will be formulated from 'SELECT <VALUES> FROM test_schema.test_table WHERE <CONDITION>.\n", + "\n", + " If you don't know how the value is formatted in a column, run a query against the column to get the unique values that might match your query.\n", + " Some columns returned from 'GetEntitySchema()' may have the properties 'AllowedValues' or 'SampleValues'. Use these values to determine the possible values that can be used in the SQL query.\n", + "\n", + " The source title to cite is the 'EntityName' property. The source reference is the SQL query used. The source chunk is the result of the SQL query used to answer the user query in Markdown table format. e.g. { 'title': "vProductAndDescription", 'chunk': '| ProductID | Name | ProductModel | Culture | Description |\\n|-----------|-------------------|--------------|---------|----------------------------------|\\n| 101 | Mountain Bike | MT-100 | en | A durable bike for mountain use. |\\n| 102 | Road Bike | RB-200 | en | Lightweight bike for road use. |\\n| 103 | Hybrid Bike | HB-300 | fr | V\u00e9lo hybride pour usage mixte. |\\n', 'reference': 'SELECT ProductID, Name, ProductModel, Culture, Description FROM vProductAndDescription WHERE Culture = "en";' }\n", + " [END SQL DATABASE INFORMATION]\n", + " \n", + "\n", + "[END IMPORTANT INFORMATION]\n", + "\n", + "[RESPONSE OUTPUT REQUIREMENTS]\n", + "\n", + " The answer MUST be returned in JSON format as { \"answer\": \"\", \"sources\": [ {\"title\": , \"chunk\": , \"reference\": \"\"}, {\"title\": , \"chunk\": , \"reference\": \"\"} ] }.\n", + "\n", + " The 'answer' property MUST meet the requirements in the ANSWER PROPERTY REQUIREMENTS.\n", + " The 'sources' property MUST meet the requirements in the SOURCES PROPERTY REQUIREMENTS.\n", + "\n", + " Do NOT return anything outside of the provided JSON property. Ensure that this is valid JSON returned.\n", + "\n", + " Never return an empty response or null value. Always answer the question.\n", + "\n", + " [ANSWER PROPERTY REQUIREMENTS]\n", + " 1. Language and Tone:\n", + " Use only British English throughout the response.\n", + " Employ a business-friendly language that is professional and easy to understand.\n", + "\n", + " 2. Content Restrictions:\n", + " Do not use any profanity, offensive language, hate speech, or code in the response.\n", + " If you encounter any such content, handle it gracefully by omitting or rephrasing it appropriately.\n", + "\n", + " 3. Information Sources:\n", + " Use only information from the provided functions and specified important information.\n", + " Do not use any external sources or the chat history for constructing the response.\n", + " In case of conflicting information, prioritize data from the SQL Database as the primary source of truth.\n", + "\n", + " 4. Calculations:\n", + " For any required calculations, use only the values provided in the context.\n", + " Provide a brief, clear explanation of the calculations beneath the results.\n", + "\n", + " 5. Response Structure:\n", + " Ensure the response is direct, easy to understand, and well-structured.\n", + " Format the response using Markdown for clarity and readability.\n", + " Use bold sub-headings for clarity where needed. Only use Markdown headings Level 3 (###) and Level 4 (####).\n", + " Use bullet points or numbered lists when appropriate.\n", + " Do not vary the font size within the same sentence.\n", + "\n", + " 6. Citations:\n", + " All factual information used in the answer must be cited with numbered references. For example, [1] should be used to refer to the first source.\n", + " Each citation in the answer must correspond to a single entry in the 'sources' object.\n", + " The same citation and corresponding context chunk may be used multiple times if needed.\n", + " Place the numbered citation at the end of each relevant sentence that uses information from the sources.\n", + " Ensure that each source listed in the 'sources' property is cited at least once in the answer.\n", + " Do not provide a list of definitions from the business glossary; use such information only to enhance the answer contextually.\n", + "\n", + " 7. Citations Format:\n", + " Citations should be embedded within the text, not as a separate list at the end of the 'answer' property.\n", + " [END ANSWER PROPERTY REQUIREMENTS]\n", + "\n", + " [SOURCES PROPERTY REQUIREMENTS]\n", + " 1. Reference Inclusion:\n", + " Include all corresponding references for all cited content in the 'answer' property.\n", + " Place the references in the 'sources' property.\n", + "\n", + " 2. Source Format:\n", + " Each entry in the 'sources' property must be formatted as: {\"title\": \"\", \"chunk\": \"\", \"reference\": \"\"}\n", + " For example, a complete response with two citations would be formatted as: { \"answer\": \"\", \"sources\": [ {\"title\": , \"chunk\": , \"reference\": \"\"}, {\"title\": , \"chunk\": , \"reference\": \"\"} ] }\n", + "\n", + " 3. Source Chunk:\n", + " The 'chunk' property should contain a concise, unedited snippet of the relevant context that supports the answer.\n", + "\n", + " 4. Mandatory References:\n", + " Ensure that every citation in the 'answer' has a corresponding entry in the 'sources' property.\n", + " Every entry in the 'sources' property must be cited at least once in the answer.\n", + " [END SOURCES PROPERTY REQUIREMENTS]\n", + "\n", + "[END RESPONSE OUTPUT REQUIREMENTS]\n", + "\n", + "What are the different product categories we have?What is the top performing product by quantity of units sold?\n", + "Which country did we sell the most to in June 2008? as xml, treating as text, error was: not well-formed (invalid token): line 41, column 78\n", + "INFO:httpx:HTTP Request: POST https://open-ai-gpt-001.openai.azure.com/openai/deployments/gpt-4o/chat/completions?api-version=2024-02-01 \"HTTP/1.1 200 OK\"\n", + "INFO:semantic_kernel.connectors.ai.open_ai.services.open_ai_handler:OpenAI usage: CompletionUsage(completion_tokens=58, prompt_tokens=1878, total_tokens=1936)\n", + "INFO:semantic_kernel.connectors.ai.open_ai.services.open_ai_chat_completion_base:processing 2 tool calls in parallel.\n", + "INFO:semantic_kernel.kernel:Calling SQL-GetEntitySchema function with args: {\"text\": \"sales by country in June 2008\"}\n", + "INFO:semantic_kernel.functions.kernel_function:Function SQL-GetEntitySchema invoking.\n", + "INFO:semantic_kernel.kernel:Calling SQL-GetEntitySchema function with args: {\"text\": \"sales data\"}\n", + "INFO:semantic_kernel.functions.kernel_function:Function SQL-GetEntitySchema invoking.\n", + "INFO:httpx:HTTP Request: POST https://open-ai-gpt-001.openai.azure.com/openai/deployments/text-embedding-ada-002/embeddings?api-version=2023-03-15-preview \"HTTP/1.1 200 OK\"\n", + "INFO:azure.core.pipeline.policies.http_logging_policy:Request URL: 'https://open-ai-vector-db.search.windows.net/indexes('text-2-sql-index')/docs/search.post.search?api-version=REDACTED'\n", + "Request method: 'POST'\n", + "Request headers:\n", + " 'Content-Type': 'application/json'\n", + " 'Content-Length': '34658'\n", + " 'api-key': 'REDACTED'\n", + " 'Accept': 'application/json;odata.metadata=none'\n", + " 'x-ms-client-request-id': '4b5adb26-706a-11ef-ae73-0242ac110002'\n", + " 'User-Agent': 'azsdk-python-search-documents/11.6.0b4 Python/3.12.3 (Linux-5.15.153.1-microsoft-standard-WSL2-x86_64-with-glibc2.36)'\n", + "A body is sent with the request\n", + "INFO:httpx:HTTP Request: POST https://open-ai-gpt-001.openai.azure.com/openai/deployments/text-embedding-ada-002/embeddings?api-version=2023-03-15-preview \"HTTP/1.1 200 OK\"\n", + "INFO:azure.core.pipeline.policies.http_logging_policy:Request URL: 'https://open-ai-vector-db.search.windows.net/indexes('text-2-sql-index')/docs/search.post.search?api-version=REDACTED'\n", + "Request method: 'POST'\n", + "Request headers:\n", + " 'Content-Type': 'application/json'\n", + " 'Content-Length': '34688'\n", + " 'api-key': 'REDACTED'\n", + " 'Accept': 'application/json;odata.metadata=none'\n", + " 'x-ms-client-request-id': '4b65b654-706a-11ef-ae73-0242ac110002'\n", + " 'User-Agent': 'azsdk-python-search-documents/11.6.0b4 Python/3.12.3 (Linux-5.15.153.1-microsoft-standard-WSL2-x86_64-with-glibc2.36)'\n", + "A body is sent with the request\n", + "INFO:azure.core.pipeline.policies.http_logging_policy:Response status: 200\n", + "Response headers:\n", + " 'Transfer-Encoding': 'chunked'\n", + " 'Content-Type': 'application/json; odata.metadata=none; odata.streaming=true; charset=utf-8'\n", + " 'Content-Encoding': 'REDACTED'\n", + " 'Vary': 'REDACTED'\n", + " 'Server': 'Microsoft-IIS/10.0'\n", + " 'Strict-Transport-Security': 'REDACTED'\n", + " 'Preference-Applied': 'REDACTED'\n", + " 'OData-Version': 'REDACTED'\n", + " 'request-id': '4b5adb26-706a-11ef-ae73-0242ac110002'\n", + " 'elapsed-time': 'REDACTED'\n", + " 'Strict-Transport-Security': 'REDACTED'\n", + " 'Date': 'Wed, 11 Sep 2024 18:18:52 GMT'\n", + "INFO:semantic_kernel.functions.kernel_function:Function SQL-GetEntitySchema succeeded.\n", + "INFO:semantic_kernel.functions.kernel_function:Function completed. Duration: 0.427427s\n", + "INFO:azure.core.pipeline.policies.http_logging_policy:Response status: 200\n", + "Response headers:\n", + " 'Transfer-Encoding': 'chunked'\n", + " 'Content-Type': 'application/json; odata.metadata=none; odata.streaming=true; charset=utf-8'\n", + " 'Content-Encoding': 'REDACTED'\n", + " 'Vary': 'REDACTED'\n", + " 'Server': 'Microsoft-IIS/10.0'\n", + " 'Strict-Transport-Security': 'REDACTED'\n", + " 'Preference-Applied': 'REDACTED'\n", + " 'OData-Version': 'REDACTED'\n", + " 'request-id': '4b65b654-706a-11ef-ae73-0242ac110002'\n", + " 'elapsed-time': 'REDACTED'\n", + " 'Strict-Transport-Security': 'REDACTED'\n", + " 'Date': 'Wed, 11 Sep 2024 18:18:52 GMT'\n", + "INFO:semantic_kernel.functions.kernel_function:Function SQL-GetEntitySchema succeeded.\n", + "INFO:semantic_kernel.functions.kernel_function:Function completed. Duration: 0.501665s\n", + "INFO:httpx:HTTP Request: POST https://open-ai-gpt-001.openai.azure.com/openai/deployments/gpt-4o/chat/completions?api-version=2024-02-01 \"HTTP/1.1 200 OK\"\n", + "INFO:semantic_kernel.connectors.ai.open_ai.services.open_ai_handler:OpenAI usage: CompletionUsage(completion_tokens=74, prompt_tokens=5848, total_tokens=5922)\n", + "INFO:semantic_kernel.connectors.ai.open_ai.services.open_ai_chat_completion_base:processing 1 tool calls in parallel.\n", + "INFO:semantic_kernel.kernel:Calling SQL-RunSQLQuery function with args: {\"sql_query\":\"SELECT TOP 1 ShipToAddressID, SUM(TotalDue) as TotalSales FROM SalesLT.SalesOrderHeader WHERE OrderDate BETWEEN '2008-06-01' AND '2008-06-30' GROUP BY ShipToAddressID ORDER BY TotalSales DESC;\"}\n", + "INFO:semantic_kernel.functions.kernel_function:Function SQL-RunSQLQuery invoking.\n", + "INFO:root:Executing SQL Query\n", + "INFO:semantic_kernel.functions.kernel_function:Function SQL-RunSQLQuery succeeded.\n", + "INFO:semantic_kernel.functions.kernel_function:Function completed. Duration: 0.269046s\n", + "INFO:httpx:HTTP Request: POST https://open-ai-gpt-001.openai.azure.com/openai/deployments/gpt-4o/chat/completions?api-version=2024-02-01 \"HTTP/1.1 429 Too Many Requests\"\n", + "INFO:openai._base_client:Retrying request to /chat/completions in 17.000000 seconds\n", + "INFO:httpx:HTTP Request: POST https://open-ai-gpt-001.openai.azure.com/openai/deployments/gpt-4o/chat/completions?api-version=2024-02-01 \"HTTP/1.1 200 OK\"\n", + "INFO:semantic_kernel.connectors.ai.open_ai.services.open_ai_handler:OpenAI usage: CompletionUsage(completion_tokens=40, prompt_tokens=5955, total_tokens=5995)\n", + "INFO:semantic_kernel.connectors.ai.open_ai.services.open_ai_chat_completion_base:processing 1 tool calls in parallel.\n", + "INFO:semantic_kernel.kernel:Calling SQL-RunSQLQuery function with args: {\"sql_query\":\"SELECT AddressLine1, City, StateProvince, CountryRegion FROM SalesLT.Address WHERE AddressID = 659;\"}\n", + "INFO:semantic_kernel.functions.kernel_function:Function SQL-RunSQLQuery invoking.\n", + "INFO:root:Executing SQL Query\n", + "INFO:semantic_kernel.functions.kernel_function:Function SQL-RunSQLQuery succeeded.\n", + "INFO:semantic_kernel.functions.kernel_function:Function completed. Duration: 0.419786s\n", + "INFO:httpx:HTTP Request: POST https://open-ai-gpt-001.openai.azure.com/openai/deployments/gpt-4o/chat/completions?api-version=2024-02-01 \"HTTP/1.1 200 OK\"\n", + "INFO:semantic_kernel.connectors.ai.open_ai.services.open_ai_handler:OpenAI usage: CompletionUsage(completion_tokens=266, prompt_tokens=6048, total_tokens=6314)\n", + "INFO:semantic_kernel.functions.kernel_function:Function ChatBot-Chat succeeded.\n", + "INFO:semantic_kernel.functions.kernel_function:Function completed. Duration: 25.101880s\n", + "INFO:root:Answer: { \n", + " \"answer\": \"The country where we sold the most in June 2008 is the United Kingdom, specifically to an address in Woolston, England [1][2].\", \n", + " \"sources\": [ \n", + " { \n", + " \"title\": \"Sales Order Header\", \n", + " \"chunk\": \"| ShipToAddressID | TotalSales |\\n|-----------------|----------------|\\n| 659 | 119960.8240 |\\n\", \n", + " \"reference\": \"SELECT TOP 1 ShipToAddressID, SUM(TotalDue) as TotalSales FROM SalesLT.SalesOrderHeader WHERE OrderDate BETWEEN '2008-06-01' AND '2008-06-30' GROUP BY ShipToAddressID ORDER BY TotalSales DESC;\" \n", + " }, \n", + " { \n", + " \"title\": \"Address\", \n", + " \"chunk\": \"| AddressLine1 | City | StateProvince | CountryRegion |\\n|---------------------------|-----------|---------------|---------------|\\n| Warrington Ldc Unit 25/2 | Woolston | England | United Kingdom|\\n\", \n", + " \"reference\": \"SELECT AddressLine1, City, StateProvince, CountryRegion FROM SalesLT.Address WHERE AddressID = 659;\" \n", + " } \n", + " ] \n", + "}\n" + ] + }, + { + "data": { + "text/markdown": [ + "The country where we sold the most in June 2008 is the United Kingdom, specifically to an address in Woolston, England [1][2]." + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "await ask_question(\"Which country did we sell the most to in June 2008?\", history)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernel_info": { + "name": "python310-sdkv2" + }, + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.12.3" + }, + "microsoft": { + "host": { + "AzureML": { + "notebookHasBeenCompleted": true + } + }, + "ms_spell_check": { + "ms_spell_check_language": "en" + } + }, + "nteract": { + "version": "nteract-front-end@1.0.0" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/text_2_sql/vector_based_prompt.yaml b/text_2_sql/vector_based_prompt.yaml new file mode 100644 index 0000000..6d15cd3 --- /dev/null +++ b/text_2_sql/vector_based_prompt.yaml @@ -0,0 +1,113 @@ +# Copyright (c) Microsoft Corporation. +# Licensed under the MIT License. +template_format: semantic-kernel +template: | + + As a senior analyst, your primary responsibility is to provide precise and thorough answers to the user's queries. Utilize all the provided functions to craft your responses. You must deliver detailed and accurate final answers with clear explanations and actionable insights. + + Always use the provided functions to obtain key information in order to answer the question. + If you are asked to use always use a function, you must use that function to compliment the answer. + Always use multiple functions to formulate the answer. + Always execute multiple functions in parallel to compliment the results. + + The response to the user must meet the requirements in RESPONSE OUTPUT REQUIREMENTS. + IMPORTANT INFORMATION contains useful information that you can use to aid your knowledge. + CHAT HISTORY contains the previous question and answer pairs in the conversation in JSON format. Do not use this information to answer the question, but to provide context on what was asked previously. + + [IMPORTANT INFORMATION] + + {{$important_information}} + + [END IMPORTANT INFORMATION] + + [RESPONSE OUTPUT REQUIREMENTS] + + The answer MUST be returned in JSON format as { "answer": "", "sources": [ {"title": , "chunk": , "reference": ""}, {"title": , "chunk": , "reference": ""} ] }. + + The 'answer' property MUST meet the requirements in the ANSWER PROPERTY REQUIREMENTS. + The 'sources' property MUST meet the requirements in the SOURCES PROPERTY REQUIREMENTS. + + Do NOT return anything outside of the provided JSON property. Ensure that this is valid JSON returned. + + Never return an empty response or null value. Always answer the question. + + [ANSWER PROPERTY REQUIREMENTS] + 1. Language and Tone: + Use only British English throughout the response. + Employ a business-friendly language that is professional and easy to understand. + + 2. Content Restrictions: + Do not use any profanity, offensive language, hate speech, or code in the response. + If you encounter any such content, handle it gracefully by omitting or rephrasing it appropriately. + + 3. Information Sources: + Use only information from the provided functions and specified important information. + Do not use any external sources or the chat history for constructing the response. + In case of conflicting information, prioritize data from the SQL Database as the primary source of truth. + + 4. Calculations: + For any required calculations, use only the values provided in the context. + Provide a brief, clear explanation of the calculations beneath the results. + + 5. Response Structure: + Ensure the response is direct, easy to understand, and well-structured. + Format the response using Markdown for clarity and readability. + Use bold sub-headings for clarity where needed. Only use Markdown headings Level 3 (###) and Level 4 (####). + Use bullet points or numbered lists when appropriate. + Do not vary the font size within the same sentence. + + 6. Citations: + All factual information used in the answer must be cited with numbered references. For example, [1] should be used to refer to the first source. + Each citation in the answer must correspond to a single entry in the 'sources' object. + The same citation and corresponding context chunk may be used multiple times if needed. + Place the numbered citation at the end of each relevant sentence that uses information from the sources. + Ensure that each source listed in the 'sources' property is cited at least once in the answer. + Do not provide a list of definitions from the business glossary; use such information only to enhance the answer contextually. + + 7. Citations Format: + Citations should be embedded within the text, not as a separate list at the end of the 'answer' property. + [END ANSWER PROPERTY REQUIREMENTS] + + [SOURCES PROPERTY REQUIREMENTS] + 1. Reference Inclusion: + Include all corresponding references for all cited content in the 'answer' property. + Place the references in the 'sources' property. + + 2. Source Format: + Each entry in the 'sources' property must be formatted as: {"title": "", "chunk": "", "reference": ""} + For example, a complete response with two citations would be formatted as: { "answer": "", "sources": [ {"title": , "chunk": , "reference": ""}, {"title": , "chunk": , "reference": ""} ] } + + 3. Source Chunk: + The 'chunk' property should contain a concise, unedited snippet of the relevant context that supports the answer. + + 4. Mandatory References: + Ensure that every citation in the 'answer' has a corresponding entry in the 'sources' property. + Every entry in the 'sources' property must be cited at least once in the answer. + [END SOURCES PROPERTY REQUIREMENTS] + + [END RESPONSE OUTPUT REQUIREMENTS] + + {{$chat_history}} + {{$user_input}} +description: Chatbot +name: ChatBot +input_variables: + - name: user_input + description: The user input + is_required: true + - name: important_information + description: Useful information for the chatbot + is_required: true +output_variable: + description: The chatbot response formatted in JSON as defined in the FINAL ANSWER OUTPUT REQUIREMENTS. +execution_settings: + default: + function_choice_behavior: + type: auto + maximum_auto_invoke_attempts: 5 + filters: + excluded_plugins: + - ChatBot + response_format: + type: json_object + temperature: 0.5 From bac14752ed735cc60edf611346cd94c5ee87c45f Mon Sep 17 00:00:00 2001 From: Ben Constable Date: Thu, 12 Sep 2024 20:34:44 +0100 Subject: [PATCH 06/17] Update prompts --- text_2_sql/{prompt_based_prompt.yaml => prompt.yaml} | 0 .../{vector_based_prompt.yaml => query_cache_based_prompt.yaml} | 0 text_2_sql/rag_with_ai_search_and_text_2_sql.ipynb | 2 +- text_2_sql/rag_with_prompt_based_text_2_sql.ipynb | 2 +- text_2_sql/rag_with_vector_based_text_2_sql.ipynb | 2 +- 5 files changed, 3 insertions(+), 3 deletions(-) rename text_2_sql/{prompt_based_prompt.yaml => prompt.yaml} (100%) rename text_2_sql/{vector_based_prompt.yaml => query_cache_based_prompt.yaml} (100%) diff --git a/text_2_sql/prompt_based_prompt.yaml b/text_2_sql/prompt.yaml similarity index 100% rename from text_2_sql/prompt_based_prompt.yaml rename to text_2_sql/prompt.yaml diff --git a/text_2_sql/vector_based_prompt.yaml b/text_2_sql/query_cache_based_prompt.yaml similarity index 100% rename from text_2_sql/vector_based_prompt.yaml rename to text_2_sql/query_cache_based_prompt.yaml diff --git a/text_2_sql/rag_with_ai_search_and_text_2_sql.ipynb b/text_2_sql/rag_with_ai_search_and_text_2_sql.ipynb index 54c1112..f774448 100644 --- a/text_2_sql/rag_with_ai_search_and_text_2_sql.ipynb +++ b/text_2_sql/rag_with_ai_search_and_text_2_sql.ipynb @@ -208,7 +208,7 @@ "outputs": [], "source": [ "# Load prompt and execution settings from the file\n", - "with open(\"./prompt_based_prompt.yaml\", \"r\") as file:\n", + "with open(\"./prompt.yaml\", \"r\") as file:\n", " data = yaml.safe_load(file.read())\n", " prompt_template_config = PromptTemplateConfig(**data)" ] diff --git a/text_2_sql/rag_with_prompt_based_text_2_sql.ipynb b/text_2_sql/rag_with_prompt_based_text_2_sql.ipynb index 1e374e9..90494c4 100644 --- a/text_2_sql/rag_with_prompt_based_text_2_sql.ipynb +++ b/text_2_sql/rag_with_prompt_based_text_2_sql.ipynb @@ -186,7 +186,7 @@ "outputs": [], "source": [ "# Load prompt and execution settings from the file\n", - "with open(\"./prompt_based_prompt.yaml\", \"r\") as file:\n", + "with open(\"./prompt.yaml\", \"r\") as file:\n", " data = yaml.safe_load(file.read())\n", " prompt_template_config = PromptTemplateConfig(**data)" ] diff --git a/text_2_sql/rag_with_vector_based_text_2_sql.ipynb b/text_2_sql/rag_with_vector_based_text_2_sql.ipynb index 783632a..6d796d6 100644 --- a/text_2_sql/rag_with_vector_based_text_2_sql.ipynb +++ b/text_2_sql/rag_with_vector_based_text_2_sql.ipynb @@ -186,7 +186,7 @@ "outputs": [], "source": [ "# Load prompt and execution settings from the file\n", - "with open(\"./vector_based_prompt.yaml\", \"r\") as file:\n", + "with open(\"./prompt.yaml\", \"r\") as file:\n", " data = yaml.safe_load(file.read())\n", " prompt_template_config = PromptTemplateConfig(**data)" ] From 4a288fff1ae4197b8c44282b55c049b5d6303184 Mon Sep 17 00:00:00 2001 From: Ben Constable Date: Thu, 12 Sep 2024 20:44:00 +0100 Subject: [PATCH 07/17] Try new way --- text_2_sql/query_cache_based_prompt.yaml | 12 +++++++++++- ...ag_with_vector_based_text_2_sql_query_cache.ipynb | 12 +++++++++++- 2 files changed, 22 insertions(+), 2 deletions(-) diff --git a/text_2_sql/query_cache_based_prompt.yaml b/text_2_sql/query_cache_based_prompt.yaml index 6d15cd3..1fe608e 100644 --- a/text_2_sql/query_cache_based_prompt.yaml +++ b/text_2_sql/query_cache_based_prompt.yaml @@ -22,10 +22,11 @@ template: | [RESPONSE OUTPUT REQUIREMENTS] - The answer MUST be returned in JSON format as { "answer": "", "sources": [ {"title": , "chunk": , "reference": ""}, {"title": , "chunk": , "reference": ""} ] }. + The answer MUST be returned in JSON format as { "answer": "", "sources": [ {"title": , "chunk": , "reference": ""}, {"title": , "chunk": , "reference": ""} ], "schemas": [ ] }. The 'answer' property MUST meet the requirements in the ANSWER PROPERTY REQUIREMENTS. The 'sources' property MUST meet the requirements in the SOURCES PROPERTY REQUIREMENTS. + The 'schemas' property MUST meet the requirements in the SCHEMAS PROPERTY REQUIREMENTS. Do NOT return anything outside of the provided JSON property. Ensure that this is valid JSON returned. @@ -68,6 +69,15 @@ template: | Citations should be embedded within the text, not as a separate list at the end of the 'answer' property. [END ANSWER PROPERTY REQUIREMENTS] + [SCHEMAS PROPERTY REQUIREMENTS] + 1. Inclusion Criteria: + If you used a schema obtained from 'GetEntitySchemas' function, it must be returned in the 'schemas' property. The 'schemas' property should contain a list of all the schemas used to create the SQL query. + + 3. Schema Format: + Each schema entry should be formatted as: {"Entity": "", "Columns", [ {"Name": "", "Definition": , "Type": "" } ]}. This is the same format as the 'GetEntitySchemas' function output. Simply copy the schema from the function output to the 'schemas' property and remove the not needed properties. + + [END SCHEMAS PROPERTY REQUIREMENTS] + [SOURCES PROPERTY REQUIREMENTS] 1. Reference Inclusion: Include all corresponding references for all cited content in the 'answer' property. diff --git a/text_2_sql/rag_with_vector_based_text_2_sql_query_cache.ipynb b/text_2_sql/rag_with_vector_based_text_2_sql_query_cache.ipynb index 48dec7a..7ea42a3 100644 --- a/text_2_sql/rag_with_vector_based_text_2_sql_query_cache.ipynb +++ b/text_2_sql/rag_with_vector_based_text_2_sql_query_cache.ipynb @@ -287,7 +287,17 @@ "\n", " json_answer = json.loads(str(answer))\n", "\n", - " display(Markdown(json_answer[\"answer\"]))" + " display(Markdown(json_answer[\"answer\"]))\n", + "\n", + " queries = [source[\"reference\"] for source in json_answer[\"sources\"]]\n", + "\n", + " for query in queries:\n", + " entry = {\"Question\": question, \"Query\": query, \"Schemas\": json_answer[\"schemas\"]}\n", + " await add_entry_to_index(\n", + " entry,\n", + " json_answer[\"schemas\"],\n", + " os.environ[\"AIService__AzureSearchOptions__Text2SqlQueryCache__Index\"],\n", + " )" ] }, { From 9c712f5ff8a1c6ee3a7647fdbab50c76628f8e18 Mon Sep 17 00:00:00 2001 From: Ben Constable Date: Thu, 12 Sep 2024 21:03:43 +0100 Subject: [PATCH 08/17] Dump of query cache work --- deploy_ai_search/text_2_sql_query_cache.py | 6 +- text_2_sql/ai_search.py | 17 +- ..._vector_based_text_2_sql_query_cache.ipynb | 548 ++++++++++++------ 3 files changed, 384 insertions(+), 187 deletions(-) diff --git a/deploy_ai_search/text_2_sql_query_cache.py b/deploy_ai_search/text_2_sql_query_cache.py index dc1b06f..9dc0c9c 100644 --- a/deploy_ai_search/text_2_sql_query_cache.py +++ b/deploy_ai_search/text_2_sql_query_cache.py @@ -38,10 +38,12 @@ def get_index_fields(self) -> list[SearchableField]: list[SearchableField]: The index fields for sql index""" fields = [ + SimpleField( + name="Id", type=SearchFieldDataType.String, key=True, retrievable=False + ), SearchableField( name="Question", type=SearchFieldDataType.String, - key=True, analyzer_name="keyword", ), SearchField( @@ -64,7 +66,7 @@ def get_index_fields(self) -> list[SearchableField]: collection=True, fields=[ SearchableField( - name="EntityName", + name="Entity", type=SearchFieldDataType.String, filterable=True, ), diff --git a/text_2_sql/ai_search.py b/text_2_sql/ai_search.py index 2911b2c..d1f29c6 100644 --- a/text_2_sql/ai_search.py +++ b/text_2_sql/ai_search.py @@ -8,6 +8,7 @@ from environment import IdentityType, get_identity_type import os import logging +import base64 async def run_ai_search_query( @@ -67,14 +68,19 @@ async def run_ai_search_query( result async for results in results.by_page() async for result in results ] + logging.info("Results: %s", combined_results) + return combined_results -async def add_entry_to_index(document: dict, vector_fields: list[str], index_name: str): +async def add_entry_to_index(document: dict, vector_fields: dict, index_name: str): """Add an entry to the search index.""" - for field in vector_fields: - if field not in document: + logging.info("Document: %s", document) + logging.info("Vector Fields: %s", vector_fields) + + for field in vector_fields.keys(): + if field not in document.keys(): raise ValueError(f"Field {field} is not in the document.") identity_type = get_identity_type() @@ -92,10 +98,11 @@ async def add_entry_to_index(document: dict, vector_fields: list[str], index_nam ) # Extract the embedding vector - for i, field in enumerate(vector_fields): + for i, field in enumerate(vector_fields.values()): document[field] = embeddings.data[i].embedding - logging.debug("Document with embeddings: %s", document) + document["Id"] = base64.b64encode(document["Question"].encode()).decode("utf-8") + logging.info("Document with embeddings: %s", document) if identity_type == IdentityType.SYSTEM_ASSIGNED: credential = DefaultAzureCredential() diff --git a/text_2_sql/rag_with_vector_based_text_2_sql_query_cache.ipynb b/text_2_sql/rag_with_vector_based_text_2_sql_query_cache.ipynb index 7ea42a3..49c172b 100644 --- a/text_2_sql/rag_with_vector_based_text_2_sql_query_cache.ipynb +++ b/text_2_sql/rag_with_vector_based_text_2_sql_query_cache.ipynb @@ -153,7 +153,7 @@ { "data": { "text/plain": [ - "KernelPlugin(name='SQL', description=None, functions={'GetEntitySchema': KernelFunctionFromMethod(metadata=KernelFunctionMetadata(name='GetEntitySchema', plugin_name='SQL', description='Gets the schema of a view or table in the SQL Database by selecting the most relevant entity based on the search term. Several entities may be returned.', parameters=[KernelParameterMetadata(name='text', description='The text to run a semantic search against. Relevant entities will be returned.', default_value=None, type_='str', is_required=True, type_object=, schema_data={'type': 'string', 'description': 'The text to run a semantic search against. Relevant entities will be returned.'}, function_schema_include=True)], is_prompt=False, is_asynchronous=True, return_parameter=KernelParameterMetadata(name='return', description='', default_value=None, type_='str', is_required=True, type_object=, schema_data={'type': 'string'}, function_schema_include=True), additional_properties={}), invocation_duration_histogram=, streaming_duration_histogram=, method=>, stream_method=None), 'RunSQLQuery': KernelFunctionFromMethod(metadata=KernelFunctionMetadata(name='RunSQLQuery', plugin_name='SQL', description='Runs an SQL query against the SQL Database to extract information.', parameters=[KernelParameterMetadata(name='sql_query', description='The SQL query to run against the DB', default_value=None, type_='str', is_required=True, type_object=, schema_data={'type': 'string', 'description': 'The SQL query to run against the DB'}, function_schema_include=True)], is_prompt=False, is_asynchronous=True, return_parameter=KernelParameterMetadata(name='return', description='', default_value=None, type_='str', is_required=True, type_object=, schema_data={'type': 'string'}, function_schema_include=True), additional_properties={}), invocation_duration_histogram=, streaming_duration_histogram=, method=>, stream_method=None)})" + "KernelPlugin(name='SQL', description=None, functions={'GetEntitySchema': KernelFunctionFromMethod(metadata=KernelFunctionMetadata(name='GetEntitySchema', plugin_name='SQL', description='Gets the schema of a view or table in the SQL Database by selecting the most relevant entity based on the search term. Several entities may be returned.', parameters=[KernelParameterMetadata(name='text', description='The text to run a semantic search against. Relevant entities will be returned.', default_value=None, type_='str', is_required=True, type_object=, schema_data={'type': 'string', 'description': 'The text to run a semantic search against. Relevant entities will be returned.'}, function_schema_include=True)], is_prompt=False, is_asynchronous=True, return_parameter=KernelParameterMetadata(name='return', description='', default_value=None, type_='str', is_required=True, type_object=, schema_data={'type': 'string'}, function_schema_include=True), additional_properties={}), invocation_duration_histogram=, streaming_duration_histogram=, method=>, stream_method=None), 'RunSQLQuery': KernelFunctionFromMethod(metadata=KernelFunctionMetadata(name='RunSQLQuery', plugin_name='SQL', description='Runs an SQL query against the SQL Database to extract information.', parameters=[KernelParameterMetadata(name='sql_query', description='The SQL query to run against the DB', default_value=None, type_='str', is_required=True, type_object=, schema_data={'type': 'string', 'description': 'The SQL query to run against the DB'}, function_schema_include=True)], is_prompt=False, is_asynchronous=True, return_parameter=KernelParameterMetadata(name='return', description='', default_value=None, type_='str', is_required=True, type_object=, schema_data={'type': 'string'}, function_schema_include=True), additional_properties={}), invocation_duration_histogram=, streaming_duration_histogram=, method=>, stream_method=None)})" ] }, "execution_count": 5, @@ -187,7 +187,7 @@ "outputs": [], "source": [ "# Load prompt and execution settings from the file\n", - "with open(\"./vector_based_prompt.yaml\", \"r\") as file:\n", + "with open(\"./query_cache_based_prompt.yaml\", \"r\") as file:\n", " data = yaml.safe_load(file.read())\n", " prompt_template_config = PromptTemplateConfig(**data)" ] @@ -295,7 +295,7 @@ " entry = {\"Question\": question, \"Query\": query, \"Schemas\": json_answer[\"schemas\"]}\n", " await add_entry_to_index(\n", " entry,\n", - " json_answer[\"schemas\"],\n", + " {\"Question\": \"QuestionEmbedding\", \"Query\": \"QueryEmbedding\"},\n", " os.environ[\"AIService__AzureSearchOptions__Text2SqlQueryCache__Index\"],\n", " )" ] @@ -309,6 +309,32 @@ "name": "stderr", "output_type": "stream", "text": [ + "INFO:httpx:HTTP Request: POST https://open-ai-gpt-001.openai.azure.com/openai/deployments/text-embedding-ada-002/embeddings?api-version=2023-03-15-preview \"HTTP/1.1 200 OK\"\n", + "INFO:azure.core.pipeline.policies.http_logging_policy:Request URL: 'https://open-ai-vector-db.search.windows.net/indexes('text-2-sql-query-cache-index')/docs/search.post.search?api-version=REDACTED'\n", + "Request method: 'POST'\n", + "Request headers:\n", + " 'Content-Type': 'application/json'\n", + " 'Content-Length': '34842'\n", + " 'api-key': 'REDACTED'\n", + " 'Accept': 'application/json;odata.metadata=none'\n", + " 'x-ms-client-request-id': '3d608534-7141-11ef-99b1-0242ac110002'\n", + " 'User-Agent': 'azsdk-python-search-documents/11.6.0b4 Python/3.12.3 (Linux-5.15.153.1-microsoft-standard-WSL2-x86_64-with-glibc2.36)'\n", + "A body is sent with the request\n", + "INFO:azure.core.pipeline.policies.http_logging_policy:Response status: 200\n", + "Response headers:\n", + " 'Transfer-Encoding': 'chunked'\n", + " 'Content-Type': 'application/json; odata.metadata=none; odata.streaming=true; charset=utf-8'\n", + " 'Content-Encoding': 'REDACTED'\n", + " 'Vary': 'REDACTED'\n", + " 'Server': 'Microsoft-IIS/10.0'\n", + " 'Strict-Transport-Security': 'REDACTED'\n", + " 'Preference-Applied': 'REDACTED'\n", + " 'OData-Version': 'REDACTED'\n", + " 'request-id': '3d608534-7141-11ef-99b1-0242ac110002'\n", + " 'elapsed-time': 'REDACTED'\n", + " 'Strict-Transport-Security': 'REDACTED'\n", + " 'Date': 'Thu, 12 Sep 2024 19:57:29 GMT'\n", + "INFO:root:Results: []\n", "INFO:root:Question: What are the different product categories we have?\n", "INFO:semantic_kernel.functions.kernel_function:Function ChatBot-Chat invoking.\n", "INFO:semantic_kernel.contents.chat_history:Could not parse prompt \n", @@ -327,7 +353,14 @@ "\n", "\n", " [SQL DATABASE INFORMATION]\n", - " Use the 'GetEntitySchema()' function to search for the most relevant schemas for the data that you wish to obtain. Use the 'RunSQLQuery()' function to run the SQL query against the database.\n", + " First look at the cached queries, SQL templates and schemas to see if you can use them to formulate a SQL query. If you can't find a suitable query, use the 'GetEntitySchema()' function to search for the most relevant schemas for the data that you wish to obtain.\n", + "\n", + " [BEGIN QUERY CACHE]\n", + " []\n", + " [END QUERY CACHE]\n", + " \n", + "\n", + " Use the 'RunSQLQuery()' function to run the SQL query against the database.\n", "\n", " Output corresponding text values in the answer for columns where there is an ID. For example, if the column is 'ProductID', output the corresponding 'ProductModel' in the response. Do not include the ID in the response.\n", " If a user is asking for a comparison, always compare the relevant values in the database.\n", @@ -335,13 +368,11 @@ " The target database engine is Microsoft TSQL Server, SQL queries must be able compatible to run on Microsoft TSQL Server. \n", " The following Microsoft TSQL Server Syntax rules must be adhered to.\n", " Use TOP X to limit the number of rows returned instead of LIMIT X. NEVER USE LIMIT X as it produces a syntax error.\n", - " Always generate the SQL query based on the GetEntitySchema() function output, do not use the chat history data to generate the SQL query.\n", - " Only use the column names obtained from GetEntitySchema() when constructing a SQL query, do not make up column names.\n", " You must only provide SELECT SQL queries.\n", - " For a given entity, use the 'SelectFromEntity' property returned from 'GetEntitySchema()' function in the SELECT FROM part of the SQL query. If the property is {'SelectFromEntity': 'test_schema.test_table'}, the select statement will be formulated from 'SELECT <VALUES> FROM test_schema.test_table WHERE <CONDITION>.\n", + " For a given entity, use the 'SelectFromEntity' property returned in the schema in the SELECT FROM part of the SQL query. If the property is {'SelectFromEntity': 'test_schema.test_table'}, the select statement will be formulated from 'SELECT <VALUES> FROM test_schema.test_table WHERE <CONDITION>.\n", "\n", " If you don't know how the value is formatted in a column, run a query against the column to get the unique values that might match your query.\n", - " Some columns returned from 'GetEntitySchema()' may have the properties 'AllowedValues' or 'SampleValues'. Use these values to determine the possible values that can be used in the SQL query.\n", + " Some columns in the schema may have the properties 'AllowedValues' or 'SampleValues'. Use these values to determine the possible values that can be used in the SQL query.\n", "\n", " The source title to cite is the 'EntityName' property. The source reference is the SQL query used. The source chunk is the result of the SQL query used to answer the user query in Markdown table format. e.g. { 'title': "vProductAndDescription", 'chunk': '| ProductID | Name | ProductModel | Culture | Description |\\n|-----------|-------------------|--------------|---------|----------------------------------|\\n| 101 | Mountain Bike | MT-100 | en | A durable bike for mountain use. |\\n| 102 | Road Bike | RB-200 | en | Lightweight bike for road use. |\\n| 103 | Hybrid Bike | HB-300 | fr | V\u00e9lo hybride pour usage mixte. |\\n', 'reference': 'SELECT ProductID, Name, ProductModel, Culture, Description FROM vProductAndDescription WHERE Culture = "en";' }\n", " [END SQL DATABASE INFORMATION]\n", @@ -351,10 +382,11 @@ "\n", "[RESPONSE OUTPUT REQUIREMENTS]\n", "\n", - " The answer MUST be returned in JSON format as { \"answer\": \"\", \"sources\": [ {\"title\": , \"chunk\": , \"reference\": \"\"}, {\"title\": , \"chunk\": , \"reference\": \"\"} ] }.\n", + " The answer MUST be returned in JSON format as { \"answer\": \"\", \"sources\": [ {\"title\": , \"chunk\": , \"reference\": \"\"}, {\"title\": , \"chunk\": , \"reference\": \"\"} ], \"schemas\": [ ] }.\n", "\n", " The 'answer' property MUST meet the requirements in the ANSWER PROPERTY REQUIREMENTS.\n", " The 'sources' property MUST meet the requirements in the SOURCES PROPERTY REQUIREMENTS.\n", + " The 'schemas' property MUST meet the requirements in the SCHEMAS PROPERTY REQUIREMENTS.\n", "\n", " Do NOT return anything outside of the provided JSON property. Ensure that this is valid JSON returned.\n", "\n", @@ -397,6 +429,15 @@ " Citations should be embedded within the text, not as a separate list at the end of the 'answer' property.\n", " [END ANSWER PROPERTY REQUIREMENTS]\n", "\n", + " [SCHEMAS PROPERTY REQUIREMENTS]\n", + " 1. Inclusion Criteria:\n", + " If you used a schema obtained from 'GetEntitySchemas' function, it must be returned in the 'schemas' property. The 'schemas' property should contain a list of all the schemas used to create the SQL query.\n", + "\n", + " 3. Schema Format:\n", + " Each schema entry should be formatted as: {\"Entity\": \"\", \"Columns\", [ {\"Name\": \"\", \"Definition\": , \"Type\": \"\" } ]}. This is the same format as the 'GetEntitySchemas' function output. Simply copy the schema from the function output to the 'schemas' property and remove the not needed properties.\n", + "\n", + " [END SCHEMAS PROPERTY REQUIREMENTS]\n", + "\n", " [SOURCES PROPERTY REQUIREMENTS]\n", " 1. Reference Inclusion:\n", " Include all corresponding references for all cited content in the 'answer' property.\n", @@ -417,9 +458,9 @@ "[END RESPONSE OUTPUT REQUIREMENTS]\n", "\n", "\n", - "What are the different product categories we have? as xml, treating as text, error was: not well-formed (invalid token): line 41, column 78\n", + "What are the different product categories we have? as xml, treating as text, error was: not well-formed (invalid token): line 46, column 78\n", "INFO:httpx:HTTP Request: POST https://open-ai-gpt-001.openai.azure.com/openai/deployments/gpt-4o/chat/completions?api-version=2024-02-01 \"HTTP/1.1 200 OK\"\n", - "INFO:semantic_kernel.connectors.ai.open_ai.services.open_ai_handler:OpenAI usage: CompletionUsage(completion_tokens=51, prompt_tokens=1815, total_tokens=1866)\n", + "INFO:semantic_kernel.connectors.ai.open_ai.services.open_ai_handler:OpenAI usage: CompletionUsage(completion_tokens=51, prompt_tokens=1988, total_tokens=2039)\n", "INFO:semantic_kernel.connectors.ai.open_ai.services.open_ai_chat_completion_base:processing 2 tool calls in parallel.\n", "INFO:semantic_kernel.kernel:Calling SQL-GetEntitySchema function with args: {\"text\": \"Product Category\"}\n", "INFO:semantic_kernel.functions.kernel_function:Function SQL-GetEntitySchema invoking.\n", @@ -430,10 +471,10 @@ "Request method: 'POST'\n", "Request headers:\n", " 'Content-Type': 'application/json'\n", - " 'Content-Length': '34765'\n", + " 'Content-Length': '34721'\n", " 'api-key': 'REDACTED'\n", " 'Accept': 'application/json;odata.metadata=none'\n", - " 'x-ms-client-request-id': '435b3768-706a-11ef-ae73-0242ac110002'\n", + " 'x-ms-client-request-id': '3e13c694-7141-11ef-99b1-0242ac110002'\n", " 'User-Agent': 'azsdk-python-search-documents/11.6.0b4 Python/3.12.3 (Linux-5.15.153.1-microsoft-standard-WSL2-x86_64-with-glibc2.36)'\n", "A body is sent with the request\n", "INFO:httpx:HTTP Request: POST https://open-ai-gpt-001.openai.azure.com/openai/deployments/text-embedding-ada-002/embeddings?api-version=2023-03-15-preview \"HTTP/1.1 200 OK\"\n", @@ -441,10 +482,10 @@ "Request method: 'POST'\n", "Request headers:\n", " 'Content-Type': 'application/json'\n", - " 'Content-Length': '34721'\n", + " 'Content-Length': '34765'\n", " 'api-key': 'REDACTED'\n", " 'Accept': 'application/json;odata.metadata=none'\n", - " 'x-ms-client-request-id': '4360c9a8-706a-11ef-ae73-0242ac110002'\n", + " 'x-ms-client-request-id': '3e183d3c-7141-11ef-99b1-0242ac110002'\n", " 'User-Agent': 'azsdk-python-search-documents/11.6.0b4 Python/3.12.3 (Linux-5.15.153.1-microsoft-standard-WSL2-x86_64-with-glibc2.36)'\n", "A body is sent with the request\n", "INFO:azure.core.pipeline.policies.http_logging_policy:Response status: 200\n", @@ -457,12 +498,13 @@ " 'Strict-Transport-Security': 'REDACTED'\n", " 'Preference-Applied': 'REDACTED'\n", " 'OData-Version': 'REDACTED'\n", - " 'request-id': '435b3768-706a-11ef-ae73-0242ac110002'\n", + " 'request-id': '3e183d3c-7141-11ef-99b1-0242ac110002'\n", " 'elapsed-time': 'REDACTED'\n", " 'Strict-Transport-Security': 'REDACTED'\n", - " 'Date': 'Wed, 11 Sep 2024 18:18:39 GMT'\n", + " 'Date': 'Thu, 12 Sep 2024 19:57:30 GMT'\n", + "INFO:root:Results: [{'Description': 'This view provides a comprehensive list of all product categories and their corresponding subcategories in the SalesLT schema of the AdventureWorksLT database. It is used to understand the hierarchical structure of product categories, facilitating product organization and categorization.', 'Entity': 'vGetAllCategories', 'EntityName': 'Get All Categories', 'Columns': [{'Name': 'ProductCategoryID', 'Definition': 'A unique identifier for each product category. This ID is used to reference specific categories.', 'Type': 'INT', 'AllowedValues': None, 'SampleValues': None}, {'Name': 'ParentProductCategoryName', 'Definition': 'The name of the parent product category. This represents the top-level category under which subcategories are grouped.', 'Type': 'NVARCHAR(50)', 'AllowedValues': None, 'SampleValues': None}, {'Name': 'ProductCategoryName', 'Definition': 'The name of the product category. This can refer to either a top-level category or a subcategory, depending on the context.', 'Type': 'NVARCHAR(50)', 'AllowedValues': None, 'SampleValues': None}], '@search.score': 0.03333333507180214, '@search.reranker_score': 2.6649816036224365, '@search.highlights': None, '@search.captions': None}, {'Description': 'This view provides detailed catalog information about product models, including descriptions, manufacturing details, warranty information, and specifications related to product design and features. It is useful for generating comprehensive product catalogs and providing detailed product information to customers.', 'Entity': 'vProductModelCatalogDescription', 'EntityName': 'Product Model Catalog Description', 'Columns': [{'Name': 'ProductModelID', 'Definition': 'A unique identifier for each product model. This ID is used to distinguish different product models.', 'Type': 'INT', 'AllowedValues': None, 'SampleValues': None}, {'Name': 'Name', 'Definition': 'The name of the product model, providing a recognizable title for each model.', 'Type': 'NVARCHAR(50)', 'AllowedValues': None, 'SampleValues': None}, {'Name': 'Summary', 'Definition': 'A brief summary of the product model, highlighting key features and characteristics.', 'Type': 'NVARCHAR(MAX)', 'AllowedValues': None, 'SampleValues': None}, {'Name': 'Manufacturer', 'Definition': 'The name of the manufacturer of the product model.', 'Type': 'NVARCHAR(50)', 'AllowedValues': None, 'SampleValues': None}, {'Name': 'Copyright', 'Definition': 'Copyright information related to the product model, indicating the legal ownership of the product design and content.', 'Type': 'NVARCHAR(30)', 'AllowedValues': None, 'SampleValues': None}, {'Name': 'ProductURL', 'Definition': 'The URL for the product model, providing a link to more information or to purchase the product.', 'Type': 'NVARCHAR(256)', 'AllowedValues': None, 'SampleValues': None}, {'Name': 'WarrantyPeriod', 'Definition': 'The duration of the warranty period for the product model, specifying how long the warranty is valid.', 'Type': 'NVARCHAR(30)', 'AllowedValues': None, 'SampleValues': None}, {'Name': 'WarrantyDescription', 'Definition': 'A description of the warranty provided for the product model, detailing what is covered under the warranty.', 'Type': 'NVARCHAR(255)', 'AllowedValues': None, 'SampleValues': None}, {'Name': 'NoOfYears', 'Definition': 'The number of years the warranty is valid for the product model.', 'Type': 'INT', 'AllowedValues': None, 'SampleValues': None}, {'Name': 'MaintenanceDescription', 'Definition': 'A description of the maintenance requirements and recommendations for the product model.', 'Type': 'NVARCHAR(MAX)', 'AllowedValues': None, 'SampleValues': None}, {'Name': 'Wheel', 'Definition': 'Details about the type of wheels used in the product model.', 'Type': 'NVARCHAR(50)', 'AllowedValues': None, 'SampleValues': None}, {'Name': 'Saddle', 'Definition': 'Information about the saddle of the product model, such as material and design.', 'Type': 'NVARCHAR(50)', 'AllowedValues': None, 'SampleValues': None}, {'Name': 'Pedal', 'Definition': 'Details regarding the pedal design and specifications of the product model.', 'Type': 'NVARCHAR(50)', 'AllowedValues': None, 'SampleValues': None}, {'Name': 'BikeFrame', 'Definition': 'Description of the bike frame used in the product model, including material and type.', 'Type': 'NVARCHAR(50)', 'AllowedValues': None, 'SampleValues': None}, {'Name': 'Crankset', 'Definition': 'Information about the crankset of the product model, specifying its design and features.', 'Type': 'NVARCHAR(50)', 'AllowedValues': None, 'SampleValues': None}, {'Name': 'PictureAngle', 'Definition': 'The angle at which the product model is photographed, providing a visual perspective of the product.', 'Type': 'NVARCHAR(20)', 'AllowedValues': None, 'SampleValues': None}, {'Name': 'PictureSize', 'Definition': \"The size of the product model's picture, specifying dimensions or resolution.\", 'Type': 'NVARCHAR(20)', 'AllowedValues': None, 'SampleValues': None}, {'Name': 'ProductPhotoID', 'Definition': 'An identifier linking to the product photo, which provides a visual representation of the product model.', 'Type': 'INT', 'AllowedValues': None, 'SampleValues': None}, {'Name': 'Material', 'Definition': 'The material used in the construction of the product model, indicating durability and quality.', 'Type': 'NVARCHAR(50)', 'AllowedValues': None, 'SampleValues': None}, {'Name': 'Color', 'Definition': 'The color of the product model, providing information about the appearance of the product.', 'Type': 'NVARCHAR(15)', 'AllowedValues': None, 'SampleValues': None}, {'Name': 'ProductLine', 'Definition': 'A code representing the product line to which the model belongs, categorizing the product within a broader product range.', 'Type': 'NVARCHAR(2)', 'AllowedValues': None, 'SampleValues': None}, {'Name': 'Style', 'Definition': 'The style of the product model, indicating design and aesthetic aspects.', 'Type': 'NVARCHAR(50)', 'AllowedValues': None, 'SampleValues': None}, {'Name': 'RiderExperience', 'Definition': \"A description of the target rider's experience level for which the product model is designed, such as beginner, intermediate, or expert.\", 'Type': 'NVARCHAR(50)', 'AllowedValues': None, 'SampleValues': None}, {'Name': 'ModifiedDate', 'Definition': 'The date and time when the product model information was last modified, indicating the currency of the data.', 'Type': 'DATETIME', 'AllowedValues': None, 'SampleValues': None}], '@search.score': 0.032786883413791656, '@search.reranker_score': 2.0436108112335205, '@search.highlights': None, '@search.captions': None}, {'Description': 'This view provides detailed information about products, including their names, associated product models, descriptions, and the specific culture or language of the description. It is useful for understanding product details and translating product descriptions for different cultures.', 'Entity': 'vProductAndDescription', 'EntityName': 'Product and Description', 'Columns': [{'Name': 'ProductID', 'Definition': 'A unique identifier for each product. This ID is used to distinguish individual products.', 'Type': 'INT', 'AllowedValues': None, 'SampleValues': None}, {'Name': 'Name', 'Definition': 'The name of the product. This provides a brief and identifiable name for each product.', 'Type': 'NVARCHAR(50)', 'AllowedValues': None, 'SampleValues': None}, {'Name': 'ProductModel', 'Definition': 'The model name associated with the product. This indicates the specific model type or version of the product.', 'Type': 'NVARCHAR(50)', 'AllowedValues': None, 'SampleValues': None}, {'Name': 'Culture', 'Definition': \"The culture or language code for the product description. This is used to localize the product description, such as 'en' for English or 'fr' for French.\", 'Type': 'NVARCHAR(6)', 'AllowedValues': None, 'SampleValues': '[\"en\",\"fr\",\"es\",\"de\"]'}, {'Name': 'Description', 'Definition': 'A detailed description of the product. This text provides additional information about the product, which can vary based on the culture or language.', 'Type': 'NVARCHAR(400)', 'AllowedValues': None, 'SampleValues': None}], '@search.score': 0.032258063554763794, '@search.reranker_score': 2.016369342803955, '@search.highlights': None, '@search.captions': None}, {'Description': 'This table contains high-level information about sales orders, including order dates, customer details, shipping information, and order status. It is used to manage and track sales orders from initiation to fulfillment.', 'Entity': 'SalesOrderHeader', 'EntityName': 'Sales Order Header', 'Columns': [{'Name': 'SalesOrderID', 'Definition': 'A unique identifier for each sales order. This ID is auto-generated and serves as the primary key for the SalesOrderHeader table.', 'Type': 'INT', 'AllowedValues': None, 'SampleValues': None}, {'Name': 'OrderDate', 'Definition': 'The date and time when the sales order was created. This field is used to track when the order was initiated.', 'Type': 'DATETIME', 'AllowedValues': None, 'SampleValues': None}, {'Name': 'DueDate', 'Definition': 'The date by which the order is expected to be fulfilled or delivered. It helps in managing delivery timelines.', 'Type': 'DATETIME', 'AllowedValues': None, 'SampleValues': None}, {'Name': 'ShipDate', 'Definition': 'The date when the order was shipped to the customer. This is used for tracking shipping and fulfillment status.', 'Type': 'DATETIME', 'AllowedValues': None, 'SampleValues': None}, {'Name': 'Status', 'Definition': 'The current status of the order, represented as a numeric code (e.g., 1 for In Progress, 2 for Completed, 3 for Canceled).', 'Type': 'TINYINT', 'AllowedValues': '[1,2,3]', 'SampleValues': None}, {'Name': 'OnlineOrderFlag', 'Definition': 'Indicates whether the order was placed online.', 'Type': 'BIT', 'AllowedValues': '[\"True\",\"False\"]', 'SampleValues': None}, {'Name': 'SalesOrderNumber', 'Definition': 'A unique order number assigned to the sales order. This is used for tracking and identification purposes.', 'Type': 'NVARCHAR(25)', 'AllowedValues': None, 'SampleValues': None}, {'Name': 'PurchaseOrderNumber', 'Definition': \"The purchase order number provided by the customer. This field links the sales order to the customer's purchase order.\", 'Type': 'NVARCHAR(25)', 'AllowedValues': None, 'SampleValues': None}, {'Name': 'AccountNumber', 'Definition': \"The account number of the customer placing the order. This helps link the order to the customer's account.\", 'Type': 'NVARCHAR(15)', 'AllowedValues': None, 'SampleValues': None}, {'Name': 'CustomerID', 'Definition': 'A foreign key that links to the Customer table, representing the customer who placed the order.', 'Type': 'INT', 'AllowedValues': None, 'SampleValues': None}, {'Name': 'ShipToAddressID', 'Definition': 'A foreign key that links to the Address table, representing the shipping address for the order.', 'Type': 'INT', 'AllowedValues': None, 'SampleValues': None}, {'Name': 'BillToAddressID', 'Definition': 'A foreign key that links to the Address table, representing the billing address for the order.', 'Type': 'INT', 'AllowedValues': None, 'SampleValues': None}, {'Name': 'ShipMethod', 'Definition': 'The shipping method used for the order (e.g., UPS, FedEx). This field helps track shipping preferences.', 'Type': 'NVARCHAR(50)', 'AllowedValues': None, 'SampleValues': None}, {'Name': 'SubTotal', 'Definition': 'The total cost of the order before taxes and shipping charges. This field is used to calculate the final total. The currency is pound sterling (GBP).', 'Type': 'MONEY', 'AllowedValues': None, 'SampleValues': None}, {'Name': 'TaxAmt', 'Definition': 'The tax amount applied to the order. This is calculated based on the order subtotal and applicable tax rates. The currency is pound sterling (GBP).', 'Type': 'MONEY', 'AllowedValues': None, 'SampleValues': None}, {'Name': 'Freight', 'Definition': 'The shipping charge applied to the order. This field represents the cost of shipping the order to the customer. The currency is pound sterling (GBP).', 'Type': 'MONEY', 'AllowedValues': None, 'SampleValues': None}, {'Name': 'TotalDue', 'Definition': 'The total amount due for the order, including all line items, taxes, and shipping charges. The currency is pound sterling (GBP).', 'Type': 'MONEY', 'AllowedValues': None, 'SampleValues': None}, {'Name': 'Comment', 'Definition': 'Any additional comments or notes related to the sales order. This field can include special instructions or remarks.', 'Type': 'NVARCHAR(255)', 'AllowedValues': None, 'SampleValues': None}, {'Name': 'ModifiedDate', 'Definition': 'The date and time when the sales order header record was last modified. This is used for tracking updates and changes to the order.', 'Type': 'DATETIME', 'AllowedValues': None, 'SampleValues': None}], '@search.score': 0.01587301678955555, '@search.reranker_score': 1.3785998821258545, '@search.highlights': None, '@search.captions': None}, {'Description': 'This table stores address information for customers, including street addresses, city, state, postal code, and country/region. It is used to maintain contact and shipping information for orders, as well as to manage customer locations.', 'Entity': 'Address', 'EntityName': 'Address', 'Columns': [{'Name': 'AddressID', 'Definition': 'A unique identifier for each address. This ID is auto-generated and serves as the primary key for the Address table.', 'Type': 'INT', 'AllowedValues': None, 'SampleValues': None}, {'Name': 'City', 'Definition': 'The city in which the address is located. This is used to specify the city for the address.', 'Type': 'NVARCHAR(30)', 'AllowedValues': None, 'SampleValues': None}, {'Name': 'StateProvince', 'Definition': 'The state or province in which the address is located. This is used to specify the state or province for the address.', 'Type': 'NVARCHAR(50)', 'AllowedValues': None, 'SampleValues': None}, {'Name': 'CountryRegion', 'Definition': 'The country or region in which the address is located. This is used to specify the country or region for the address.', 'Type': 'NVARCHAR(50)', 'AllowedValues': None, 'SampleValues': None}, {'Name': 'PostalCode', 'Definition': 'The postal code associated with the address. This is used to specify the postal code for the address, which helps in geographical sorting and shipping.', 'Type': 'NVARCHAR(15)', 'AllowedValues': None, 'SampleValues': None}, {'Name': 'ModifiedDate', 'Definition': 'The date and time when the address record was last modified. This is used for tracking updates and changes to the address information.', 'Type': 'DATETIME', 'AllowedValues': None, 'SampleValues': None}], '@search.score': 0.015625, '@search.reranker_score': 0.9937192797660828, '@search.highlights': None, '@search.captions': None}]\n", "INFO:semantic_kernel.functions.kernel_function:Function SQL-GetEntitySchema succeeded.\n", - "INFO:semantic_kernel.functions.kernel_function:Function completed. Duration: 0.590935s\n", + "INFO:semantic_kernel.functions.kernel_function:Function completed. Duration: 0.452403s\n", "INFO:azure.core.pipeline.policies.http_logging_policy:Response status: 200\n", "Response headers:\n", " 'Transfer-Encoding': 'chunked'\n", @@ -473,89 +515,102 @@ " 'Strict-Transport-Security': 'REDACTED'\n", " 'Preference-Applied': 'REDACTED'\n", " 'OData-Version': 'REDACTED'\n", - " 'request-id': '4360c9a8-706a-11ef-ae73-0242ac110002'\n", + " 'request-id': '3e13c694-7141-11ef-99b1-0242ac110002'\n", " 'elapsed-time': 'REDACTED'\n", " 'Strict-Transport-Security': 'REDACTED'\n", - " 'Date': 'Wed, 11 Sep 2024 18:18:39 GMT'\n", + " 'Date': 'Thu, 12 Sep 2024 19:57:30 GMT'\n", + "INFO:root:Results: [{'Description': 'This view provides detailed information about products, including their names, associated product models, descriptions, and the specific culture or language of the description. It is useful for understanding product details and translating product descriptions for different cultures.', 'Entity': 'vProductAndDescription', 'EntityName': 'Product and Description', 'Columns': [{'Name': 'ProductID', 'Definition': 'A unique identifier for each product. This ID is used to distinguish individual products.', 'Type': 'INT', 'AllowedValues': None, 'SampleValues': None}, {'Name': 'Name', 'Definition': 'The name of the product. This provides a brief and identifiable name for each product.', 'Type': 'NVARCHAR(50)', 'AllowedValues': None, 'SampleValues': None}, {'Name': 'ProductModel', 'Definition': 'The model name associated with the product. This indicates the specific model type or version of the product.', 'Type': 'NVARCHAR(50)', 'AllowedValues': None, 'SampleValues': None}, {'Name': 'Culture', 'Definition': \"The culture or language code for the product description. This is used to localize the product description, such as 'en' for English or 'fr' for French.\", 'Type': 'NVARCHAR(6)', 'AllowedValues': None, 'SampleValues': '[\"en\",\"fr\",\"es\",\"de\"]'}, {'Name': 'Description', 'Definition': 'A detailed description of the product. This text provides additional information about the product, which can vary based on the culture or language.', 'Type': 'NVARCHAR(400)', 'AllowedValues': None, 'SampleValues': None}], '@search.score': 0.03279569745063782, '@search.reranker_score': 2.4336702823638916, '@search.highlights': None, '@search.captions': None}, {'Description': 'This view provides detailed catalog information about product models, including descriptions, manufacturing details, warranty information, and specifications related to product design and features. It is useful for generating comprehensive product catalogs and providing detailed product information to customers.', 'Entity': 'vProductModelCatalogDescription', 'EntityName': 'Product Model Catalog Description', 'Columns': [{'Name': 'ProductModelID', 'Definition': 'A unique identifier for each product model. This ID is used to distinguish different product models.', 'Type': 'INT', 'AllowedValues': None, 'SampleValues': None}, {'Name': 'Name', 'Definition': 'The name of the product model, providing a recognizable title for each model.', 'Type': 'NVARCHAR(50)', 'AllowedValues': None, 'SampleValues': None}, {'Name': 'Summary', 'Definition': 'A brief summary of the product model, highlighting key features and characteristics.', 'Type': 'NVARCHAR(MAX)', 'AllowedValues': None, 'SampleValues': None}, {'Name': 'Manufacturer', 'Definition': 'The name of the manufacturer of the product model.', 'Type': 'NVARCHAR(50)', 'AllowedValues': None, 'SampleValues': None}, {'Name': 'Copyright', 'Definition': 'Copyright information related to the product model, indicating the legal ownership of the product design and content.', 'Type': 'NVARCHAR(30)', 'AllowedValues': None, 'SampleValues': None}, {'Name': 'ProductURL', 'Definition': 'The URL for the product model, providing a link to more information or to purchase the product.', 'Type': 'NVARCHAR(256)', 'AllowedValues': None, 'SampleValues': None}, {'Name': 'WarrantyPeriod', 'Definition': 'The duration of the warranty period for the product model, specifying how long the warranty is valid.', 'Type': 'NVARCHAR(30)', 'AllowedValues': None, 'SampleValues': None}, {'Name': 'WarrantyDescription', 'Definition': 'A description of the warranty provided for the product model, detailing what is covered under the warranty.', 'Type': 'NVARCHAR(255)', 'AllowedValues': None, 'SampleValues': None}, {'Name': 'NoOfYears', 'Definition': 'The number of years the warranty is valid for the product model.', 'Type': 'INT', 'AllowedValues': None, 'SampleValues': None}, {'Name': 'MaintenanceDescription', 'Definition': 'A description of the maintenance requirements and recommendations for the product model.', 'Type': 'NVARCHAR(MAX)', 'AllowedValues': None, 'SampleValues': None}, {'Name': 'Wheel', 'Definition': 'Details about the type of wheels used in the product model.', 'Type': 'NVARCHAR(50)', 'AllowedValues': None, 'SampleValues': None}, {'Name': 'Saddle', 'Definition': 'Information about the saddle of the product model, such as material and design.', 'Type': 'NVARCHAR(50)', 'AllowedValues': None, 'SampleValues': None}, {'Name': 'Pedal', 'Definition': 'Details regarding the pedal design and specifications of the product model.', 'Type': 'NVARCHAR(50)', 'AllowedValues': None, 'SampleValues': None}, {'Name': 'BikeFrame', 'Definition': 'Description of the bike frame used in the product model, including material and type.', 'Type': 'NVARCHAR(50)', 'AllowedValues': None, 'SampleValues': None}, {'Name': 'Crankset', 'Definition': 'Information about the crankset of the product model, specifying its design and features.', 'Type': 'NVARCHAR(50)', 'AllowedValues': None, 'SampleValues': None}, {'Name': 'PictureAngle', 'Definition': 'The angle at which the product model is photographed, providing a visual perspective of the product.', 'Type': 'NVARCHAR(20)', 'AllowedValues': None, 'SampleValues': None}, {'Name': 'PictureSize', 'Definition': \"The size of the product model's picture, specifying dimensions or resolution.\", 'Type': 'NVARCHAR(20)', 'AllowedValues': None, 'SampleValues': None}, {'Name': 'ProductPhotoID', 'Definition': 'An identifier linking to the product photo, which provides a visual representation of the product model.', 'Type': 'INT', 'AllowedValues': None, 'SampleValues': None}, {'Name': 'Material', 'Definition': 'The material used in the construction of the product model, indicating durability and quality.', 'Type': 'NVARCHAR(50)', 'AllowedValues': None, 'SampleValues': None}, {'Name': 'Color', 'Definition': 'The color of the product model, providing information about the appearance of the product.', 'Type': 'NVARCHAR(15)', 'AllowedValues': None, 'SampleValues': None}, {'Name': 'ProductLine', 'Definition': 'A code representing the product line to which the model belongs, categorizing the product within a broader product range.', 'Type': 'NVARCHAR(2)', 'AllowedValues': None, 'SampleValues': None}, {'Name': 'Style', 'Definition': 'The style of the product model, indicating design and aesthetic aspects.', 'Type': 'NVARCHAR(50)', 'AllowedValues': None, 'SampleValues': None}, {'Name': 'RiderExperience', 'Definition': \"A description of the target rider's experience level for which the product model is designed, such as beginner, intermediate, or expert.\", 'Type': 'NVARCHAR(50)', 'AllowedValues': None, 'SampleValues': None}, {'Name': 'ModifiedDate', 'Definition': 'The date and time when the product model information was last modified, indicating the currency of the data.', 'Type': 'DATETIME', 'AllowedValues': None, 'SampleValues': None}], '@search.score': 0.032786883413791656, '@search.reranker_score': 2.3879058361053467, '@search.highlights': None, '@search.captions': None}, {'Description': 'This view provides a comprehensive list of all product categories and their corresponding subcategories in the SalesLT schema of the AdventureWorksLT database. It is used to understand the hierarchical structure of product categories, facilitating product organization and categorization.', 'Entity': 'vGetAllCategories', 'EntityName': 'Get All Categories', 'Columns': [{'Name': 'ProductCategoryID', 'Definition': 'A unique identifier for each product category. This ID is used to reference specific categories.', 'Type': 'INT', 'AllowedValues': None, 'SampleValues': None}, {'Name': 'ParentProductCategoryName', 'Definition': 'The name of the parent product category. This represents the top-level category under which subcategories are grouped.', 'Type': 'NVARCHAR(50)', 'AllowedValues': None, 'SampleValues': None}, {'Name': 'ProductCategoryName', 'Definition': 'The name of the product category. This can refer to either a top-level category or a subcategory, depending on the context.', 'Type': 'NVARCHAR(50)', 'AllowedValues': None, 'SampleValues': None}], '@search.score': 0.03279569745063782, '@search.reranker_score': 2.2206456661224365, '@search.highlights': None, '@search.captions': None}, {'Description': 'This table stores detailed information about sales order tickets, including the order details, customer information, order status, and timestamps. It is used to manage and track sales orders throughout the order lifecycle, from creation to fulfillment.', 'Entity': 'SalesOrderDetail', 'EntityName': 'Sales Order Detail', 'Columns': [{'Name': 'SalesOrderID', 'Definition': 'A unique identifier for each sales order ticket. This ID is auto-generated and serves as the primary key for the SalesOrderTicket table.', 'Type': 'INT', 'AllowedValues': None, 'SampleValues': None}, {'Name': 'OrderDate', 'Definition': 'The date and time when the sales order was created. This is used to track when the order was initiated.', 'Type': 'DATETIME', 'AllowedValues': None, 'SampleValues': None}, {'Name': 'DueDate', 'Definition': 'The date by which the order is expected to be fulfilled or delivered. It helps in managing delivery timelines.', 'Type': 'DATETIME', 'AllowedValues': None, 'SampleValues': None}, {'Name': 'ShipDate', 'Definition': 'The date when the order was shipped to the customer. This is used for tracking shipping and fulfillment status.', 'Type': 'DATETIME', 'AllowedValues': None, 'SampleValues': None}, {'Name': 'Status', 'Definition': 'The current status of the order, represented as a numeric code (e.g., 1 for In Progress, 2 for Completed, 3 for Canceled).', 'Type': 'TINYINT', 'AllowedValues': '[1,2,3]', 'SampleValues': None}, {'Name': 'TotalDue', 'Definition': 'The total amount due for the order, including all line items, taxes, and shipping charges.', 'Type': 'MONEY', 'AllowedValues': None, 'SampleValues': None}, {'Name': 'ModifiedDate', 'Definition': 'The date and time when the sales order ticket record was last modified. This is used for tracking updates and changes to the order.', 'Type': 'DATETIME', 'AllowedValues': None, 'SampleValues': None}], '@search.score': 0.015625, '@search.reranker_score': 1.8869867324829102, '@search.highlights': None, '@search.captions': None}, {'Description': 'This table contains high-level information about sales orders, including order dates, customer details, shipping information, and order status. It is used to manage and track sales orders from initiation to fulfillment.', 'Entity': 'SalesOrderHeader', 'EntityName': 'Sales Order Header', 'Columns': [{'Name': 'SalesOrderID', 'Definition': 'A unique identifier for each sales order. This ID is auto-generated and serves as the primary key for the SalesOrderHeader table.', 'Type': 'INT', 'AllowedValues': None, 'SampleValues': None}, {'Name': 'OrderDate', 'Definition': 'The date and time when the sales order was created. This field is used to track when the order was initiated.', 'Type': 'DATETIME', 'AllowedValues': None, 'SampleValues': None}, {'Name': 'DueDate', 'Definition': 'The date by which the order is expected to be fulfilled or delivered. It helps in managing delivery timelines.', 'Type': 'DATETIME', 'AllowedValues': None, 'SampleValues': None}, {'Name': 'ShipDate', 'Definition': 'The date when the order was shipped to the customer. This is used for tracking shipping and fulfillment status.', 'Type': 'DATETIME', 'AllowedValues': None, 'SampleValues': None}, {'Name': 'Status', 'Definition': 'The current status of the order, represented as a numeric code (e.g., 1 for In Progress, 2 for Completed, 3 for Canceled).', 'Type': 'TINYINT', 'AllowedValues': '[1,2,3]', 'SampleValues': None}, {'Name': 'OnlineOrderFlag', 'Definition': 'Indicates whether the order was placed online.', 'Type': 'BIT', 'AllowedValues': '[\"True\",\"False\"]', 'SampleValues': None}, {'Name': 'SalesOrderNumber', 'Definition': 'A unique order number assigned to the sales order. This is used for tracking and identification purposes.', 'Type': 'NVARCHAR(25)', 'AllowedValues': None, 'SampleValues': None}, {'Name': 'PurchaseOrderNumber', 'Definition': \"The purchase order number provided by the customer. This field links the sales order to the customer's purchase order.\", 'Type': 'NVARCHAR(25)', 'AllowedValues': None, 'SampleValues': None}, {'Name': 'AccountNumber', 'Definition': \"The account number of the customer placing the order. This helps link the order to the customer's account.\", 'Type': 'NVARCHAR(15)', 'AllowedValues': None, 'SampleValues': None}, {'Name': 'CustomerID', 'Definition': 'A foreign key that links to the Customer table, representing the customer who placed the order.', 'Type': 'INT', 'AllowedValues': None, 'SampleValues': None}, {'Name': 'ShipToAddressID', 'Definition': 'A foreign key that links to the Address table, representing the shipping address for the order.', 'Type': 'INT', 'AllowedValues': None, 'SampleValues': None}, {'Name': 'BillToAddressID', 'Definition': 'A foreign key that links to the Address table, representing the billing address for the order.', 'Type': 'INT', 'AllowedValues': None, 'SampleValues': None}, {'Name': 'ShipMethod', 'Definition': 'The shipping method used for the order (e.g., UPS, FedEx). This field helps track shipping preferences.', 'Type': 'NVARCHAR(50)', 'AllowedValues': None, 'SampleValues': None}, {'Name': 'SubTotal', 'Definition': 'The total cost of the order before taxes and shipping charges. This field is used to calculate the final total. The currency is pound sterling (GBP).', 'Type': 'MONEY', 'AllowedValues': None, 'SampleValues': None}, {'Name': 'TaxAmt', 'Definition': 'The tax amount applied to the order. This is calculated based on the order subtotal and applicable tax rates. The currency is pound sterling (GBP).', 'Type': 'MONEY', 'AllowedValues': None, 'SampleValues': None}, {'Name': 'Freight', 'Definition': 'The shipping charge applied to the order. This field represents the cost of shipping the order to the customer. The currency is pound sterling (GBP).', 'Type': 'MONEY', 'AllowedValues': None, 'SampleValues': None}, {'Name': 'TotalDue', 'Definition': 'The total amount due for the order, including all line items, taxes, and shipping charges. The currency is pound sterling (GBP).', 'Type': 'MONEY', 'AllowedValues': None, 'SampleValues': None}, {'Name': 'Comment', 'Definition': 'Any additional comments or notes related to the sales order. This field can include special instructions or remarks.', 'Type': 'NVARCHAR(255)', 'AllowedValues': None, 'SampleValues': None}, {'Name': 'ModifiedDate', 'Definition': 'The date and time when the sales order header record was last modified. This is used for tracking updates and changes to the order.', 'Type': 'DATETIME', 'AllowedValues': None, 'SampleValues': None}], '@search.score': 0.01587301678955555, '@search.reranker_score': 1.8796147108078003, '@search.highlights': None, '@search.captions': None}]\n", "INFO:semantic_kernel.functions.kernel_function:Function SQL-GetEntitySchema succeeded.\n", - "INFO:semantic_kernel.functions.kernel_function:Function completed. Duration: 0.566008s\n", - "INFO:httpx:HTTP Request: POST https://open-ai-gpt-001.openai.azure.com/openai/deployments/gpt-4o/chat/completions?api-version=2024-02-01 \"HTTP/1.1 429 Too Many Requests\"\n", - "INFO:openai._base_client:Retrying request to /chat/completions in 1.000000 seconds\n", + "INFO:semantic_kernel.functions.kernel_function:Function completed. Duration: 0.446188s\n", "INFO:httpx:HTTP Request: POST https://open-ai-gpt-001.openai.azure.com/openai/deployments/gpt-4o/chat/completions?api-version=2024-02-01 \"HTTP/1.1 200 OK\"\n", - "INFO:semantic_kernel.connectors.ai.open_ai.services.open_ai_handler:OpenAI usage: CompletionUsage(completion_tokens=34, prompt_tokens=5818, total_tokens=5852)\n", + "INFO:semantic_kernel.connectors.ai.open_ai.services.open_ai_handler:OpenAI usage: CompletionUsage(completion_tokens=30, prompt_tokens=9242, total_tokens=9272)\n", "INFO:semantic_kernel.connectors.ai.open_ai.services.open_ai_chat_completion_base:processing 1 tool calls in parallel.\n", - "INFO:semantic_kernel.kernel:Calling SQL-RunSQLQuery function with args: {\"sql_query\":\"SELECT ParentProductCategoryName, ProductCategoryName FROM SalesLT.vGetAllCategories;\"}\n", + "INFO:semantic_kernel.kernel:Calling SQL-RunSQLQuery function with args: {\"sql_query\":\"SELECT DISTINCT ProductCategoryName FROM SalesLT.vGetAllCategories;\"}\n", "INFO:semantic_kernel.functions.kernel_function:Function SQL-RunSQLQuery invoking.\n", "INFO:root:Executing SQL Query\n", "INFO:semantic_kernel.functions.kernel_function:Function SQL-RunSQLQuery succeeded.\n", - "INFO:semantic_kernel.functions.kernel_function:Function completed. Duration: 0.369210s\n", + "INFO:semantic_kernel.functions.kernel_function:Function completed. Duration: 0.339113s\n", "INFO:httpx:HTTP Request: POST https://open-ai-gpt-001.openai.azure.com/openai/deployments/gpt-4o/chat/completions?api-version=2024-02-01 \"HTTP/1.1 200 OK\"\n", - "INFO:semantic_kernel.connectors.ai.open_ai.services.open_ai_handler:OpenAI usage: CompletionUsage(completion_tokens=636, prompt_tokens=6556, total_tokens=7192)\n", + "INFO:semantic_kernel.connectors.ai.open_ai.services.open_ai_handler:OpenAI usage: CompletionUsage(completion_tokens=627, prompt_tokens=9632, total_tokens=10259)\n", "INFO:semantic_kernel.functions.kernel_function:Function ChatBot-Chat succeeded.\n", - "INFO:semantic_kernel.functions.kernel_function:Function completed. Duration: 9.696862s\n", + "INFO:semantic_kernel.functions.kernel_function:Function completed. Duration: 8.669984s\n", "INFO:root:Answer: {\n", - " \"answer\": \"Our product categories are organised into several parent categories, each containing multiple subcategories. Here is a detailed list of the different product categories we have:\\n\\n### Accessories\\n- Bike Racks\\n- Bike Stands\\n- Bottles and Cages\\n- Cleaners\\n- Fenders\\n- Helmets\\n- Hydration Packs\\n- Lights\\n- Locks\\n- Panniers\\n- Pumps\\n- Tires and Tubes\\n\\n### Clothing\\n- Bib-Shorts\\n- Caps\\n- Gloves\\n- Jerseys\\n- Shorts\\n- Socks\\n- Tights\\n- Vests\\n\\n### Components\\n- Handlebars\\n- Bottom Brackets\\n- Brakes\\n- Chains\\n- Cranksets\\n- Derailleurs\\n- Forks\\n- Headsets\\n- Mountain Frames\\n- Pedals\\n- Road Frames\\n- Saddles\\n- Touring Frames\\n- Wheels\\n\\n### Bikes\\n- Mountain Bikes\\n- Road Bikes\\n- Touring Bikes\\n\\nThese categories help in better organising and managing our product inventory, making it easier for customers to find what they need [1].\",\n", + " \"answer\": \"The different product categories we have are as follows:\\n\\n- Bib-Shorts\\n- Bike Racks\\n- Bike Stands\\n- Bottles and Cages\\n- Bottom Brackets\\n- Brakes\\n- Caps\\n- Chains\\n- Cleaners\\n- Cranksets\\n- Derailleurs\\n- Fenders\\n- Forks\\n- Gloves\\n- Handlebars\\n- Headsets\\n- Helmets\\n- Hydration Packs\\n- Jerseys\\n- Lights\\n- Locks\\n- Mountain Bikes\\n- Mountain Frames\\n- Panniers\\n- Pedals\\n- Pumps\\n- Road Bikes\\n- Road Frames\\n- Saddles\\n- Shorts\\n- Socks\\n- Tights\\n- Tires and Tubes\\n- Touring Bikes\\n- Touring Frames\\n- Vests\\n- Wheels\",\n", " \"sources\": [\n", " {\n", " \"title\": \"Get All Categories\",\n", - " \"chunk\": \"| ParentProductCategoryName | ProductCategoryName |\\n|---------------------------|---------------------|\\n| Accessories | Bike Racks |\\n| Accessories | Bike Stands |\\n| Accessories | Bottles and Cages |\\n| Accessories | Cleaners |\\n| Accessories | Fenders |\\n| Accessories | Helmets |\\n| Accessories | Hydration Packs |\\n| Accessories | Lights |\\n| Accessories | Locks |\\n| Accessories | Panniers |\\n| Accessories | Pumps |\\n| Accessories | Tires and Tubes |\\n| Clothing | Bib-Shorts |\\n| Clothing | Caps |\\n| Clothing | Gloves |\\n| Clothing | Jerseys |\\n| Clothing | Shorts |\\n| Clothing | Socks |\\n| Clothing | Tights |\\n| Clothing | Vests |\\n| Components | Handlebars |\\n| Components | Bottom Brackets |\\n| Components | Brakes |\\n| Components | Chains |\\n| Components | Cranksets |\\n| Components | Derailleurs |\\n| Components | Forks |\\n| Components | Headsets |\\n| Components | Mountain Frames |\\n| Components | Pedals |\\n| Components | Road Frames |\\n| Components | Saddles |\\n| Components | Touring Frames |\\n| Components | Wheels |\\n| Bikes | Mountain Bikes |\\n| Bikes | Road Bikes |\\n| Bikes | Touring Bikes |\\n\",\n", - " \"reference\": \"SELECT ParentProductCategoryName, ProductCategoryName FROM SalesLT.vGetAllCategories;\"\n", + " \"chunk\": \"| ProductCategoryName |\\n|----------------------------|\\n| Bib-Shorts |\\n| Bike Racks |\\n| Bike Stands |\\n| Bottles and Cages |\\n| Bottom Brackets |\\n| Brakes |\\n| Caps |\\n| Chains |\\n| Cleaners |\\n| Cranksets |\\n| Derailleurs |\\n| Fenders |\\n| Forks |\\n| Gloves |\\n| Handlebars |\\n| Headsets |\\n| Helmets |\\n| Hydration Packs |\\n| Jerseys |\\n| Lights |\\n| Locks |\\n| Mountain Bikes |\\n| Mountain Frames |\\n| Panniers |\\n| Pedals |\\n| Pumps |\\n| Road Bikes |\\n| Road Frames |\\n| Saddles |\\n| Shorts |\\n| Socks |\\n| Tights |\\n| Tires and Tubes |\\n| Touring Bikes |\\n| Touring Frames |\\n| Vests |\\n| Wheels |\\n\",\n", + " \"reference\": \"SELECT DISTINCT ProductCategoryName FROM SalesLT.vGetAllCategories;\"\n", + " }\n", + " ],\n", + " \"schemas\": [\n", + " {\n", + " \"Entity\": \"vGetAllCategories\",\n", + " \"Columns\": [\n", + " {\n", + " \"Name\": \"ProductCategoryID\",\n", + " \"Definition\": \"A unique identifier for each product category. This ID is used to reference specific categories.\",\n", + " \"Type\": \"INT\"\n", + " },\n", + " {\n", + " \"Name\": \"ParentProductCategoryName\",\n", + " \"Definition\": \"The name of the parent product category. This represents the top-level category under which subcategories are grouped.\",\n", + " \"Type\": \"NVARCHAR(50)\"\n", + " },\n", + " {\n", + " \"Name\": \"ProductCategoryName\",\n", + " \"Definition\": \"The name of the product category. This can refer to either a top-level category or a subcategory, depending on the context.\",\n", + " \"Type\": \"NVARCHAR(50)\"\n", + " }\n", + " ]\n", " }\n", " ]\n", - "}\n" + "}\n", + "INFO:root:Time taken: 9.309687852859497\n" ] }, { "data": { "text/markdown": [ - "Our product categories are organised into several parent categories, each containing multiple subcategories. Here is a detailed list of the different product categories we have:\n", + "The different product categories we have are as follows:\n", "\n", - "### Accessories\n", + "- Bib-Shorts\n", "- Bike Racks\n", "- Bike Stands\n", "- Bottles and Cages\n", - "- Cleaners\n", - "- Fenders\n", - "- Helmets\n", - "- Hydration Packs\n", - "- Lights\n", - "- Locks\n", - "- Panniers\n", - "- Pumps\n", - "- Tires and Tubes\n", - "\n", - "### Clothing\n", - "- Bib-Shorts\n", - "- Caps\n", - "- Gloves\n", - "- Jerseys\n", - "- Shorts\n", - "- Socks\n", - "- Tights\n", - "- Vests\n", - "\n", - "### Components\n", - "- Handlebars\n", "- Bottom Brackets\n", "- Brakes\n", + "- Caps\n", "- Chains\n", + "- Cleaners\n", "- Cranksets\n", "- Derailleurs\n", + "- Fenders\n", "- Forks\n", + "- Gloves\n", + "- Handlebars\n", "- Headsets\n", + "- Helmets\n", + "- Hydration Packs\n", + "- Jerseys\n", + "- Lights\n", + "- Locks\n", + "- Mountain Bikes\n", "- Mountain Frames\n", + "- Panniers\n", "- Pedals\n", + "- Pumps\n", + "- Road Bikes\n", "- Road Frames\n", "- Saddles\n", - "- Touring Frames\n", - "- Wheels\n", - "\n", - "### Bikes\n", - "- Mountain Bikes\n", - "- Road Bikes\n", + "- Shorts\n", + "- Socks\n", + "- Tights\n", + "- Tires and Tubes\n", "- Touring Bikes\n", - "\n", - "These categories help in better organising and managing our product inventory, making it easier for customers to find what they need [1]." + "- Touring Frames\n", + "- Vests\n", + "- Wheels" ], "text/plain": [ "" @@ -563,6 +618,41 @@ }, "metadata": {}, "output_type": "display_data" + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:root:Document: {'Question': 'What are the different product categories we have?', 'Query': 'SELECT DISTINCT ProductCategoryName FROM SalesLT.vGetAllCategories;', 'Schemas': [{'Entity': 'vGetAllCategories', 'Columns': [{'Name': 'ProductCategoryID', 'Definition': 'A unique identifier for each product category. This ID is used to reference specific categories.', 'Type': 'INT'}, {'Name': 'ParentProductCategoryName', 'Definition': 'The name of the parent product category. This represents the top-level category under which subcategories are grouped.', 'Type': 'NVARCHAR(50)'}, {'Name': 'ProductCategoryName', 'Definition': 'The name of the product category. This can refer to either a top-level category or a subcategory, depending on the context.', 'Type': 'NVARCHAR(50)'}]}]}\n", + "INFO:root:Vector Fields: {'Question': 'QuestionEmbedding', 'Query': 'QueryEmbedding'}\n", + "INFO:root:Vector Fields: {'Question': 'QuestionEmbedding', 'Query': 'QueryEmbedding'}\n", + "INFO:httpx:HTTP Request: POST https://open-ai-gpt-001.openai.azure.com/openai/deployments/text-embedding-ada-002/embeddings?api-version=2023-03-15-preview \"HTTP/1.1 200 OK\"\n", + "INFO:root:Document with embeddings: {'Question': 'What are the different product categories we have?', 'Query': 'SELECT DISTINCT ProductCategoryName FROM SalesLT.vGetAllCategories;', 'Schemas': [{'Entity': 'vGetAllCategories', 'Columns': [{'Name': 'ProductCategoryID', 'Definition': 'A unique identifier for each product category. This ID is used to reference specific categories.', 'Type': 'INT'}, {'Name': 'ParentProductCategoryName', 'Definition': 'The name of the parent product category. This represents the top-level category under which subcategories are grouped.', 'Type': 'NVARCHAR(50)'}, {'Name': 'ProductCategoryName', 'Definition': 'The name of the product category. This can refer to either a top-level category or a subcategory, depending on the context.', 'Type': 'NVARCHAR(50)'}]}], 'QuestionEmbedding': [0.013793433085083961, 0.003165433183312416, -0.006151125766336918, -0.013820061460137367, -0.017734413966536522, 0.005801629740744829, -0.01408634427934885, 0.009007005952298641, -0.010531472973525524, -0.011536689475178719, 0.010578072629868984, 0.014725422486662865, -0.03352496773004532, 0.00788196176290512, -0.0035349002573639154, 0.022607384249567986, 0.017201850190758705, 0.019811417907476425, -0.005944756790995598, -0.029850268736481667, -0.029477473348379135, 0.0012506955536082387, 0.009998908266425133, -0.012015997432172298, -0.007535794749855995, 0.016922252252697945, 0.016562771052122116, -0.019132398068904877, -0.006284267175942659, 0.0016634335042908788, 0.008574296720325947, -0.0015793880447745323, -0.01708202250301838, -0.01818709447979927, -0.01772109977900982, 0.019212283194065094, -0.001542774261906743, 0.006943316198885441, 0.001790749840438366, -0.0023299718741327524, 0.013846689835190773, 0.013334096409380436, 0.008108302019536495, 0.010731184855103493, 0.003544885665178299, 0.0042971340008080006, -0.030808884650468826, 0.002839237218722701, -0.006104526109993458, 0.0036780270747840405, 0.013400666415691376, 0.008427840657532215, -0.015151474624872208, -0.02396542578935623, 0.018493318930268288, 0.02803954668343067, 0.015497641637921333, 0.011723087169229984, 0.003997566178441048, -0.015697352588176727, -0.0014437504578381777, 0.03722629323601723, -0.02606905624270439, 0.009879080578684807, -0.026774704456329346, -0.01672254130244255, -0.011203835718333721, 0.0013031199341639876, -0.008434497751295567, -0.010771127417683601, 0.011576632037758827, 0.027746636420488358, -0.011370263062417507, 0.007848676294088364, 0.004380347207188606, -0.009013663046061993, -0.002929107518866658, -0.01951850764453411, -0.0014745392836630344, 0.008774008601903915, 0.016775798052549362, -0.005561975762248039, -0.012282280251383781, -0.004969497211277485, 0.02377902716398239, -0.012042625807225704, -6.022561137797311e-05, 0.03703989461064339, 0.004906254820525646, -0.011763029731810093, 0.012928015552461147, 0.015617468394339085, 0.031900644302368164, -0.0023166576866060495, -0.004816384520381689, 0.020876547321677208, 0.0014079686952754855, 0.003741268999874592, -0.02010432817041874, 0.0026411896105855703, -0.005495405290275812, -0.004773113876581192, -0.006201053503900766, -0.019451936706900597, -0.004416960757225752, 0.008833921514451504, 0.012135825119912624, -0.014019773341715336, 0.016735855489969254, -0.014472453854978085, -0.021355856209993362, 0.020783349871635437, 0.033604852855205536, -0.024351535364985466, 0.015244673006236553, -0.005468776915222406, 0.01630980335175991, 0.0074758813716471195, -0.007276169490069151, -0.012462020851671696, 0.004889612551778555, 0.018440062180161476, 0.03751920536160469, -0.02025078423321247, 0.0185465756803751, -0.016682598739862442, -0.014712108299136162, -0.01722847856581211, 0.022181332111358643, -0.018266979604959488, 0.004137364216148853, -0.0024448062758892775, 0.01491182018071413, 0.00916011817753315, -0.00952625647187233, 0.017161907628178596, -0.02761349454522133, 0.03445695713162422, 0.009253316558897495, -0.008780665695667267, 0.014725422486662865, 0.017761042341589928, 0.0035914850886911154, 0.022367730736732483, 0.0174015611410141, 0.01133697759360075, 0.027320584282279015, 0.018067266792058945, 0.0031487904489040375, 0.016908938065171242, 0.007229569833725691, 0.009093547239899635, 0.027693379670381546, -0.008261414244771004, 0.011097323149442673, -0.01314769871532917, -0.0010734513634815812, 0.0027992946561425924, -0.027906406670808792, -0.004393661394715309, 0.0162565466016531, 0.006903373636305332, -0.002210144652053714, 0.011796314269304276, 0.026228826493024826, 0.024018680676817894, 0.03432381525635719, 0.003102191025391221, 0.0029923496767878532, 0.001207424676977098, -0.0035215860698372126, -0.0046632722951471806, -0.006134483031928539, 0.012415421195328236, -0.004450246226042509, 0.01021193340420723, 0.0004385339852888137, 0.002785980701446533, -0.023712456226348877, -0.008367927744984627, 0.015737295150756836, -0.016509514302015305, 0.005345621146261692, -0.0046998863108456135, -0.014765364117920399, -0.016616027802228928, -0.003033956279978156, -0.010804411955177784, 0.025403350591659546, -0.022594070062041283, -0.01243539247661829, 0.03123493678867817, -0.0015369493048638105, 0.0015228030970320106, -0.6731621623039246, -0.025802774354815483, 0.019438622519373894, -0.029690498486161232, 0.026668192818760872, 0.009925680235028267, 0.017428189516067505, 0.025483235716819763, -0.011516718193888664, 0.027693379670381546, 0.01959839276969433, 0.008980377577245235, 0.021595509722828865, 0.004263848531991243, -0.007648964878171682, -0.03064911626279354, 0.018985942006111145, -0.0012565205106511712, -0.006037955638021231, 0.018892742693424225, 0.0017424861434847116, 0.0007747156196273863, -0.022194646298885345, -0.0174015611410141, 0.02254081331193447, 0.015244673006236553, 0.006683690939098597, 0.0008978712721727788, -0.008001789450645447, 0.026867903769016266, -0.01108400896191597, 0.025216951966285706, 0.022500870749354362, -0.011310349218547344, 0.041753094643354416, 0.015684038400650024, -0.004350390285253525, 0.03091539815068245, 0.00993899442255497, 0.0258826594799757, -0.04737165570259094, -0.011456804350018501, 0.015471013262867928, -0.014765364117920399, -0.006473993416875601, 0.025589747354388237, 0.025390036404132843, 0.00019149456056766212, 0.0014154579257592559, 0.0017558002145960927, 0.014938448555767536, -0.01882617175579071, -0.012355508282780647, -0.0005475434008985758, 0.028865022584795952, 0.0027210742700845003, 0.026761390268802643, -0.003844453487545252, 0.005981370806694031, 0.037758857011795044, -0.004070793744176626, 0.011123951524496078, -0.011763029731810093, -0.014845249243080616, -0.0272540133446455, -0.009759253822267056, -0.033551596105098724, -0.008740723133087158, 0.010518158785998821, -0.003425058675929904, -0.018772916868329048, 0.0011583288433030248, -0.02605574205517769, -0.004929554648697376, -0.007722192443907261, 0.017215164378285408, 0.024338221177458763, 0.021355856209993362, -0.014192856848239899, -0.006097869016230106, -0.0014246113132685423, -0.0012531919637694955, 0.01170311588793993, -0.0005076010129414499, 0.00782870501279831, -0.002814273117110133, -0.010385017842054367, 0.005059367511421442, 0.018306922167539597, 0.028225945308804512, 0.002541333669796586, 0.022008247673511505, 0.009599484503269196, -0.0206102654337883, -0.022061504423618317, 0.0026478467043489218, -0.0174015611410141, 0.008234785869717598, -0.017561331391334534, -0.011416861787438393, 0.007735506631433964, 0.01383337564766407, -0.005092652980238199, 0.014858563430607319, 0.0050660246051847935, 0.01202265452593565, -0.002531348029151559, 0.011004123836755753, 0.01005216408520937, -0.027453726157546043, 0.008640866726636887, -0.01305449940264225, -0.005954742431640625, -0.008327985182404518, -0.021089574322104454, -0.026002485305070877, 0.03110179677605629, -0.01593700796365738, -0.02194167859852314, -0.0015252993907779455, 0.0040907650254666805, 0.010504844598472118, 0.015178102068603039, -0.009599484503269196, 0.008620895445346832, 0.016962194815278053, -0.017374932765960693, 0.006487307604402304, -0.016709227114915848, -0.008261414244771004, 0.021502312272787094, -0.012821502052247524, -0.007888618856668472, -0.013367381878197193, -0.014073030091822147, 0.028545483946800232, 0.011649859137833118, -0.023699142038822174, 0.015510955825448036, -0.022847037762403488, -0.011709772981703281, -0.018653089180588722, -0.020410552620887756, 0.00021926699264440686, -0.01030513271689415, -0.010864325799047947, -0.030302949249744415, 0.015005018562078476, 0.002775995060801506, 0.0023083363194018602, -0.015084903687238693, -0.01280153077095747, -0.007529137656092644, 0.018440062180161476, 0.025523178279399872, 0.013686920516192913, -0.014512396417558193, -0.03216692432761192, -0.01676248386502266, -0.0048829554580152035, 0.005731730721890926, 0.01041830237954855, -0.002932436065748334, -0.005428834352642298, -0.008940435014665127, 0.0010609693126752973, -0.002436484908685088, 0.03490963578224182, 0.005788316018879414, -0.03307228535413742, 0.012621790170669556, -0.005412191618233919, -0.0037678973749279976, 0.0164828859269619, 0.0029141290578991175, 0.0027327241841703653, -0.013200954534113407, 3.0086801416473463e-05, 0.024484675377607346, -0.002631203969940543, 2.1986508727422915e-05, 0.00824144296348095, -0.01589706540107727, 0.02652173675596714, 0.011110637336969376, 0.010771127417683601, 0.018200408667325974, -0.0004071209696121514, -0.017747728154063225, 0.02560306154191494, -0.008594268001616001, 0.02432490698993206, -0.004623329732567072, 0.0012506955536082387, -0.0203839261084795, -0.011796314269304276, -0.009220031090080738, 0.010138706304132938, 0.004293805453926325, -0.015164787881076336, 0.0037479260936379433, 0.0036447416059672832, -0.018253665417432785, 0.0002949910704046488, 0.03152784705162048, -0.006876745726913214, 0.006790203507989645, -0.007688906975090504, 0.02753361128270626, 0.010478216223418713, 0.019132398068904877, 0.0004826370277442038, -0.03898375853896141, -0.0062476531602442265, -0.013793433085083961, 0.0056152320466935635, -0.02451130375266075, 0.009286602027714252, -0.0035914850886911154, -0.0043304190039634705, 0.012834816239774227, -0.0016268196050077677, -0.004806398879736662, 0.0007847012602724135, -0.02835908532142639, 0.020024443045258522, -0.011143922805786133, 0.01983804628252983, -0.017974069342017174, -0.02451130375266075, 0.006444036494940519, 0.005804958287626505, 0.03999563306570053, 0.007169656455516815, 0.0013139377115294337, 0.009579513221979141, 0.027906406670808792, -0.024351535364985466, 0.031075168401002884, 0.011556660756468773, -0.005348949693143368, 0.03267286345362663, 0.0023382932413369417, 0.014605594798922539, 0.05080670118331909, 0.0023715784773230553, 0.009120175614953041, 0.007409310434013605, -0.012169110588729382, -0.000997727271169424, -0.007648964878171682, -0.015524270012974739, -0.02400536648929119, 0.008121616207063198, 0.004503502976149321, 0.004523473791778088, -0.006147797219455242, 0.010498187504708767, -0.0057650161907076836, 0.012049282900989056, 0.005325649864971638, 0.00010016798478318378, 0.028199316933751106, -0.006936659105122089, 0.013194297440350056, 0.027453726157546043, -0.023020122200250626, -0.008161558769643307, 0.0028325801249593496, -0.017508074641227722, 0.01440588291734457, 0.001506160362623632, 0.016323117539286613, -0.019571764394640923, 0.001610176987014711, 0.03091539815068245, 0.005418848711997271, 0.0017840927466750145, -0.012748274952173233, 0.02120940014719963, -0.005655174609273672, -0.04380347207188606, -0.0062709529884159565, 0.012428735382854939, 0.0014462468679994345, -0.000596639234572649, -0.007728849537670612, -0.02505718357861042, -0.04036842659115791, 0.022687269374728203, 0.016709227114915848, 0.011896170675754547, -0.009619454853236675, 0.002499727066606283, 0.0050893244333565235, -0.0006236835615709424, 0.014552338980138302, -0.0009952308610081673, 0.025536492466926575, 0.012695018202066422, -0.002438149182125926, -0.0012215710012242198, 0.004490188788622618, -0.011996026150882244, 0.029743755236268044, -0.006171097047626972, -0.015697352588176727, 0.002817601663991809, -0.008061702363193035, -0.03738606348633766, -0.006077898200601339, -0.0038511105813086033, -0.005332306958734989, -0.012402107007801533, 0.037998512387275696, 0.0023682499304413795, -0.005938099697232246, -0.008687466382980347, 0.018519947305321693, 0.005255750846117735, -0.004673257935792208, -0.010591386817395687, 0.01113060861825943, -0.007382682058960199, 0.05783655866980553, 0.006647076923400164, -0.03453683853149414, 0.03427055850625038, -0.011157236993312836, -0.008740723133087158, -0.01895931363105774, -0.003904367098584771, 0.013793433085083961, 0.019451936706900597, -0.02638859488070011, 0.0023915497586131096, 0.006697004660964012, -0.017002137377858162, 0.011530032381415367, 0.004896269645541906, -0.0039642807096242905, -0.008694123476743698, -0.0074958521872758865, -0.004952854476869106, 0.022008247673511505, -0.013780118897557259, 0.015337872318923473, 0.01440588291734457, 0.0025330123025923967, 0.010884297080338001, 0.03474986553192139, 0.03307228535413742, 0.008161558769643307, -0.0034616724587976933, -0.012089225463569164, -0.008108302019536495, 0.004130707122385502, 0.003180411644279957, -0.012182424776256084, 0.006320880725979805, -0.013267525471746922, 0.017761042341589928, 0.03554871305823326, 0.0007680585840716958, 0.02034398354589939, 0.01689562387764454, -0.0032220182474702597, -0.022181332111358643, -0.006044612731784582, 0.010458244942128658, -0.0007102253730408847, 0.011603259481489658, 0.022980179637670517, 0.0036147849168628454, -0.007069800514727831, 0.003621442010626197, -0.0009686026023700833, 0.005668488796800375, 0.012302251532673836, 0.002672810573130846, -0.0014054722851142287, -0.00019180661183781922, -0.005791644565761089, -0.06145799905061722, 0.003504943335428834, 0.012615133076906204, 0.008853892795741558, -0.009053604677319527, -0.016269860789179802, -0.017388246953487396, -0.01035173237323761, -0.024125194177031517, -0.026002485305070877, -0.018293607980012894, -0.016043521463871002, -0.005804958287626505, -0.006370808929204941, -0.023379603400826454, 0.020676836371421814, 0.022873666137456894, 0.009865766391158104, -0.014006459154188633, 0.0010568086290732026, 0.01813383772969246, 0.008221471682190895, -0.022021561861038208, -0.0033884448930621147, -0.031953901052474976, -0.023100007325410843, 0.008694123476743698, -0.01726841926574707, 0.004646629560738802, -0.01634974591434002, -0.0016043520299717784, -0.017880870029330254, -0.012741617858409882, 0.02729395590722561, -0.008867206983268261, 0.009393115527927876, -0.0009311566245742142, 0.010085449554026127, 0.0059014856815338135, -0.0034683295525610447, -0.015164787881076336, 0.0033368526492267847, -0.013067813590168953, -0.016616027802228928, -0.03930329531431198, -0.007648964878171682, 0.01768115721642971, 0.0017408218700438738, -0.021049631759524345, 0.012195738032460213, 0.009885737672448158, 0.025270208716392517, -0.006836803164333105, 0.015005018562078476, -0.012129168026149273, -0.0012531919637694955, 0.01268836110830307, 0.011396890506148338, 0.012195738032460213, -0.011822942644357681, -0.005305678583681583, 0.012881415896117687, -0.011550003662705421, 0.02881176583468914, -0.0053289784118533134, -0.05067355930805206, 0.022194646298885345, -0.022287845611572266, -0.03640081733465195, -0.004050822462886572, 0.0009436386171728373, -0.006364151835441589, 0.020170899108052254, -0.019891303032636642, -0.025216951966285706, -0.019119083881378174, 0.01571066677570343, -0.01539112813770771, 0.02729395590722561, -0.004443589132279158, -0.01800069771707058, -0.02689453214406967, -0.0074958521872758865, -0.007622336503118277, -0.02156888321042061, -0.018386807292699814, -0.03632093220949173, 0.0035748425871133804, 0.029663870111107826, -0.0183202363550663, 0.024338221177458763, -0.006417408119887114, -0.01326086837798357, -0.009812509641051292, -0.017002137377858162, -0.02505718357861042, -0.022194646298885345, 0.008021760731935501, -0.02248755656182766, 0.014951762743294239, 0.04638640955090523, 0.005648517515510321, -0.010704556480050087, 0.026721449568867683, 0.012628447264432907, 0.001023523393087089, 0.008833921514451504, 0.015923693776130676, 0.006930002011358738, -0.0208366047590971, 0.006287595722824335, 0.0015103210462257266, -0.004104079212993383, 0.010784441605210304, 0.01232222281396389, -0.0018190423725172877, 0.03198052942752838, -0.011776343919336796, -0.033098913729190826, -0.02693447470664978, -0.0045967018231749535, -0.006677033845335245, -0.013154355809092522, -0.003867753315716982, 0.013034528121352196, -0.016376374289393425, 0.004197278060019016, 0.02143574133515358, -0.0009752596379257739, -8.42534500407055e-05, 0.002516369568184018, 0.029690498486161232, -0.0002639941230881959, 0.019225595518946648, 0.007868647575378418, 0.00886054988950491, -0.005858215037733316, -0.011077351868152618, -0.042525313794612885, -0.03211366757750511, -0.013740177266299725, -0.006274281535297632, 0.01694888062775135, -0.003103855298832059, -0.012714989483356476, -0.016882309690117836, 0.01035173237323761, -0.008061702363193035, -0.016908938065171242, 0.0009794202633202076, -0.012362165376543999, -0.037492576986551285, -0.00817487295717001, -0.03765234351158142, -0.03514929115772247, 0.008001789450645447, -6.839091656729579e-05, -0.034057531505823135, 0.020716778934001923, -0.02134254202246666, -0.0028092802967876196, 0.009506285190582275, -0.010784441605210304, 0.041380301117897034, 0.0026694820262491703, 0.030942026525735855, 0.025483235716819763, 0.019292166456580162, -0.018533261492848396, -0.02803954668343067, -0.0005354774766601622, -0.0061444686725735664, 0.03842456638813019, 0.03248646482825279, 0.004317104816436768, -0.014166228473186493, 0.005611903499811888, 0.004610015545040369, -0.007043172139674425, -0.025350093841552734, 0.013573749922215939, 0.005784987471997738, 0.018160466104745865, -0.0020686821080744267, -0.0055353473871946335, 0.013780118897557259, 0.01046490203589201, -0.0009095211862586439, 0.004746485501527786, 0.004363704472780228, -0.01878623105585575, -0.0238189697265625, 0.039649464190006256, -0.020583637058734894, 0.01335406769067049, -0.008194844238460064, -0.002519698115065694, 0.007043172139674425, -0.0006744436686858535, 0.0033401811961084604, -0.0013563764514401555, -0.005179194733500481, -0.003950966522097588, -0.00012814845831599087, 0.02601579949259758, 0.02220796048641205, 0.0027094243559986353, -0.017974069342017174, -0.011103980243206024, 0.0304627176374197, 0.026308711618185043, -0.009080233052372932, -0.02428496442735195, 0.004606686998158693, 0.0012739953817799687, 0.019997816532850266, -0.002569626085460186, -0.01704207994043827, 0.014685479924082756, -0.016975509002804756, -0.021781908348202705, 0.017201850190758705, 0.005332306958734989, -0.0251903235912323, -0.006730290129780769, -2.8890610337839462e-05, -0.008674152195453644, -0.02803954668343067, -0.00787530466914177, 0.014991704374551773, -0.027879778295755386, -0.02684127539396286, 0.0019788118079304695, 0.02501724101603031, -0.0183202363550663, 0.009619454853236675, -0.03110179677605629, 0.01772109977900982, -0.00047473175800405443, -0.001972154714167118, 0.00047806030488573015, 0.010152020491659641, -0.009220031090080738, -0.03128819540143013, -0.0035848282277584076, -0.008188187144696712, -0.025935916230082512, 0.006570520810782909, -0.013121070340275764, -0.024564560502767563, -0.0019887974485754967, -0.009279944933950901, -0.01777435652911663, -0.010185305960476398, 0.006800189148634672, 0.002344950335100293, -0.009033633396029472, 0.00943305715918541, -0.0004092013114131987, -0.01186288520693779, 0.008600925095379353, -0.033604852855205536, -0.006956630386412144, 0.0052124797366559505, -0.014645537361502647, 0.02537672221660614, 0.008980377577245235, -0.00782870501279831, -0.007316111586987972, -0.003824482439085841, -0.02867862582206726, -0.0042738341726362705, 0.005195837467908859, 0.014419197104871273, -0.014698794111609459, 0.0003723794361576438, -0.0046765864826738834, 0.003465001005679369, 0.004510159604251385, 0.003373466432094574, -0.007668936159461737, 0.0038211538922041655, 0.02372577041387558, 0.015244673006236553, 0.01190948486328125, -0.020117642357945442, -0.024564560502767563, -0.024378161877393723, -0.019318794831633568, -0.02550986409187317, -0.019904617220163345, 0.0051925089210271835, 0.04279159754514694, 0.004769785329699516, -0.02368582785129547, -0.013127727434039116, 0.01800069771707058, -0.017468132078647614, -0.011103980243206024, 0.021915050223469734, 0.0037046552170068026, -0.0013264196459203959, 0.013014556840062141, -0.012195738032460213, 0.027640122920274734, 0.004763128235936165, -0.0005329810664989054, -0.0022667297162115574, 0.017255105078220367, 0.010218590497970581, -0.011423518881201744, -0.002210144652053714, -0.02459118887782097, -0.006630434188991785, -0.02327308990061283, 0.019092455506324768, -0.0029740426689386368, 0.007688906975090504, 0.023712456226348877, -0.007655621971935034, -0.0008579289424233139, 0.005958070978522301, 0.03283263370394707, 0.004669929388910532, 0.030382832512259483, 0.014206171035766602, -0.04148681461811066, -0.010704556480050087, -0.010371703654527664, -0.005618560593575239, -0.008920463733375072, -0.009399772621691227, -0.00039942373405210674, -0.00900034885853529, 0.024125194177031517, 0.0022783796302974224, -0.004856327082961798, -0.005036067683249712, 0.004959511570632458, -0.011536689475178719, 0.009286602027714252, -0.0011450147721916437, 0.019585078582167625, 0.007096428424119949, -0.01523135881870985, 0.010424959473311901, -0.03147459030151367, 0.011829599738121033, 0.0003135060251224786, -0.004736499860882759, -0.01676248386502266, 0.0017857570201158524, -0.011210492812097073, -0.010771127417683601, -0.011723087169229984, 0.005185851827263832, -0.014379254542291164, -0.027453726157546043, -0.014325998723506927, 0.013274182565510273, -0.010391674935817719, -0.0006415743846446276, -0.008075016550719738, 0.0066370912827551365, 0.007742163725197315, -0.0012739953817799687, -0.016562771052122116, 0.017321676015853882, -0.003518257522955537, -0.019132398068904877, 0.026308711618185043, -0.02550986409187317, 0.012335537001490593, -0.0015485991025343537, -0.0028225944843143225, -0.0024198421742767096, 0.02875850908458233, 0.21398460865020752, 0.015417756512761116, -0.009453028440475464, 0.04329753294587135, 0.05280381813645363, 0.008727408945560455, 0.011842913925647736, 0.012202395126223564, 0.011576632037758827, 0.015191416256129742, 0.019571764394640923, 0.015630783513188362, 0.005229122471064329, 0.003751254640519619, 0.004014208447188139, -0.017388246953487396, -0.0361877903342247, -0.020077699795365334, -0.002947414293885231, 0.04020865634083748, 0.02111620269715786, -0.0042971340008080006, 0.002711088629439473, -0.01273496076464653, 0.029424216598272324, 0.03349833935499191, -0.002313329139724374, -0.02408525161445141, 0.03472323715686798, 0.0023932140320539474, -0.008148244582116604, -0.01030513271689415, -0.011869542300701141, 0.026641564443707466, 0.0006082890904508531, -0.008940435014665127, 0.013081127777695656, -0.022687269374728203, 0.010811069048941135, -0.008301356807351112, 0.007222912739962339, 0.014578966423869133, 0.002541333669796586, 0.013700234703719616, -0.010697899386286736, 0.018985942006111145, -0.024657759815454483, 0.005465448368340731, 0.023739084601402283, -0.010225247591733932, -0.019092455506324768, 0.0009810845367610455, 0.015111532062292099, 0.031634360551834106, -0.006147797219455242, 0.006583834998309612, -0.009453028440475464, -0.0001948230928974226, -0.0015677382471039891, -0.005715087987482548, 0.011709772981703281, 0.024884099140763283, -0.028865022584795952, 0.035282429307699203, -0.0028325801249593496, -0.008714094758033752, -0.022420985624194145, -0.0208366047590971, 0.027040988206863403, -0.012268966063857079, 0.01321426872164011, 0.007569080218672752, -0.00900034885853529, -0.0006382458377629519, -0.009512942284345627, -0.007143028080463409, 0.012428735382854939, 0.04492185637354851, 0.012342194095253944, 0.008840578608214855, 0.009353172965347767, -0.017667843028903008, -0.014179542660713196, -0.00036114564863964915, -0.003488300833851099, -0.01634974591434002, 0.030116550624370575, 0.0029757069423794746, 0.016749169677495956, -0.00020553680951707065, -0.004337076097726822, -0.008667495101690292, -0.007316111586987972, -0.0011899499222636223, -0.003804511157795787, 0.026215512305498123, -0.00902031920850277, -0.006956630386412144, 0.001233220798894763, -0.026175569742918015, -0.01507158949971199, 0.056505147367715836, 0.02766675129532814, 0.015777237713336945, -0.01465885154902935, 0.005485419649630785, -0.015537584200501442, 0.004327090457081795, 0.013646977953612804, -0.003967609256505966, 0.011829599738121033, -0.02684127539396286, -0.0027077600825577974, -0.01923890970647335, 0.000629508460406214, -0.0035914850886911154, -0.012262308970093727, -0.014286056160926819, -0.0019654976204037666, -0.008554325439035892, -0.016962194815278053, -0.020117642357945442, 0.0014828606508672237, 0.004703214857727289, -0.0035016147885471582, -0.00022321962751448154, 0.005618560593575239, 0.0048463414423167706, 0.006780218333005905, -0.014991704374551773, 0.019039198756217957, 0.004263848531991243, -0.011343634687364101, -0.017800984904170036, 0.009313230402767658, -0.003724626498296857, 0.024311592802405357, 0.011330320499837399, -0.008893835358321667, 0.0018240350764244795, -0.018985942006111145, 0.019079141318798065, 0.006264295894652605, 0.0003638500638771802, 0.0072894832119345665, -0.01087763998657465, -0.006067912559956312, 0.00391768105328083, -0.0054321628995239735, -0.028865022584795952, -0.02830583043396473, 0.007995132356882095, -0.008414527401328087, -0.01186288520693779, 0.010318446904420853, 0.005675145890563726, -0.00035552875488065183, -0.010691242292523384, 0.035335686057806015, -0.010431616567075253, -0.026122312992811203, -0.026135627180337906, 0.03312554210424423, -0.0013921582140028477, -0.009799196384847164, -0.0010959189385175705, -0.17063382267951965, 0.024631131440401077, 0.04151344299316406, -0.02312663570046425, 0.02395211160182953, 0.009965622797608376, 0.03363148123025894, 0.015537584200501442, -0.016110090538859367, 0.0005146741168573499, 0.037306178361177444, -0.021728651598095894, -0.045694075524806976, -0.017601273953914642, 0.025909287855029106, -0.018440062180161476, 0.013547122478485107, 0.023512745276093483, -0.0030689057894051075, 0.00977922510355711, 0.04814387485384941, 0.002260072622448206, -0.029344331473112106, -0.0022767153568565845, -0.001012705615721643, -0.007728849537670612, -0.008947092108428478, 0.02958398498594761, 0.0005105134914629161, -0.034243930131196976, 0.0032769390381872654, -0.010984153486788273, 0.01548432745039463, -0.0025613047182559967, -0.004280491266399622, -0.015697352588176727, -0.011297035031020641, -0.012635104358196259, 0.0007035682792775333, 0.003411744488403201, 0.015044961124658585, 0.01644294336438179, 0.028465598821640015, 0.020184213295578957, 0.004620001185685396, 0.00014801562065258622, 0.007249541115015745, -0.006127825938165188, 0.00989239476621151, -0.040794480592012405, 0.010385017842054367, -0.013913260772824287, -0.005691788624972105, 0.0014063044218346477, 0.005874857772141695, 0.010504844598472118, 0.01174971554428339, 0.015857122838497162, 0.013107756152749062, -0.011510061100125313, -0.0030422776471823454, -0.01280153077095747, -0.02220796048641205, -0.0030173135455697775, -0.018107209354639053, -0.004240548703819513, 0.006081226747483015, 0.010851011611521244, -0.02376571297645569, 0.011396890506148338, -0.0030439419206231833, 0.0018207065295428038, 0.0026877890340983868, -0.013740177266299725, -0.0026145612355321646, 0.010737841948866844, -0.023246461525559425, -0.006204382050782442, 0.015111532062292099, -0.009899051859974861, -0.004476874601095915, 0.02194167859852314, -0.017374932765960693, 0.02616225555539131, -0.01951850764453411, -0.006194396410137415, 0.0034417014103382826, 0.011683144606649876, -0.0194652508944273, -0.004380347207188606, 0.008514382876455784, -0.02272721193730831, -0.015044961124658585, -0.008973720483481884, 0.006294252350926399, 0.04247205704450607, -0.024764271453022957, -0.017934126779437065, 0.027773264795541763, -0.006713647395372391, 0.016682598739862442, 0.007402653340250254, -0.03147459030151367, 0.01666928455233574, 0.03014317899942398, 0.0012615133309736848, 0.006410751026123762, 0.016882309690117836, 0.03743932023644447, -0.011643202044069767, 0.003924338147044182, 0.033045656979084015, 0.005122609436511993, 0.013547122478485107, 0.013899946585297585, 0.02697441726922989, 0.004337076097726822, -0.01927885226905346, 0.02674807608127594, 0.004613344091922045, 0.026668192818760872, -0.0032636248506605625, 0.007236226927489042, 0.013254211284220219, -0.007981818169355392, 0.010651299729943275, -0.10140037536621094, -0.02491072751581669, 0.002488077152520418, 0.0029873568564653397, -0.030196435749530792, 0.037173036485910416, 0.016616027802228928, 0.017388246953487396, -0.012308908626437187, 0.024711016565561295, 0.004912911914288998, -0.03293914347887039, -0.007176313549280167, -0.01440588291734457, 0.015697352588176727, 0.005032739136368036, -0.028865022584795952, -0.01433931291103363, -0.017840927466750145, -0.011802971363067627, 0.002582940272986889, -0.02680133283138275, -0.011077351868152618, -0.011802971363067627, 0.011849571019411087, -0.006091212388128042, -0.036986637860536575, -0.004709871485829353, -0.0019804760813713074, 0.0014770356938242912, -0.013427294790744781, -0.03544219955801964, 0.005305678583681583, -0.016003578901290894, 0.006870088633149862, 0.020716778934001923, -0.014206171035766602, -0.0020453825127333403, 0.014685479924082756, -0.013520494103431702, 0.006067912559956312, 0.006320880725979805, -0.017161907628178596, -0.03320542722940445, 0.012695018202066422, -0.014898505993187428, -0.02294023707509041, 0.013087784871459007, 0.016962194815278053, -0.004892941098660231, -0.01181628555059433, -0.024804214015603065, -0.028572112321853638, -0.030675744637846947, -0.011396890506148338, -0.008973720483481884, -0.023486116901040077, 0.004167321138083935, 0.002569626085460186, 0.004310447722673416, -0.012548563070595264, 0.016203289851546288, -0.008674152195453644, 0.006700333207845688, 0.04018202796578407, -0.0009710990125313401, -0.02312663570046425, 0.006384123116731644, 0.014645537361502647, -0.037758857011795044, -0.007322768680751324, 0.017334990203380585, -0.032273437827825546, 0.009879080578684807, -0.03179413080215454, 0.0007518319762311876, -0.01905251294374466, -0.004094093572348356, 0.017241790890693665, -0.018772916868329048, -0.008394556120038033, -0.028412342071533203, -0.021795222535729408, -0.010218590497970581, 0.012408764101564884, 0.02226121723651886, -0.0071297138929367065, -0.009093547239899635, -0.007535794749855995, -0.03512266278266907, 0.014312684535980225, 0.009353172965347767, 0.029690498486161232, -0.019704904407262802, -0.004460231866687536, 0.002451463369652629, 0.00039796752389520407, -0.0069233449175953865, 0.034430328756570816, 0.026814647018909454, 9.657941700424999e-05, -0.013713548891246319, -0.06396105885505676, 0.017388246953487396, 0.0064540221355855465, 0.010538130067288876, -0.0010659621329978108, 0.015976950526237488, 0.021262656897306442, -0.02648179419338703, 0.01694888062775135, 0.019065827131271362, -0.02614894136786461, 0.010544787161052227, -0.0025862688198685646, -0.0017058722442016006, 0.012635104358196259, -0.0162565466016531, 0.012442049570381641, 0.010598043911159039, 0.011869542300701141, -0.020024443045258522, 0.01754801720380783, -0.008827264420688152, 0.0038477820344269276, 0.0028891651891171932, -0.031048540025949478, 0.010864325799047947, -0.020876547321677208, 0.0006174425361678004, -0.013334096409380436, -0.007309454493224621, 0.03110179677605629, -0.004506831523030996, -0.022141389548778534, 0.020596951246261597, -0.005405534524470568, -0.018653089180588722, -0.021555569022893906, 0.02729395590722561, 0.027746636420488358, -0.002436484908685088, -0.01571066677570343, -0.02345948852598667, -0.004876298364251852, -0.05184520408511162, -0.02335297502577305, -0.036107905209064484, -0.0030406133737415075, -0.015950322151184082, 0.023006808012723923, -0.007262855302542448, 0.040474940091371536, 0.028971536085009575, 0.0022550798021256924, -0.03168761730194092, -0.02321983315050602, -0.02761349454522133, 0.011077351868152618, -0.015351186506450176, 0.028971536085009575, -0.02116945944726467, 0.006770232692360878, 0.020370611920952797, 0.017148593440651894, -0.006850117351859808, 0.0052124797366559505, 0.013234240002930164, 0.0002781403891276568, -0.0005637699505314231, 0.013700234703719616, -0.018306922167539597, -0.01754801720380783, 0.000263161986367777, 0.004403647035360336, -0.019438622519373894, 0.03397764638066292, -0.014672165736556053, -0.006723633036017418, 0.010637985542416573, -0.010531472973525524, 0.021036317571997643, -0.011323663406074047, 0.011217149905860424, -0.020410552620887756, 0.02729395590722561, 0.02070346474647522, 0.0007064807577989995, -0.024537932127714157, -0.003474986646324396, -0.03608127683401108, -0.0006964951753616333, -0.019491879269480705, -0.0005496237426996231, -0.012002683244645596, -0.005838243756443262, 0.01202265452593565, -0.0064307223074138165, -0.009619454853236675, -0.0046399724669754505, -0.014898505993187428, 0.013107756152749062, -0.013400666415691376, -0.011103980243206024, -0.006593820173293352, -0.006493964232504368, -0.010358389467000961, 0.02098306082189083, -0.014445825479924679, -0.034190673381090164, -0.016096776351332664, 0.021315913647413254, 0.008627552539110184, 0.005012767855077982, -0.017388246953487396, 0.0012265637051314116, -0.020623579621315002, 0.0024081922601908445, -0.021409112960100174, -0.017880870029330254, -0.03182075917720795, 0.028865022584795952, -0.0018356849905103445, -0.0074159675277769566, -0.0021652095019817352, -0.004094093572348356, 0.017800984904170036, 0.017188536003232002, 0.009952308610081673, -0.013686920516192913, 0.028092803433537483, 0.014099658466875553, -0.03339182585477829, -0.031021911650896072, 0.012422078289091587, -0.009346515871584415, -0.01850663311779499, -0.029690498486161232, -0.0017408218700438738, 0.022966865450143814, 0.008627552539110184, 0.07967172563076019, 0.012868101708590984, -0.009745939634740353, -0.0033168813679367304, -0.009552884846925735, 0.017055394127964973, 0.020024443045258522, 0.0022001592442393303, -0.03328531235456467, -0.007975161075592041, 0.019718218594789505, 0.0021069601643830538, 0.01698882319033146, -0.012202395126223564, 0.020809976384043694, 0.0063741374760866165, -0.033232055604457855, -0.03142133355140686, 0.008840578608214855, -0.009100204333662987, 0.023978738114237785, -0.03008992224931717, 0.022381044924259186, 0.006127825938165188, -0.016203289851546288, -0.0056618317030370235, 0.027826521545648575, 0.005581947043538094, -0.013726863078773022, -0.045560937374830246, -0.0010809404775500298, 0.004723185673356056, -0.03746594861149788, -0.007975161075592041, -0.009546227753162384, -0.010584729723632336, 0.0005338132032193244, 0.009792539291083813, 0.004167321138083935, 0.02532346546649933, -0.008274728432297707, 0.011723087169229984, 0.0011525038862600923, -0.016296489164233208, -0.030302949249744415, -0.017055394127964973, -0.006989915389567614, -0.026721449568867683, -0.010757813230156898], 'QueryEmbedding': [-0.013914729468524456, 0.00927648600190878, -0.028559677302837372, -0.0015838316176086664, -0.0230018999427557, 0.020608404651284218, -0.017957979813218117, -0.007187248673290014, -0.005682861898094416, -0.053468260914087296, 0.017971502617001534, 0.018863990902900696, -0.002484773052856326, -0.022028274834156036, 0.0010547608835622668, 0.011386008001863956, -0.0004838546155951917, 0.00976329855620861, -0.00357672106474638, -0.017241282388567924, 0.014523245394229889, 0.012981671839952469, 0.009438756853342056, 0.01982409507036209, 0.006642964668571949, 0.010277156718075275, 0.004350888542830944, -0.03242713585495949, -0.019986364990472794, 0.022041797637939453, -0.005114913918077946, -0.02073010616004467, 0.007423893548548222, -0.04397541284561157, -0.014955967664718628, 0.026625949889421463, 0.003813366172835231, -0.016091864556074142, 0.01338058803230524, 0.026139136403799057, 0.01227173674851656, 0.0009727802244015038, -0.0017799088964238763, -0.0076943449676036835, 0.0127653107047081, 0.00871529895812273, -0.00785661581903696, 0.001626089564524591, 0.004114243201911449, -0.009702447801828384, 0.010845105163753033, 0.026788219809532166, -0.015916069969534874, -0.012934342958033085, -0.011960716918110847, 0.003962114453315735, 0.012927581556141376, 0.003220063168555498, -0.0025067473761737347, -0.021663164719939232, 0.012177078984677792, 0.023055989295244217, -0.019715914502739906, 0.007816048339009285, -0.022433951497077942, -0.01948603056371212, -0.019296715036034584, -0.01135220192372799, 0.005824849009513855, 0.002932708477601409, 0.013461722992360592, 0.036862537264823914, 0.0009609479457139969, -0.007295429240912199, -0.002207560231909156, 0.009668640792369843, 0.0038235080428421497, 0.006020926404744387, -0.007484745234251022, -0.014401542022824287, 0.021595552563667297, 0.0007800835301168263, -0.032778721302747726, 0.007843093015253544, 0.03456370159983635, -0.005287326872348785, -0.04916808009147644, 0.033508941531181335, -0.023867344483733177, -0.00878291204571724, 0.045679256319999695, 0.03150760009884834, 0.005155481398105621, -0.0013750768266618252, 0.008661208674311638, -0.007822809740900993, -0.0115212332457304, 0.03250826895236969, -0.010182498954236507, -0.01889103651046753, -0.03426620364189148, -0.0013336639385670424, 0.004580772016197443, -0.004327224101871252, -0.014996535144746304, 0.02201475203037262, -0.018688198179006577, -0.0055374945513904095, 0.0065618292428553104, -0.0014317026361823082, -0.016646290197968483, 0.026828788220882416, 0.033346667885780334, -0.010263633914291859, 0.014131090603768826, 0.006866087205708027, -0.01987818442285061, -0.02141975797712803, -0.02037852071225643, -0.010250112041831017, 0.013029000721871853, 0.018214907497167587, -0.007477983832359314, -0.002549005439504981, 0.026828788220882416, -0.018255475908517838, -0.01507767103612423, -0.023962002247571945, 0.00043990625999867916, -0.00023305312788579613, 0.058525703847408295, 0.001023489865474403, 0.008681492879986763, 0.011615891940891743, -0.014496199786663055, 0.041865892708301544, -0.027423782274127007, 0.03889092430472374, -0.01032448559999466, -0.007836331613361835, 0.017335940152406693, 0.01164969801902771, 0.0217172559350729, 0.001310844556428492, 0.0023529280442744493, 0.037160035222768784, 0.006548306904733181, 0.0010843414347618818, -0.01584845781326294, 0.006480693817138672, 0.01705196686089039, -0.012575994245707989, 0.007363041862845421, -0.009222395718097687, 0.005628771614283323, -0.03023647703230381, -0.0108180595561862, -0.0012871801154688, -0.001154489815235138, -0.03150760009884834, 0.00927648600190878, 0.010635505430400372, -0.003093288978561759, -0.02064897119998932, 0.016172999516129494, 0.04365087300539017, 0.02582811750471592, -0.020486701279878616, -0.004661907441914082, -0.018701720982789993, 0.007552357856184244, 0.0024425149895250797, -0.012988433241844177, 0.00365109508857131, -0.0059465523809194565, 0.0002987643820233643, 0.0013083091471344233, -0.03177805244922638, -0.007187248673290014, -0.009601027704775333, 0.014104044996201992, 0.006281236186623573, 0.019851138815283775, 0.0037051853723824024, -0.0028989019338041544, -0.00926972460001707, -0.0178227536380291, -0.017971502617001534, 0.001959082903340459, -0.021825436502695084, -0.011129079386591911, 0.03183213993906975, 0.002696063369512558, -0.0015762251568958163, -0.6235529780387878, -0.02883012965321541, -0.006845803465694189, -0.011277827434241772, 0.04397541284561157, -0.004127766005694866, 0.005476642865687609, 0.00897222850471735, -0.021866003051400185, 0.02762662060558796, 0.0010513801826164126, -0.008316383697092533, 0.009161544032394886, -0.018228430300951004, 0.009053363464772701, -0.008857286535203457, -0.015212896279990673, -0.007139919325709343, -0.008154112845659256, 0.044570405036211014, 0.008127067238092422, -0.003230205038562417, -0.020486701279878616, -0.005821468308568001, 0.018918082118034363, 0.013150704093277454, 0.019039785489439964, -0.009857957251369953, 0.011656459420919418, 0.014523245394229889, -0.042244523763656616, 0.024056660011410713, 0.010135170072317123, -0.002746772952377796, 0.03640276938676834, 0.021663164719939232, -0.028451496735215187, 0.013056046329438686, 0.01402291003614664, 0.017971502617001534, -0.04018909111618996, 0.007417132146656513, -0.0008088190224952996, -0.004486114252358675, 0.004803894553333521, 0.02480040118098259, -0.013576664961874485, -0.010966808535158634, 0.0007107803248800337, -0.01786332204937935, 0.009472563862800598, -0.02582811750471592, -0.025855163112282753, -0.016294702887535095, 0.02248804084956646, -0.0018204766092821956, 0.022934285923838615, -0.008505699224770069, 0.030398748815059662, 0.014834264293313026, -0.011548278853297234, 0.016903217881917953, -0.0044996365904808044, -0.01390120666474104, -0.02831627056002617, 0.013076329603791237, -0.01205537561327219, -0.026396065950393677, 0.018985694274306297, 0.016375837847590446, -0.018431268632411957, 0.010899195447564125, -0.0013843736378476024, 0.010094601660966873, -0.00820144172757864, 0.0009516511927358806, 0.03404984250664711, 0.00939818937331438, -0.012988433241844177, 0.00407029502093792, 0.003071314888074994, -0.012467813678085804, -0.016808560118079185, -0.019472507759928703, 0.004513159394264221, -0.012657130137085915, -0.038485247641801834, 0.001285489764995873, 0.00750502897426486, 0.006399558391422033, 0.0033096501138061285, 0.00983091164380312, 0.012623323127627373, -0.004300178959965706, -0.01739003136754036, 0.007789003197103739, -0.016159476712346077, 0.010128408670425415, -0.018404224887490273, -0.04018909111618996, 0.006916796788573265, 0.013069568201899529, -0.009878240525722504, 0.0039080241695046425, 0.014915400184690952, 0.004580772016197443, -0.00196415395475924, 0.0033840243704617023, 0.031669870018959045, -0.0281810462474823, 0.00017156766261905432, -0.01932375878095627, -0.0011916769435629249, 0.003089908277615905, -0.028289226815104485, -0.0231236033141613, 0.01438801921904087, -0.012717981822788715, -0.012278498150408268, -0.008519222028553486, -0.0023867343552410603, 0.03645686060190201, 0.014279838651418686, -0.014874831773340702, 0.014983012340962887, 0.03418507054448128, -0.016037773340940475, 0.01130487211048603, -0.0011257543228566647, 0.017849799245595932, 0.023326441645622253, 0.0005413255421444774, 0.009864718653261662, -0.0281810462474823, -0.002347856992855668, -0.015280509367585182, 0.010405621491372585, -0.004361030180007219, 0.010196021758019924, -0.030209431424736977, 0.008174396120011806, 0.014739606529474258, -0.0017663863254711032, 0.008742344565689564, -0.0019472507992759347, -0.027829458937048912, -0.025976866483688354, 0.007592925801873207, -0.01661924459040165, 0.011967478320002556, -0.02389439009130001, -0.020013410598039627, 0.01628118008375168, -0.007498267572373152, 0.024394724518060684, -0.007160203531384468, 0.007058783899992704, -0.028884219005703926, 0.0075996872037649155, -0.048248548060655594, -0.0005882320110686123, 0.022149978205561638, 0.009837673045694828, -0.004584152717143297, 0.0063150422647595406, -0.016632767394185066, -0.033779390156269073, 0.021730776876211166, 0.002545624738559127, -0.018945127725601196, 0.03112896718084812, -0.020743628963828087, 0.008059454150497913, 0.015131761319935322, 0.005747094284743071, -0.00638265535235405, -0.029371032491326332, 0.03258940577507019, 0.04356973618268967, -0.0019523217342793941, 0.004320462699979544, 0.018904559314250946, 0.020270340144634247, 0.0014409993309527636, 0.010371814481914043, -0.006575352046638727, -0.005480023566633463, 0.018525928258895874, -0.02839740738272667, 0.032995082437992096, -0.03191327676177025, 0.030642153695225716, -0.029911935329437256, -0.021906571462750435, -0.017619915306568146, 0.018039114773273468, -0.011507711373269558, 0.02407018281519413, -0.01778218522667885, -0.00903308019042015, -0.0102365892380476, 0.013137181289494038, -0.008735583163797855, -0.0021534699480980635, 0.010310962796211243, 0.013799787499010563, -0.01100737601518631, -0.013603710569441319, 0.010358292609453201, 0.008296099491417408, 0.015239941887557507, -0.0024273020680993795, -0.025463007390499115, -0.0014562122523784637, 0.00040863530011847615, 0.021392712369561195, -0.013333258219063282, 0.0030239857733249664, -0.003688282333314419, 0.02367802895605564, 0.025882208719849586, 0.0055848234333097935, 0.007133158389478922, -0.013421155512332916, -0.015726754441857338, 0.007633493281900883, -0.004418501164764166, -0.003701804904267192, 0.003265701700001955, -0.034076888114213943, -0.02235281653702259, 0.005202810745686293, 0.030561018735170364, 0.001087722135707736, -0.0005303384969010949, 0.020486701279878616, 0.038458202034235, -0.007248099893331528, 0.009952615015208721, 0.007275145035237074, 0.0025371729861944914, 0.03948591649532318, 3.380643829586916e-05, 0.003539533820003271, 0.02150089293718338, -0.011757878586649895, 0.015699708834290504, 0.0014257865259423852, -0.036943674087524414, 0.014969490468502045, -0.008593596518039703, -0.007897183299064636, -0.015334599651396275, -0.0011223737383261323, 0.010358292609453201, -0.027937639504671097, -0.03185918554663658, 0.011724072508513927, 0.016970831900835037, 0.021014081314206123, 0.014198703691363335, 0.0005142804002389312, 0.017444120720028877, -0.0035226307809352875, 0.009587505832314491, 0.03743048757314682, 0.003355288878083229, 0.019553642719984055, 0.002175444271415472, -0.03464483469724655, 0.028072865679860115, -0.01691674068570137, 0.028559677302837372, -0.022542132064700127, -0.006893132347613573, -0.015388689935207367, -0.0006114739226177335, 0.024273021146655083, -0.002807624638080597, 0.026152659207582474, -0.0021095217671245337, -0.05344121530652046, 0.018039114773273468, 0.024556996300816536, -0.007038500159978867, -0.006217003799974918, 0.003362050047144294, -0.01592959277331829, -0.014942444860935211, 0.009175066836178303, 0.016903217881917953, 0.018106726929545403, -0.009418473578989506, 0.01445563230663538, 0.007403609808534384, 0.0154157355427742, 0.04159544035792351, -0.010243350639939308, -0.006855945568531752, 0.01597016118466854, -0.02869490347802639, 0.0020689538214355707, -0.01214327197521925, 0.008512460626661777, 0.04573334753513336, -0.0052467589266598225, -0.0460037998855114, -0.01751173473894596, 0.02085180953145027, -0.011061466298997402, -0.02980375476181507, 0.014739606529474258, 0.0006934545235708356, 0.00933733768761158, -0.0013235219521448016, -0.00593302957713604, -0.009999943897128105, 0.03710594400763512, 0.0256928913295269, 0.008667970076203346, -0.00903308019042015, -0.03521278500556946, 0.01250838115811348, 0.010344769805669785, 0.004993210546672344, -0.01695730909705162, -0.045760393142700195, -0.0023394054733216763, -0.025679368525743484, -0.01618652231991291, -0.002621689112856984, -0.004300178959965706, 0.021866003051400185, 0.010696356184780598, -0.04776173457503319, -0.01863410882651806, 0.008884331211447716, -0.026287885382771492, 0.024908581748604774, 0.025165511295199394, 0.0015939734876155853, -0.01128458883613348, 0.006352229509502649, -0.009952615015208721, -0.012630084529519081, 0.02676117606461048, -0.0033857147209346294, -0.00023791279818397015, 0.015605051070451736, 0.013847116380929947, 0.05065556615591049, -0.00884376373142004, 0.022244635969400406, -0.014104044996201992, -0.03523983061313629, 0.01081129815429449, -0.0015889025526121259, 0.02286667376756668, 0.010872149839997292, 0.03264349699020386, -0.01438801921904087, 0.002101070014759898, 0.006544926203787327, 0.010202782228589058, 0.0281810462474823, 0.024002570658922195, 0.00854626763612032, -0.011102033779025078, 0.026531292125582695, 0.0027907213661819696, -0.009756538085639477, 0.010588175617158413, 0.006301519926637411, 0.00757940299808979, -0.012717981822788715, 0.00526704266667366, -0.009871479123830795, 0.038404110819101334, -0.00551382964476943, 0.02256917767226696, -0.03656504303216934, 0.01075044646859169, -0.010676072910428047, -0.05019579827785492, -0.007065545301884413, 0.012663891538977623, -0.0037220886442810297, -0.01772809587419033, -0.014712560921907425, -0.019932275637984276, -0.01220412366092205, -0.010067556984722614, -0.0064266035333275795, -0.0024306827690452337, -0.034022796899080276, -0.002234605373814702, -0.009350860491394997, 0.004256230313330889, 0.03764684870839119, 0.005243378225713968, 0.03023647703230381, 0.004266372416168451, -0.018958650529384613, 0.036646176129579544, -0.025719936937093735, -0.033508941531181335, 0.004888410679996014, -0.038350023329257965, -0.011203452944755554, -0.010757207870483398, -0.008411041460931301, 0.007917467504739761, 0.0048613655380904675, -0.021473849192261696, -0.01032448559999466, -0.012156794779002666, 0.018525928258895874, -0.00912097655236721, 0.0334818959236145, -0.003965495154261589, -0.011142601259052753, -0.0115820849314332, -0.0017714572604745626, -0.013096613809466362, 0.015104715712368488, -0.007139919325709343, -0.019337281584739685, -0.008593596518039703, -0.0007843093480914831, 0.014617903158068657, 0.006913416553288698, -0.019715914502739906, 0.012041852809488773, -0.00926972460001707, 0.016456972807645798, -0.015280509367585182, 0.016903217881917953, -0.02179839089512825, 0.008512460626661777, 0.011730833910405636, 0.0231641698628664, -0.007417132146656513, 0.0011249091476202011, -0.011791685596108437, -0.008762628771364689, -0.014293361455202103, 0.019540119916200638, -0.0034059984609484673, -0.03786320984363556, 0.025084376335144043, 0.006964126136153936, -0.005236617289483547, 0.009344099089503288, 0.021744299679994583, -0.009100692346692085, 0.017146624624729156, -0.01756582409143448, -0.025233125314116478, -0.014171658083796501, -0.0009296769858337939, -0.001864425023086369, 0.03221077471971512, -0.013982342556118965, -0.02132510021328926, -0.03253531455993652, -0.01597016118466854, -0.003637572517618537, 0.011047943495213985, -0.026409588754177094, -0.026707084849476814, 0.011413052678108215, -0.02501676231622696, 0.004361030180007219, 0.020932946354150772, 0.028938310220837593, 0.01177816279232502, -0.03161577880382538, -0.019580688327550888, -0.02804582007229328, -0.025233125314116478, 0.00939818937331438, -0.0034482565242797136, 0.021433280780911446, 0.038133662194013596, 0.0438401885330677, 0.008309622295200825, 0.022028274834156036, -0.009945853613317013, -0.02240690588951111, 0.021014081314206123, 0.005050681531429291, -0.0011933671776205301, -0.01183901447802782, 0.011054704897105694, 0.00673424219712615, -0.017592869699001312, 0.027559006586670876, -0.0005637223366647959, -0.013840354979038239, 0.011020898818969727, -0.03183213993906975, -0.033427804708480835, -0.008701777085661888, -0.025895731523633003, -0.017619915306568146, 0.0019523217342793941, 0.004053391981869936, 0.008634163998067379, -0.016375837847590446, -0.014577335678040981, 0.03104783222079277, -0.004645004402846098, 0.00976329855620861, 0.018255475908517838, 0.05014170706272125, 0.0036815209314227104, 0.01254894956946373, -0.009344099089503288, -0.0024425149895250797, -0.016849128529429436, 0.012968149036169052, -0.005219713784754276, -0.014469155110418797, -0.005037159193307161, -0.005936410278081894, 0.03956705331802368, 0.0075996872037649155, 0.008242009207606316, -0.017809230834245682, 0.0013978962088003755, -0.006409700494259596, -0.0016801799647510052, -0.008005363866686821, -0.00695060333237052, -0.022947808727622032, -0.030182387679815292, -0.010520563460886478, 0.009573983028531075, 0.012461052276194096, 0.008897854015231133, -0.002853263169527054, 0.01987818442285061, 0.01079101487994194, -0.04183884710073471, -0.0006372513598762453, -0.027261510491371155, 0.03212963789701462, -0.014658470638096333, 0.006632823031395674, 0.026964014396071434, 0.00504392059519887, -0.025476530194282532, -0.006139249075204134, -0.01515880599617958, -0.02869490347802639, 0.02676117606461048, 0.019797049462795258, 0.0007627577288076282, -0.010838343761861324, -0.002373211784288287, -0.004469210747629404, -0.02458404004573822, -0.011757878586649895, 0.0281810462474823, -0.01183901447802782, 0.00856655091047287, -0.013651039451360703, -0.01713310182094574, -0.0063387067057192326, 0.0006406320026144385, 0.00502025568857789, 0.007849854417145252, 0.015321076847612858, -0.011642936617136002, -0.01944546215236187, 0.002562528010457754, -0.05241350084543228, 0.014942444860935211, -0.007200771011412144, -0.005689623299986124, -0.006436745636165142, 0.024300066754221916, 0.007281906437128782, -0.009425234980881214, -0.01355638075619936, -0.002412089379504323, 0.020878855139017105, 0.0052230944857001305, 0.0025997150223702192, 0.0075996872037649155, -0.00912097655236721, -0.00961455050855875, 0.018945127725601196, 0.027991728857159615, -0.001334509113803506, -0.017268327996134758, -0.0006706351996399462, 0.02325882762670517, 0.021893048658967018, -0.011237259954214096, -0.02321826107800007, -0.015780843794345856, -0.026652995496988297, -0.007268384099006653, 0.014590858481824398, 0.0023427861742675304, 0.02444881573319435, 0.014915400184690952, 0.00043779335101135075, -0.025665847584605217, -0.020716585218906403, 0.007187248673290014, 0.006869467906653881, -0.016970831900835037, 0.0025388633366674185, 0.007768718991428614, 0.012305542826652527, -0.01158884633332491, -0.0011899865930899978, -0.030425792559981346, 0.002944540698081255, 0.0026487342547625303, -0.02513846568763256, -0.0036308113485574722, -0.0016421476611867547, -0.008918138220906258, -0.042974743992090225, 0.007383325602859259, -0.014563812874257565, 0.0025743602309376, 0.0014815670438110828, -0.008924899622797966, 0.004962784703820944, -0.011595607735216618, 0.012224407866597176, 0.013475245796144009, -0.00021298055071383715, -0.02132510021328926, 0.029019445180892944, 0.009107453748583794, 0.017335940152406693, -0.008154112845659256, 0.0041345274075865746, 0.016686856746673584, -0.012278498150408268, -0.02192009426653385, -0.004705856088548899, -0.009377905167639256, 0.02727503329515457, -0.0062203845009207726, -0.008762628771364689, -0.003914785571396351, -0.031074875965714455, -0.003380643669515848, -0.01970239169895649, 0.003115263069048524, -0.006784951779991388, -0.013941774144768715, -0.026030955836176872, -0.021338623017072678, 0.006964126136153936, 0.02899239957332611, 0.011636175215244293, -0.016118908300995827, 0.015997206792235374, 0.014171658083796501, 0.0003465159679763019, 0.02513846568763256, -0.00010965963156195357, -0.0019962701480835676, -0.012941104359924793, -0.010405621491372585, -0.05276508629322052, -0.0073089515790343285, -0.01150094997137785, 0.020053979009389877, -0.007004693616181612, -0.011690265499055386, -0.003975636791437864, 0.008383996784687042, -0.016200045123696327, -0.013211555778980255, 0.0065381648018956184, -0.0014333928702399135, 0.001937108812853694, -0.008059454150497913, -0.011358962394297123, 0.0054495977237820625, -0.008167634718120098, -0.01467199344187975, -0.04132498800754547, 0.030101250857114792, 0.00042955303797498345, 0.005848513450473547, 0.039594098925590515, -0.011629413813352585, -0.017836276441812515, -0.011981001123785973, -0.007200771011412144, 0.02286667376756668, 0.016592198982834816, 0.024083705618977547, 0.007160203531384468, 0.00897222850471735, 0.007849854417145252, 0.003867456456646323, 0.012285259552299976, -0.009621311910450459, -0.00037651919410564005, -0.03515869379043579, -0.0014055025530979037, -0.005578062031418085, 0.0007107803248800337, -0.0015787605661898851, -0.008965467102825642, 0.007450938690453768, 0.0004282853042241186, 0.016754470765590668, 0.007369803264737129, -0.012920820154249668, -0.0039553530514240265, 0.032697584480047226, 0.026030955836176872, 0.01644345000386238, -0.01778218522667885, 0.05406325310468674, 0.005256901029497385, 0.007248099893331528, 0.006091919727623463, -0.030561018735170364, -0.013542858883738518, -0.009837673045694828, 0.005828229710459709, -0.0058113266713917255, 0.0033062694128602743, -0.021744299679994583, -0.018444791436195374, 0.002486463403329253, -0.012589517049491405, -0.027829458937048912, -0.010358292609453201, -0.042893607169389725, 0.0154157355427742, 0.00039025305886752903, -0.0005797803751192987, -0.0004521610972005874, 0.008147351443767548, -0.0021686828695237637, -0.004114243201911449, -0.023110080510377884, 0.010344769805669785, -0.030344657599925995, -0.03935069218277931, 0.021135784685611725, -0.016010727733373642, -0.0020013409666717052, -0.026179704815149307, -0.014036432839930058, -0.000606402987614274, 0.03429324924945831, 0.20943763852119446, 0.004056772217154503, -0.017444120720028877, 0.022515086457133293, 0.010980330407619476, 0.008532744832336903, 0.0018931605154648423, 0.0044523077085614204, 0.01423927117139101, 0.024976195767521858, 0.004036488477140665, 0.017038444057106972, 0.03226486220955849, 0.006649726070463657, 0.021527938544750214, 0.016592198982834816, -0.035861868411302567, -0.017917411401867867, -0.028451496735215187, -0.008559789508581161, 0.028072865679860115, 0.008749105967581272, -0.00402634683996439, -0.013056046329438686, 0.03304917365312576, 0.007991841994225979, -0.0012271736050024629, -0.007045261561870575, 0.03486119583249092, -0.020229771733283997, -0.012731503695249557, 0.004489494953304529, -0.001937108812853694, 0.00869501568377018, 0.022880196571350098, -0.01699787564575672, -0.0062913778237998486, -0.00695060333237052, 0.010919478721916676, -0.004178475588560104, 0.009736253879964352, -0.020148636773228645, 0.011811968870460987, -0.0021669925190508366, -0.014131090603768826, 0.025449486449360847, -0.0034262824337929487, 0.00750502897426486, 0.010709878988564014, -0.026869356632232666, -0.009966137818992138, 0.007897183299064636, 0.016091864556074142, 0.028424452990293503, -0.01683560572564602, -0.0072616226971149445, 0.026869356632232666, -0.008059454150497913, -0.015483347699046135, 0.012062137015163898, -0.017065489664673805, 0.03551028296351433, -0.011940433643758297, -0.00040652239113114774, 0.0032454179599881172, -0.010081079788506031, -0.011487427167594433, -0.00750502897426486, 0.004046630579978228, -0.01995931938290596, 0.004087198060005903, -0.03767389431595802, -0.01038533728569746, -0.0030222954228520393, 0.0034059984609484673, -0.005665958859026432, -0.0011350511340424418, 0.02393495664000511, 0.02033795230090618, 0.003637572517618537, 0.008580073714256287, -0.0179444570094347, -0.007978319190442562, -0.008302860893309116, -0.007085829041898251, 0.0028904504142701626, -0.015456303022801876, -0.004506397992372513, -0.014077000319957733, 0.0014367735711857677, 0.014171658083796501, -0.0255711879581213, -0.00875586736947298, -0.006991171278059483, 0.0179444570094347, 0.036375727504491806, 0.007484745234251022, -0.012677413411438465, -0.02480040118098259, -0.03150760009884834, -0.022460997104644775, 0.06636879593133926, 0.00854626763612032, 0.006129106972366571, -0.015523916110396385, 0.01122373715043068, 0.014360974542796612, 0.004928978625684977, -0.007890421897172928, -0.0009322125115431845, -0.003221753519028425, -0.019851138815283775, -0.01871524378657341, -0.015645619481801987, -0.01905330829322338, -0.005206191446632147, -0.002795792417600751, -0.0037930821999907494, 0.016727425158023834, -0.0027873406652361155, 0.0032454179599881172, -0.023069512099027634, 0.01812024973332882, 0.018079683184623718, -0.028343316167593002, 0.009215634316205978, -0.015740277245640755, -0.011906626634299755, -0.001614257344044745, -0.050898972898721695, 0.0022379860747605562, -0.006375893950462341, -0.00025777408154681325, -0.004060152918100357, 0.013306213542819023, 0.01683560572564602, 0.013015477918088436, 0.008214964531362057, -0.027721278369426727, -0.021446803584694862, 0.012339349836111069, -0.005209571681916714, 0.01004727277904749, -0.0026014053728431463, 0.006845803465694189, -0.013651039451360703, 0.011230498552322388, 0.01683560572564602, -0.01060169842094183, -0.027721278369426727, -0.029046490788459778, -0.024340635165572166, 0.01207565888762474, 0.014198703691363335, 0.0205137450248003, 0.01467199344187975, -0.004337365739047527, -0.033292580395936966, 0.016862651333212852, -0.010277156718075275, -0.0409463569521904, -0.024354157969355583, 0.043515644967556, -0.00596345541998744, -0.01687617413699627, -0.026747653260827065, -0.17200714349746704, 0.0051115332171320915, 0.020324429497122765, -0.029452167451381683, 0.020703062415122986, 0.005581442732363939, 0.055361419916152954, 0.023407576605677605, -0.004330604337155819, 0.0018441411666572094, 0.017308896407485008, 0.002707895589992404, -0.04116271808743477, -0.0022768634371459484, 0.014401542022824287, -0.01845831423997879, -0.005432694219052792, 0.002337715122848749, 0.035050515085458755, 0.00933733768761158, 0.046571746468544006, -0.0050405398942530155, -0.0042528496123850346, 0.006541545502841473, 0.02758605219423771, 0.012197362259030342, -0.008789673447608948, 0.0050405398942530155, -0.004665288142859936, -0.042379748076200485, 0.0026893019676208496, 0.006997932214289904, 0.00013850074901711196, -0.0280999094247818, 0.007863377220928669, 0.02419188618659973, -0.0044759721495211124, -0.016389360651373863, -0.007525312714278698, 0.012258213944733143, 0.007755196653306484, 0.01460438035428524, 0.04173066467046738, 0.016497541218996048, 0.02877603843808174, 0.018255475908517838, 0.01567266322672367, -0.008451608940958977, 0.025111421942710876, -0.019066831097006798, -0.004178475588560104, -0.028965355828404427, 0.008397518657147884, -0.0059296488761901855, 0.009729492478072643, 0.028018774464726448, 0.013887683860957623, 0.016538109630346298, -0.0140499547123909, -0.005077726673334837, 0.012717981822788715, -0.016903217881917953, -0.016970831900835037, -0.011331917718052864, -0.019905230030417442, -0.006031068507581949, -0.009573983028531075, 0.002968205139040947, -0.014617903158068657, 0.014266316778957844, -0.02728855609893799, 0.010797776281833649, -0.011149362660944462, 0.001749483053572476, 0.021054649725556374, 0.010919478721916676, -0.008343428373336792, 0.019080352038145065, 0.022501563653349876, -0.01644345000386238, -0.030939651653170586, 0.04635538533329964, -0.000487235258333385, 0.008093261159956455, -0.005392126739025116, 0.029776709154248238, 0.004864746239036322, 0.003084837459027767, -0.005280565470457077, 0.008525983430445194, 0.027464348822832108, -0.03537505492568016, -0.02367802895605564, -0.0076064481399953365, 0.028640814125537872, 0.01580788940191269, -0.02029738388955593, -0.010743685998022556, 0.016456972807645798, 0.006680151913315058, 0.020189203321933746, -0.02317769266664982, -0.03675435855984688, 0.029830800369381905, 0.0022701022680848837, 0.014658470638096333, 0.0059938812628388405, 0.03267053887248039, 0.02090590074658394, -0.017538780346512794, -0.013461722992360592, 0.028208089992403984, -0.0006300674867816269, 0.028018774464726448, 0.02021624892950058, 0.017362985759973526, -0.01764696091413498, -0.014726083725690842, -0.005405649077147245, 0.032183729112148285, 0.024124274030327797, -0.025517098605632782, 0.009533415548503399, 0.0032352760899811983, 0.014766651205718517, 0.016037773340940475, -0.05168328061699867, -0.04497608169913292, 0.02899239957332611, 0.011636175215244293, -0.021784868091344833, 0.023353487253189087, -0.0017300443723797798, 0.02252860926091671, -0.02697753719985485, 0.016335269436240196, 0.008397518657147884, -0.01390120666474104, -0.011791685596108437, -0.02488153800368309, 0.01816081814467907, 0.024205408990383148, 0.00340430811047554, -0.022974854335188866, -0.001172238145954907, 0.006724100094288588, 0.0067646680399775505, -0.000937283446546644, 0.018525928258895874, -0.040919311344623566, -0.021379191428422928, 0.021554984152317047, -0.020270340144634247, 0.00968216359615326, 0.00526704266667366, 0.027680709958076477, 0.004486114252358675, -0.013137181289494038, 0.006507738959044218, -0.0044286432676017284, -0.01486130990087986, -0.014780174009501934, -0.03780911862850189, 0.013083091005682945, 0.00106828345451504, -0.022001229226589203, -0.001081806025467813, 0.0016776444390416145, 0.013373826630413532, -0.034320294857025146, -0.019837617874145508, -0.004178475588560104, -0.014415064826607704, 0.03037170320749283, 0.02150089293718338, -0.01235287170857191, -0.0022447474766522646, -0.011717311106622219, 0.003887740196660161, -0.03258940577507019, -0.01559152826666832, 0.014577335678040981, 0.006815377622842789, 0.007944513112306595, -0.015578006394207478, -0.0015069219516590238, -0.011534756049513817, -0.000835441576782614, 0.019039785489439964, 0.022880196571350098, 0.02543596364557743, 0.019513076171278954, -0.014252793975174427, -0.026964014396071434, 0.004601056221872568, -0.019350804388523102, -0.008492177352309227, 0.022596223279833794, -0.04851899668574333, -0.013137181289494038, -0.010804536752402782, 0.02021624892950058, -0.030696244910359383, -0.015348122455179691, 0.008309622295200825, -0.02620675042271614, -0.004999971948564053, -0.022379860281944275, -0.030479883775115013, -0.034022796899080276, 0.026436634361743927, 0.016172999516129494, 0.0019016120349988341, 0.0018914701649919152, 0.0010437737219035625, -0.029316941276192665, -0.0008493867353536189, 0.00014167009794618934, 0.05011466145515442, -0.0334818959236145, -0.012210885062813759, 0.00048808043356984854, 0.02419188618659973, 0.003901262767612934, 0.019513076171278954, -0.0011147672776132822, -0.002853263169527054, -0.010439427569508553, -0.07729503512382507, 0.004976307507604361, -0.019418416544795036, 0.014631425961852074, 0.001669192803092301, 0.012231169268488884, 0.004874888341873884, -0.0121229887008667, -0.004256230313330889, 0.010405621491372585, -0.03161577880382538, 0.01235963311046362, -0.015118238516151905, -0.004327224101871252, -0.0077078677713871, 0.0042291851714253426, -0.0048850299790501595, 0.0012685864930972457, 0.010141931474208832, -0.02193361707031727, -0.01409052312374115, -0.002172063570469618, 0.024043137207627296, 0.017849799245595932, -0.005872177891433239, 0.011169646866619587, -0.009918808937072754, 0.0019066830864176154, -0.01966182328760624, 0.0015618574107065797, 0.03729525953531265, -0.012001285329461098, -0.004634862300008535, 0.03221077471971512, -0.016930263489484787, -0.023191215470433235, 0.005452978424727917, 0.0023563087452203035, 0.05311667174100876, -0.00035982727422378957, -0.026842311024665833, -0.027721278369426727, -0.013887683860957623, -0.0017444121185690165, -0.008309622295200825, -0.00026052084285765886, 0.020270340144634247, 0.0037558951880782843, 0.0020317668095231056, 0.012515142560005188, 0.009837673045694828, 0.011176408268511295, 0.004033107776194811, -0.024773357436060905, 0.0035868629347532988, -0.02527369186282158, 0.021811913698911667, -0.009431995451450348, 0.03602413833141327, -0.013678084127604961, 0.015645619481801987, 0.028965355828404427, 0.057281628251075745, 0.014847787097096443, -0.0022041797637939453, 0.009851195849478245, -0.0019540120847523212, -0.015456303022801876, 0.04603084549307823, -0.02073010616004467, -0.013711891137063503, -0.011852536350488663, 0.006997932214289904, -0.008776150643825531, 0.026747653260827065, -0.01751173473894596, -0.0006938771111890674, 0.005287326872348785, -0.009770059958100319, 0.015997206792235374, 0.007640254683792591, 0.021135784685611725, -0.026355497539043427, 0.01863410882651806, 0.03799843415617943, 0.034834153950214386, 0.002062192652374506, -0.009634834714233875, -0.006108823232352734, -0.01592959277331829, -0.009357621893286705, 0.01479369681328535, -0.022623267024755478, -0.008634163998067379, 0.0010927930707111955, 0.00413114670664072, -0.0010868769604712725, -0.00897222850471735, -0.009296770207583904, 0.00743065495043993, -0.0027146569918841124, 0.0025067473761737347, -0.013049284927546978, -0.014807219617068768, -0.032913945615291595, 0.02847854234278202, -0.031669870018959045, -0.028938310220837593, -0.0029276374261826277, -0.007775480393320322, 0.01845831423997879, 0.004242707975208759, 0.03253531455993652, 0.0054969266057014465, -0.01310337521135807, -0.0004132836766075343, -0.018309565261006355, -0.02594982087612152, -0.031210102140903473, 0.02260974422097206, -0.010540846735239029, 0.014360974542796612, -0.0026487342547625303, 0.018607063218951225, 0.00801212526857853, 0.044002458453178406, 0.011656459420919418, -0.0032352760899811983, 0.03296803683042526, -0.007146680727601051, -0.006578732747584581, 0.0016463734209537506, -0.010703117586672306, -0.009972899220883846, -0.01695730909705162, -0.009222395718097687, -0.013238600455224514, 0.015104715712368488, -0.019648300483822823, 0.0591747872531414, -0.01235963311046362, -0.02132510021328926, -0.009431995451450348, 0.013116897083818913, 0.017660481855273247, 0.019066831097006798, 0.01618652231991291, -0.03126419335603714, -0.052440546452999115, 0.05928296595811844, -0.01390120666474104, 0.020892377942800522, -0.042677246034145355, 0.0121229887008667, 0.008796434849500656, -0.026220273226499557, -0.0068998937495052814, 0.013441439718008041, -0.009601027704775333, 0.018174340948462486, -0.0065381648018956184, 0.0154157355427742, 0.005787661764770746, -0.013089852407574654, -0.006771429441869259, 0.021568506956100464, 0.015943115577101707, -0.0030087728518992662, -0.04962784796953201, 0.020108068361878395, 0.01374569721519947, -0.033563029021024704, -0.016294702887535095, 0.012893774546682835, -0.031453508883714676, 0.0035091082099825144, -0.010202782228589058, 0.01355638075619936, 0.008607118390500546, 0.010615221224725246, 0.008458370342850685, -0.006463790778070688, -0.010885672643780708, -0.0075591192580759525, -0.002469560131430626, -0.01893160492181778, 0.002569289179518819, -0.002359689213335514], 'Id': 'V2hhdCBhcmUgdGhlIGRpZmZlcmVudCBwcm9kdWN0IGNhdGVnb3JpZXMgd2UgaGF2ZT8='}\n", + "INFO:azure.core.pipeline.policies.http_logging_policy:Request URL: 'https://open-ai-vector-db.search.windows.net/indexes('text-2-sql-query-cache-index')/docs/search.index?api-version=REDACTED'\n", + "Request method: 'POST'\n", + "Request headers:\n", + " 'Content-Type': 'application/json'\n", + " 'Content-Length': '69870'\n", + " 'api-key': 'REDACTED'\n", + " 'Accept': 'application/json;odata.metadata=none'\n", + " 'x-ms-client-request-id': '42d1cf96-7141-11ef-99b1-0242ac110002'\n", + " 'User-Agent': 'azsdk-python-search-documents/11.6.0b4 Python/3.12.3 (Linux-5.15.153.1-microsoft-standard-WSL2-x86_64-with-glibc2.36)'\n", + "A body is sent with the request\n", + "INFO:azure.core.pipeline.policies.http_logging_policy:Response status: 200\n", + "Response headers:\n", + " 'Transfer-Encoding': 'chunked'\n", + " 'Content-Type': 'application/json; odata.metadata=none; odata.streaming=true; charset=utf-8'\n", + " 'Content-Encoding': 'REDACTED'\n", + " 'Vary': 'REDACTED'\n", + " 'Server': 'Microsoft-IIS/10.0'\n", + " 'Strict-Transport-Security': 'REDACTED'\n", + " 'Preference-Applied': 'REDACTED'\n", + " 'OData-Version': 'REDACTED'\n", + " 'request-id': '42d1cf96-7141-11ef-99b1-0242ac110002'\n", + " 'elapsed-time': 'REDACTED'\n", + " 'Strict-Transport-Security': 'REDACTED'\n", + " 'Date': 'Thu, 12 Sep 2024 19:57:38 GMT'\n" + ] } ], "source": [ @@ -571,14 +661,40 @@ }, { "cell_type": "code", - "execution_count": 11, + "execution_count": 12, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ - "INFO:root:Question: What is the top performing product by quantity of units sold?\n", + "INFO:httpx:HTTP Request: POST https://open-ai-gpt-001.openai.azure.com/openai/deployments/text-embedding-ada-002/embeddings?api-version=2023-03-15-preview \"HTTP/1.1 200 OK\"\n", + "INFO:azure.core.pipeline.policies.http_logging_policy:Request URL: 'https://open-ai-vector-db.search.windows.net/indexes('text-2-sql-query-cache-index')/docs/search.post.search?api-version=REDACTED'\n", + "Request method: 'POST'\n", + "Request headers:\n", + " 'Content-Type': 'application/json'\n", + " 'Content-Length': '34709'\n", + " 'api-key': 'REDACTED'\n", + " 'Accept': 'application/json;odata.metadata=none'\n", + " 'x-ms-client-request-id': '56c2da5e-7141-11ef-99b1-0242ac110002'\n", + " 'User-Agent': 'azsdk-python-search-documents/11.6.0b4 Python/3.12.3 (Linux-5.15.153.1-microsoft-standard-WSL2-x86_64-with-glibc2.36)'\n", + "A body is sent with the request\n", + "INFO:azure.core.pipeline.policies.http_logging_policy:Response status: 200\n", + "Response headers:\n", + " 'Transfer-Encoding': 'chunked'\n", + " 'Content-Type': 'application/json; odata.metadata=none; odata.streaming=true; charset=utf-8'\n", + " 'Content-Encoding': 'REDACTED'\n", + " 'Vary': 'REDACTED'\n", + " 'Server': 'Microsoft-IIS/10.0'\n", + " 'Strict-Transport-Security': 'REDACTED'\n", + " 'Preference-Applied': 'REDACTED'\n", + " 'OData-Version': 'REDACTED'\n", + " 'request-id': '56c2da5e-7141-11ef-99b1-0242ac110002'\n", + " 'elapsed-time': 'REDACTED'\n", + " 'Strict-Transport-Security': 'REDACTED'\n", + " 'Date': 'Thu, 12 Sep 2024 19:58:11 GMT'\n", + "INFO:root:Results: [{'Question': 'What are the different product categories we have?', 'Query': 'SELECT DISTINCT ProductCategoryName FROM SalesLT.vGetAllCategories;', 'Schemas': [{'Entity': 'vGetAllCategories', 'Columns': [{'Name': 'ProductCategoryID', 'Definition': 'A unique identifier for each product category. This ID is used to reference specific categories.', 'Type': 'INT', 'AllowedValues': None, 'SampleValues': None}, {'Name': 'ParentProductCategoryName', 'Definition': 'The name of the parent product category. This represents the top-level category under which subcategories are grouped.', 'Type': 'NVARCHAR(50)', 'AllowedValues': None, 'SampleValues': None}, {'Name': 'ProductCategoryName', 'Definition': 'The name of the product category. This can refer to either a top-level category or a subcategory, depending on the context.', 'Type': 'NVARCHAR(50)', 'AllowedValues': None, 'SampleValues': None}]}], '@search.score': 0.05000000447034836, '@search.reranker_score': 2.3059513568878174, '@search.highlights': None, '@search.captions': None}]\n", + "INFO:root:Question: How many different product categories do we have?\n", "INFO:semantic_kernel.functions.kernel_function:Function ChatBot-Chat invoking.\n", "INFO:semantic_kernel.contents.chat_history:Could not parse prompt \n", "As a senior analyst, your primary responsibility is to provide precise and thorough answers to the user's queries. Utilize all the provided functions to craft your responses. You must deliver detailed and accurate final answers with clear explanations and actionable insights.\n", @@ -596,7 +712,14 @@ "\n", "\n", " [SQL DATABASE INFORMATION]\n", - " Use the 'GetEntitySchema()' function to search for the most relevant schemas for the data that you wish to obtain. Use the 'RunSQLQuery()' function to run the SQL query against the database.\n", + " First look at the cached queries, SQL templates and schemas to see if you can use them to formulate a SQL query. If you can't find a suitable query, use the 'GetEntitySchema()' function to search for the most relevant schemas for the data that you wish to obtain.\n", + "\n", + " [BEGIN QUERY CACHE]\n", + " [{'Question': 'What are the different product categories we have?', 'Query': 'SELECT DISTINCT ProductCategoryName FROM SalesLT.vGetAllCategories;', 'Schemas': [{'Entity': 'vGetAllCategories', 'Columns': [{'Name': 'ProductCategoryID', 'Definition': 'A unique identifier for each product category. This ID is used to reference specific categories.', 'Type': 'INT', 'AllowedValues': None, 'SampleValues': None}, {'Name': 'ParentProductCategoryName', 'Definition': 'The name of the parent product category. This represents the top-level category under which subcategories are grouped.', 'Type': 'NVARCHAR(50)', 'AllowedValues': None, 'SampleValues': None}, {'Name': 'ProductCategoryName', 'Definition': 'The name of the product category. This can refer to either a top-level category or a subcategory, depending on the context.', 'Type': 'NVARCHAR(50)', 'AllowedValues': None, 'SampleValues': None}]}], '@search.score': 0.05000000447034836, '@search.reranker_score': 2.3059513568878174, '@search.highlights': None, '@search.captions': None}]\n", + " [END QUERY CACHE]\n", + " \n", + "\n", + " Use the 'RunSQLQuery()' function to run the SQL query against the database.\n", "\n", " Output corresponding text values in the answer for columns where there is an ID. For example, if the column is 'ProductID', output the corresponding 'ProductModel' in the response. Do not include the ID in the response.\n", " If a user is asking for a comparison, always compare the relevant values in the database.\n", @@ -604,13 +727,11 @@ " The target database engine is Microsoft TSQL Server, SQL queries must be able compatible to run on Microsoft TSQL Server. \n", " The following Microsoft TSQL Server Syntax rules must be adhered to.\n", " Use TOP X to limit the number of rows returned instead of LIMIT X. NEVER USE LIMIT X as it produces a syntax error.\n", - " Always generate the SQL query based on the GetEntitySchema() function output, do not use the chat history data to generate the SQL query.\n", - " Only use the column names obtained from GetEntitySchema() when constructing a SQL query, do not make up column names.\n", " You must only provide SELECT SQL queries.\n", - " For a given entity, use the 'SelectFromEntity' property returned from 'GetEntitySchema()' function in the SELECT FROM part of the SQL query. If the property is {'SelectFromEntity': 'test_schema.test_table'}, the select statement will be formulated from 'SELECT <VALUES> FROM test_schema.test_table WHERE <CONDITION>.\n", + " For a given entity, use the 'SelectFromEntity' property returned in the schema in the SELECT FROM part of the SQL query. If the property is {'SelectFromEntity': 'test_schema.test_table'}, the select statement will be formulated from 'SELECT <VALUES> FROM test_schema.test_table WHERE <CONDITION>.\n", "\n", " If you don't know how the value is formatted in a column, run a query against the column to get the unique values that might match your query.\n", - " Some columns returned from 'GetEntitySchema()' may have the properties 'AllowedValues' or 'SampleValues'. Use these values to determine the possible values that can be used in the SQL query.\n", + " Some columns in the schema may have the properties 'AllowedValues' or 'SampleValues'. Use these values to determine the possible values that can be used in the SQL query.\n", "\n", " The source title to cite is the 'EntityName' property. The source reference is the SQL query used. The source chunk is the result of the SQL query used to answer the user query in Markdown table format. e.g. { 'title': "vProductAndDescription", 'chunk': '| ProductID | Name | ProductModel | Culture | Description |\\n|-----------|-------------------|--------------|---------|----------------------------------|\\n| 101 | Mountain Bike | MT-100 | en | A durable bike for mountain use. |\\n| 102 | Road Bike | RB-200 | en | Lightweight bike for road use. |\\n| 103 | Hybrid Bike | HB-300 | fr | V\u00e9lo hybride pour usage mixte. |\\n', 'reference': 'SELECT ProductID, Name, ProductModel, Culture, Description FROM vProductAndDescription WHERE Culture = "en";' }\n", " [END SQL DATABASE INFORMATION]\n", @@ -620,10 +741,11 @@ "\n", "[RESPONSE OUTPUT REQUIREMENTS]\n", "\n", - " The answer MUST be returned in JSON format as { \"answer\": \"\", \"sources\": [ {\"title\": , \"chunk\": , \"reference\": \"\"}, {\"title\": , \"chunk\": , \"reference\": \"\"} ] }.\n", + " The answer MUST be returned in JSON format as { \"answer\": \"\", \"sources\": [ {\"title\": , \"chunk\": , \"reference\": \"\"}, {\"title\": , \"chunk\": , \"reference\": \"\"} ], \"schemas\": [ ] }.\n", "\n", " The 'answer' property MUST meet the requirements in the ANSWER PROPERTY REQUIREMENTS.\n", " The 'sources' property MUST meet the requirements in the SOURCES PROPERTY REQUIREMENTS.\n", + " The 'schemas' property MUST meet the requirements in the SCHEMAS PROPERTY REQUIREMENTS.\n", "\n", " Do NOT return anything outside of the provided JSON property. Ensure that this is valid JSON returned.\n", "\n", @@ -666,6 +788,15 @@ " Citations should be embedded within the text, not as a separate list at the end of the 'answer' property.\n", " [END ANSWER PROPERTY REQUIREMENTS]\n", "\n", + " [SCHEMAS PROPERTY REQUIREMENTS]\n", + " 1. Inclusion Criteria:\n", + " If you used a schema obtained from 'GetEntitySchemas' function, it must be returned in the 'schemas' property. The 'schemas' property should contain a list of all the schemas used to create the SQL query.\n", + "\n", + " 3. Schema Format:\n", + " Each schema entry should be formatted as: {\"Entity\": \"\", \"Columns\", [ {\"Name\": \"\", \"Definition\": , \"Type\": \"\" } ]}. This is the same format as the 'GetEntitySchemas' function output. Simply copy the schema from the function output to the 'schemas' property and remove the not needed properties.\n", + "\n", + " [END SCHEMAS PROPERTY REQUIREMENTS]\n", + "\n", " [SOURCES PROPERTY REQUIREMENTS]\n", " 1. Reference Inclusion:\n", " Include all corresponding references for all cited content in the 'answer' property.\n", @@ -686,34 +817,24 @@ "[END RESPONSE OUTPUT REQUIREMENTS]\n", "\n", "What are the different product categories we have?\n", - "What is the top performing product by quantity of units sold? as xml, treating as text, error was: not well-formed (invalid token): line 41, column 78\n", + "How many different product categories do we have? as xml, treating as text, error was: not well-formed (invalid token): line 46, column 78\n", "INFO:httpx:HTTP Request: POST https://open-ai-gpt-001.openai.azure.com/openai/deployments/gpt-4o/chat/completions?api-version=2024-02-01 \"HTTP/1.1 200 OK\"\n", - "INFO:semantic_kernel.connectors.ai.open_ai.services.open_ai_handler:OpenAI usage: CompletionUsage(completion_tokens=51, prompt_tokens=1847, total_tokens=1898)\n", + "INFO:semantic_kernel.connectors.ai.open_ai.services.open_ai_handler:OpenAI usage: CompletionUsage(completion_tokens=71, prompt_tokens=2270, total_tokens=2341)\n", "INFO:semantic_kernel.connectors.ai.open_ai.services.open_ai_chat_completion_base:processing 2 tool calls in parallel.\n", - "INFO:semantic_kernel.kernel:Calling SQL-GetEntitySchema function with args: {\"text\": \"product sales\"}\n", + "INFO:semantic_kernel.kernel:Calling SQL-GetEntitySchema function with args: {\"text\": \"product categories\"}\n", "INFO:semantic_kernel.functions.kernel_function:Function SQL-GetEntitySchema invoking.\n", - "INFO:semantic_kernel.kernel:Calling SQL-GetEntitySchema function with args: {\"text\": \"products\"}\n", - "INFO:semantic_kernel.functions.kernel_function:Function SQL-GetEntitySchema invoking.\n", - "INFO:httpx:HTTP Request: POST https://open-ai-gpt-001.openai.azure.com/openai/deployments/text-embedding-ada-002/embeddings?api-version=2023-03-15-preview \"HTTP/1.1 200 OK\"\n", - "INFO:azure.core.pipeline.policies.http_logging_policy:Request URL: 'https://open-ai-vector-db.search.windows.net/indexes('text-2-sql-index')/docs/search.post.search?api-version=REDACTED'\n", - "Request method: 'POST'\n", - "Request headers:\n", - " 'Content-Type': 'application/json'\n", - " 'Content-Length': '34711'\n", - " 'api-key': 'REDACTED'\n", - " 'Accept': 'application/json;odata.metadata=none'\n", - " 'x-ms-client-request-id': '48f29234-706a-11ef-ae73-0242ac110002'\n", - " 'User-Agent': 'azsdk-python-search-documents/11.6.0b4 Python/3.12.3 (Linux-5.15.153.1-microsoft-standard-WSL2-x86_64-with-glibc2.36)'\n", - "A body is sent with the request\n", + "INFO:semantic_kernel.kernel:Calling SQL-RunSQLQuery function with args: {\"sql_query\": \"SELECT COUNT(DISTINCT ProductCategoryName) AS CategoryCount FROM SalesLT.vGetAllCategories;\"}\n", + "INFO:semantic_kernel.functions.kernel_function:Function SQL-RunSQLQuery invoking.\n", + "INFO:root:Executing SQL Query\n", "INFO:httpx:HTTP Request: POST https://open-ai-gpt-001.openai.azure.com/openai/deployments/text-embedding-ada-002/embeddings?api-version=2023-03-15-preview \"HTTP/1.1 200 OK\"\n", "INFO:azure.core.pipeline.policies.http_logging_policy:Request URL: 'https://open-ai-vector-db.search.windows.net/indexes('text-2-sql-index')/docs/search.post.search?api-version=REDACTED'\n", "Request method: 'POST'\n", "Request headers:\n", " 'Content-Type': 'application/json'\n", - " 'Content-Length': '34720'\n", + " 'Content-Length': '34744'\n", " 'api-key': 'REDACTED'\n", " 'Accept': 'application/json;odata.metadata=none'\n", - " 'x-ms-client-request-id': '48f7c98e-706a-11ef-ae73-0242ac110002'\n", + " 'x-ms-client-request-id': '578d0e78-7141-11ef-99b1-0242ac110002'\n", " 'User-Agent': 'azsdk-python-search-documents/11.6.0b4 Python/3.12.3 (Linux-5.15.153.1-microsoft-standard-WSL2-x86_64-with-glibc2.36)'\n", "A body is sent with the request\n", "INFO:azure.core.pipeline.policies.http_logging_policy:Response status: 200\n", @@ -726,56 +847,58 @@ " 'Strict-Transport-Security': 'REDACTED'\n", " 'Preference-Applied': 'REDACTED'\n", " 'OData-Version': 'REDACTED'\n", - " 'request-id': '48f29234-706a-11ef-ae73-0242ac110002'\n", + " 'request-id': '578d0e78-7141-11ef-99b1-0242ac110002'\n", " 'elapsed-time': 'REDACTED'\n", " 'Strict-Transport-Security': 'REDACTED'\n", - " 'Date': 'Wed, 11 Sep 2024 18:18:48 GMT'\n", + " 'Date': 'Thu, 12 Sep 2024 19:58:12 GMT'\n", + "INFO:root:Results: [{'Description': 'This view provides a comprehensive list of all product categories and their corresponding subcategories in the SalesLT schema of the AdventureWorksLT database. It is used to understand the hierarchical structure of product categories, facilitating product organization and categorization.', 'Entity': 'vGetAllCategories', 'EntityName': 'Get All Categories', 'Columns': [{'Name': 'ProductCategoryID', 'Definition': 'A unique identifier for each product category. This ID is used to reference specific categories.', 'Type': 'INT', 'AllowedValues': None, 'SampleValues': None}, {'Name': 'ParentProductCategoryName', 'Definition': 'The name of the parent product category. This represents the top-level category under which subcategories are grouped.', 'Type': 'NVARCHAR(50)', 'AllowedValues': None, 'SampleValues': None}, {'Name': 'ProductCategoryName', 'Definition': 'The name of the product category. This can refer to either a top-level category or a subcategory, depending on the context.', 'Type': 'NVARCHAR(50)', 'AllowedValues': None, 'SampleValues': None}], '@search.score': 0.03333333507180214, '@search.reranker_score': 2.812040328979492, '@search.highlights': None, '@search.captions': None}, {'Description': 'This view provides detailed catalog information about product models, including descriptions, manufacturing details, warranty information, and specifications related to product design and features. It is useful for generating comprehensive product catalogs and providing detailed product information to customers.', 'Entity': 'vProductModelCatalogDescription', 'EntityName': 'Product Model Catalog Description', 'Columns': [{'Name': 'ProductModelID', 'Definition': 'A unique identifier for each product model. This ID is used to distinguish different product models.', 'Type': 'INT', 'AllowedValues': None, 'SampleValues': None}, {'Name': 'Name', 'Definition': 'The name of the product model, providing a recognizable title for each model.', 'Type': 'NVARCHAR(50)', 'AllowedValues': None, 'SampleValues': None}, {'Name': 'Summary', 'Definition': 'A brief summary of the product model, highlighting key features and characteristics.', 'Type': 'NVARCHAR(MAX)', 'AllowedValues': None, 'SampleValues': None}, {'Name': 'Manufacturer', 'Definition': 'The name of the manufacturer of the product model.', 'Type': 'NVARCHAR(50)', 'AllowedValues': None, 'SampleValues': None}, {'Name': 'Copyright', 'Definition': 'Copyright information related to the product model, indicating the legal ownership of the product design and content.', 'Type': 'NVARCHAR(30)', 'AllowedValues': None, 'SampleValues': None}, {'Name': 'ProductURL', 'Definition': 'The URL for the product model, providing a link to more information or to purchase the product.', 'Type': 'NVARCHAR(256)', 'AllowedValues': None, 'SampleValues': None}, {'Name': 'WarrantyPeriod', 'Definition': 'The duration of the warranty period for the product model, specifying how long the warranty is valid.', 'Type': 'NVARCHAR(30)', 'AllowedValues': None, 'SampleValues': None}, {'Name': 'WarrantyDescription', 'Definition': 'A description of the warranty provided for the product model, detailing what is covered under the warranty.', 'Type': 'NVARCHAR(255)', 'AllowedValues': None, 'SampleValues': None}, {'Name': 'NoOfYears', 'Definition': 'The number of years the warranty is valid for the product model.', 'Type': 'INT', 'AllowedValues': None, 'SampleValues': None}, {'Name': 'MaintenanceDescription', 'Definition': 'A description of the maintenance requirements and recommendations for the product model.', 'Type': 'NVARCHAR(MAX)', 'AllowedValues': None, 'SampleValues': None}, {'Name': 'Wheel', 'Definition': 'Details about the type of wheels used in the product model.', 'Type': 'NVARCHAR(50)', 'AllowedValues': None, 'SampleValues': None}, {'Name': 'Saddle', 'Definition': 'Information about the saddle of the product model, such as material and design.', 'Type': 'NVARCHAR(50)', 'AllowedValues': None, 'SampleValues': None}, {'Name': 'Pedal', 'Definition': 'Details regarding the pedal design and specifications of the product model.', 'Type': 'NVARCHAR(50)', 'AllowedValues': None, 'SampleValues': None}, {'Name': 'BikeFrame', 'Definition': 'Description of the bike frame used in the product model, including material and type.', 'Type': 'NVARCHAR(50)', 'AllowedValues': None, 'SampleValues': None}, {'Name': 'Crankset', 'Definition': 'Information about the crankset of the product model, specifying its design and features.', 'Type': 'NVARCHAR(50)', 'AllowedValues': None, 'SampleValues': None}, {'Name': 'PictureAngle', 'Definition': 'The angle at which the product model is photographed, providing a visual perspective of the product.', 'Type': 'NVARCHAR(20)', 'AllowedValues': None, 'SampleValues': None}, {'Name': 'PictureSize', 'Definition': \"The size of the product model's picture, specifying dimensions or resolution.\", 'Type': 'NVARCHAR(20)', 'AllowedValues': None, 'SampleValues': None}, {'Name': 'ProductPhotoID', 'Definition': 'An identifier linking to the product photo, which provides a visual representation of the product model.', 'Type': 'INT', 'AllowedValues': None, 'SampleValues': None}, {'Name': 'Material', 'Definition': 'The material used in the construction of the product model, indicating durability and quality.', 'Type': 'NVARCHAR(50)', 'AllowedValues': None, 'SampleValues': None}, {'Name': 'Color', 'Definition': 'The color of the product model, providing information about the appearance of the product.', 'Type': 'NVARCHAR(15)', 'AllowedValues': None, 'SampleValues': None}, {'Name': 'ProductLine', 'Definition': 'A code representing the product line to which the model belongs, categorizing the product within a broader product range.', 'Type': 'NVARCHAR(2)', 'AllowedValues': None, 'SampleValues': None}, {'Name': 'Style', 'Definition': 'The style of the product model, indicating design and aesthetic aspects.', 'Type': 'NVARCHAR(50)', 'AllowedValues': None, 'SampleValues': None}, {'Name': 'RiderExperience', 'Definition': \"A description of the target rider's experience level for which the product model is designed, such as beginner, intermediate, or expert.\", 'Type': 'NVARCHAR(50)', 'AllowedValues': None, 'SampleValues': None}, {'Name': 'ModifiedDate', 'Definition': 'The date and time when the product model information was last modified, indicating the currency of the data.', 'Type': 'DATETIME', 'AllowedValues': None, 'SampleValues': None}], '@search.score': 0.032786883413791656, '@search.reranker_score': 1.9153262376785278, '@search.highlights': None, '@search.captions': None}, {'Description': 'This view provides detailed information about products, including their names, associated product models, descriptions, and the specific culture or language of the description. It is useful for understanding product details and translating product descriptions for different cultures.', 'Entity': 'vProductAndDescription', 'EntityName': 'Product and Description', 'Columns': [{'Name': 'ProductID', 'Definition': 'A unique identifier for each product. This ID is used to distinguish individual products.', 'Type': 'INT', 'AllowedValues': None, 'SampleValues': None}, {'Name': 'Name', 'Definition': 'The name of the product. This provides a brief and identifiable name for each product.', 'Type': 'NVARCHAR(50)', 'AllowedValues': None, 'SampleValues': None}, {'Name': 'ProductModel', 'Definition': 'The model name associated with the product. This indicates the specific model type or version of the product.', 'Type': 'NVARCHAR(50)', 'AllowedValues': None, 'SampleValues': None}, {'Name': 'Culture', 'Definition': \"The culture or language code for the product description. This is used to localize the product description, such as 'en' for English or 'fr' for French.\", 'Type': 'NVARCHAR(6)', 'AllowedValues': None, 'SampleValues': '[\"en\",\"fr\",\"es\",\"de\"]'}, {'Name': 'Description', 'Definition': 'A detailed description of the product. This text provides additional information about the product, which can vary based on the culture or language.', 'Type': 'NVARCHAR(400)', 'AllowedValues': None, 'SampleValues': None}], '@search.score': 0.032258063554763794, '@search.reranker_score': 1.8641046285629272, '@search.highlights': None, '@search.captions': None}, {'Description': 'This table contains high-level information about sales orders, including order dates, customer details, shipping information, and order status. It is used to manage and track sales orders from initiation to fulfillment.', 'Entity': 'SalesOrderHeader', 'EntityName': 'Sales Order Header', 'Columns': [{'Name': 'SalesOrderID', 'Definition': 'A unique identifier for each sales order. This ID is auto-generated and serves as the primary key for the SalesOrderHeader table.', 'Type': 'INT', 'AllowedValues': None, 'SampleValues': None}, {'Name': 'OrderDate', 'Definition': 'The date and time when the sales order was created. This field is used to track when the order was initiated.', 'Type': 'DATETIME', 'AllowedValues': None, 'SampleValues': None}, {'Name': 'DueDate', 'Definition': 'The date by which the order is expected to be fulfilled or delivered. It helps in managing delivery timelines.', 'Type': 'DATETIME', 'AllowedValues': None, 'SampleValues': None}, {'Name': 'ShipDate', 'Definition': 'The date when the order was shipped to the customer. This is used for tracking shipping and fulfillment status.', 'Type': 'DATETIME', 'AllowedValues': None, 'SampleValues': None}, {'Name': 'Status', 'Definition': 'The current status of the order, represented as a numeric code (e.g., 1 for In Progress, 2 for Completed, 3 for Canceled).', 'Type': 'TINYINT', 'AllowedValues': '[1,2,3]', 'SampleValues': None}, {'Name': 'OnlineOrderFlag', 'Definition': 'Indicates whether the order was placed online.', 'Type': 'BIT', 'AllowedValues': '[\"True\",\"False\"]', 'SampleValues': None}, {'Name': 'SalesOrderNumber', 'Definition': 'A unique order number assigned to the sales order. This is used for tracking and identification purposes.', 'Type': 'NVARCHAR(25)', 'AllowedValues': None, 'SampleValues': None}, {'Name': 'PurchaseOrderNumber', 'Definition': \"The purchase order number provided by the customer. This field links the sales order to the customer's purchase order.\", 'Type': 'NVARCHAR(25)', 'AllowedValues': None, 'SampleValues': None}, {'Name': 'AccountNumber', 'Definition': \"The account number of the customer placing the order. This helps link the order to the customer's account.\", 'Type': 'NVARCHAR(15)', 'AllowedValues': None, 'SampleValues': None}, {'Name': 'CustomerID', 'Definition': 'A foreign key that links to the Customer table, representing the customer who placed the order.', 'Type': 'INT', 'AllowedValues': None, 'SampleValues': None}, {'Name': 'ShipToAddressID', 'Definition': 'A foreign key that links to the Address table, representing the shipping address for the order.', 'Type': 'INT', 'AllowedValues': None, 'SampleValues': None}, {'Name': 'BillToAddressID', 'Definition': 'A foreign key that links to the Address table, representing the billing address for the order.', 'Type': 'INT', 'AllowedValues': None, 'SampleValues': None}, {'Name': 'ShipMethod', 'Definition': 'The shipping method used for the order (e.g., UPS, FedEx). This field helps track shipping preferences.', 'Type': 'NVARCHAR(50)', 'AllowedValues': None, 'SampleValues': None}, {'Name': 'SubTotal', 'Definition': 'The total cost of the order before taxes and shipping charges. This field is used to calculate the final total. The currency is pound sterling (GBP).', 'Type': 'MONEY', 'AllowedValues': None, 'SampleValues': None}, {'Name': 'TaxAmt', 'Definition': 'The tax amount applied to the order. This is calculated based on the order subtotal and applicable tax rates. The currency is pound sterling (GBP).', 'Type': 'MONEY', 'AllowedValues': None, 'SampleValues': None}, {'Name': 'Freight', 'Definition': 'The shipping charge applied to the order. This field represents the cost of shipping the order to the customer. The currency is pound sterling (GBP).', 'Type': 'MONEY', 'AllowedValues': None, 'SampleValues': None}, {'Name': 'TotalDue', 'Definition': 'The total amount due for the order, including all line items, taxes, and shipping charges. The currency is pound sterling (GBP).', 'Type': 'MONEY', 'AllowedValues': None, 'SampleValues': None}, {'Name': 'Comment', 'Definition': 'Any additional comments or notes related to the sales order. This field can include special instructions or remarks.', 'Type': 'NVARCHAR(255)', 'AllowedValues': None, 'SampleValues': None}, {'Name': 'ModifiedDate', 'Definition': 'The date and time when the sales order header record was last modified. This is used for tracking updates and changes to the order.', 'Type': 'DATETIME', 'AllowedValues': None, 'SampleValues': None}], '@search.score': 0.01587301678955555, '@search.reranker_score': 0.9990808367729187, '@search.highlights': None, '@search.captions': None}, {'Description': 'This table stores address information for customers, including street addresses, city, state, postal code, and country/region. It is used to maintain contact and shipping information for orders, as well as to manage customer locations.', 'Entity': 'Address', 'EntityName': 'Address', 'Columns': [{'Name': 'AddressID', 'Definition': 'A unique identifier for each address. This ID is auto-generated and serves as the primary key for the Address table.', 'Type': 'INT', 'AllowedValues': None, 'SampleValues': None}, {'Name': 'City', 'Definition': 'The city in which the address is located. This is used to specify the city for the address.', 'Type': 'NVARCHAR(30)', 'AllowedValues': None, 'SampleValues': None}, {'Name': 'StateProvince', 'Definition': 'The state or province in which the address is located. This is used to specify the state or province for the address.', 'Type': 'NVARCHAR(50)', 'AllowedValues': None, 'SampleValues': None}, {'Name': 'CountryRegion', 'Definition': 'The country or region in which the address is located. This is used to specify the country or region for the address.', 'Type': 'NVARCHAR(50)', 'AllowedValues': None, 'SampleValues': None}, {'Name': 'PostalCode', 'Definition': 'The postal code associated with the address. This is used to specify the postal code for the address, which helps in geographical sorting and shipping.', 'Type': 'NVARCHAR(15)', 'AllowedValues': None, 'SampleValues': None}, {'Name': 'ModifiedDate', 'Definition': 'The date and time when the address record was last modified. This is used for tracking updates and changes to the address information.', 'Type': 'DATETIME', 'AllowedValues': None, 'SampleValues': None}], '@search.score': 0.015625, '@search.reranker_score': 0.289828360080719, '@search.highlights': None, '@search.captions': None}]\n", "INFO:semantic_kernel.functions.kernel_function:Function SQL-GetEntitySchema succeeded.\n", - "INFO:semantic_kernel.functions.kernel_function:Function completed. Duration: 0.482475s\n", - "INFO:azure.core.pipeline.policies.http_logging_policy:Response status: 200\n", - "Response headers:\n", - " 'Transfer-Encoding': 'chunked'\n", - " 'Content-Type': 'application/json; odata.metadata=none; odata.streaming=true; charset=utf-8'\n", - " 'Content-Encoding': 'REDACTED'\n", - " 'Vary': 'REDACTED'\n", - " 'Server': 'Microsoft-IIS/10.0'\n", - " 'Strict-Transport-Security': 'REDACTED'\n", - " 'Preference-Applied': 'REDACTED'\n", - " 'OData-Version': 'REDACTED'\n", - " 'request-id': '48f7c98e-706a-11ef-ae73-0242ac110002'\n", - " 'elapsed-time': 'REDACTED'\n", - " 'Strict-Transport-Security': 'REDACTED'\n", - " 'Date': 'Wed, 11 Sep 2024 18:18:48 GMT'\n", - "INFO:semantic_kernel.functions.kernel_function:Function SQL-GetEntitySchema succeeded.\n", - "INFO:semantic_kernel.functions.kernel_function:Function completed. Duration: 0.533455s\n", - "INFO:httpx:HTTP Request: POST https://open-ai-gpt-001.openai.azure.com/openai/deployments/gpt-4o/chat/completions?api-version=2024-02-01 \"HTTP/1.1 200 OK\"\n", - "INFO:semantic_kernel.connectors.ai.open_ai.services.open_ai_handler:OpenAI usage: CompletionUsage(completion_tokens=65, prompt_tokens=5827, total_tokens=5892)\n", - "INFO:semantic_kernel.connectors.ai.open_ai.services.open_ai_chat_completion_base:processing 1 tool calls in parallel.\n", - "INFO:semantic_kernel.kernel:Calling SQL-RunSQLQuery function with args: {\"sql_query\":\"SELECT TOP 1 p.Name, SUM(d.OrderQty) AS TotalUnitsSold FROM SalesLT.SalesOrderDetail d JOIN SalesLT.Product p ON d.ProductID = p.ProductID GROUP BY p.Name ORDER BY TotalUnitsSold DESC;\"}\n", - "INFO:semantic_kernel.functions.kernel_function:Function SQL-RunSQLQuery invoking.\n", - "INFO:root:Executing SQL Query\n", + "INFO:semantic_kernel.functions.kernel_function:Function completed. Duration: 0.398460s\n", "INFO:semantic_kernel.functions.kernel_function:Function SQL-RunSQLQuery succeeded.\n", - "INFO:semantic_kernel.functions.kernel_function:Function completed. Duration: 0.301421s\n", + "INFO:semantic_kernel.functions.kernel_function:Function completed. Duration: 0.921846s\n", "INFO:httpx:HTTP Request: POST https://open-ai-gpt-001.openai.azure.com/openai/deployments/gpt-4o/chat/completions?api-version=2024-02-01 \"HTTP/1.1 200 OK\"\n", - "INFO:semantic_kernel.connectors.ai.open_ai.services.open_ai_handler:OpenAI usage: CompletionUsage(completion_tokens=142, prompt_tokens=5921, total_tokens=6063)\n", + "INFO:semantic_kernel.connectors.ai.open_ai.services.open_ai_handler:OpenAI usage: CompletionUsage(completion_tokens=295, prompt_tokens=5924, total_tokens=6219)\n", "INFO:semantic_kernel.functions.kernel_function:Function ChatBot-Chat succeeded.\n", - "INFO:semantic_kernel.functions.kernel_function:Function completed. Duration: 3.936345s\n", + "INFO:semantic_kernel.functions.kernel_function:Function completed. Duration: 5.030412s\n", "INFO:root:Answer: { \n", - " \"answer\": \"The top performing product by quantity of units sold is the 'Classic Vest, S' with a total of 87 units sold [1].\",\n", - " \"sources\": [\n", - " {\n", - " \"title\": \"Sales Order Detail\",\n", - " \"chunk\": \"| Name | TotalUnitsSold |\\n|---------------|----------------|\\n| Classic Vest, S | 87 |\\n\",\n", - " \"reference\": \"SELECT TOP 1 p.Name, SUM(d.OrderQty) AS TotalUnitsSold FROM SalesLT.SalesOrderDetail d JOIN SalesLT.Product p ON d.ProductID = p.ProductID GROUP BY p.Name ORDER BY TotalUnitsSold DESC;\"\n", - " }\n", - " ]\n", - "}\n" + " \"answer\": \"We have a total of 37 distinct product categories in our database [1].\", \n", + " \"sources\": [ \n", + " { \n", + " \"title\": \"Get All Categories\", \n", + " \"chunk\": \"| CategoryCount |\\n|---------------|\\n| 37 |\\n\", \n", + " \"reference\": \"SELECT COUNT(DISTINCT ProductCategoryName) AS CategoryCount FROM SalesLT.vGetAllCategories;\" \n", + " } \n", + " ], \n", + " \"schemas\": [ \n", + " { \n", + " \"Entity\": \"vGetAllCategories\", \n", + " \"Columns\": [ \n", + " { \n", + " \"Name\": \"ProductCategoryID\", \n", + " \"Definition\": \"A unique identifier for each product category. This ID is used to reference specific categories.\", \n", + " \"Type\": \"INT\" \n", + " }, \n", + " { \n", + " \"Name\": \"ParentProductCategoryName\", \n", + " \"Definition\": \"The name of the parent product category. This represents the top-level category under which subcategories are grouped.\", \n", + " \"Type\": \"NVARCHAR(50)\" \n", + " }, \n", + " { \n", + " \"Name\": \"ProductCategoryName\", \n", + " \"Definition\": \"The name of the product category. This can refer to either a top-level category or a subcategory, depending on the context.\", \n", + " \"Type\": \"NVARCHAR(50)\" \n", + " } \n", + " ] \n", + " } \n", + " ] \n", + "}\n", + "INFO:root:Time taken: 5.461877822875977\n" ] }, { "data": { "text/markdown": [ - "The top performing product by quantity of units sold is the 'Classic Vest, S' with a total of 87 units sold [1]." + "We have a total of 37 distinct product categories in our database [1]." ], "text/plain": [ "" @@ -783,21 +906,81 @@ }, "metadata": {}, "output_type": "display_data" + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:root:Document: {'Question': 'How many different product categories do we have?', 'Query': 'SELECT COUNT(DISTINCT ProductCategoryName) AS CategoryCount FROM SalesLT.vGetAllCategories;', 'Schemas': [{'Entity': 'vGetAllCategories', 'Columns': [{'Name': 'ProductCategoryID', 'Definition': 'A unique identifier for each product category. This ID is used to reference specific categories.', 'Type': 'INT'}, {'Name': 'ParentProductCategoryName', 'Definition': 'The name of the parent product category. This represents the top-level category under which subcategories are grouped.', 'Type': 'NVARCHAR(50)'}, {'Name': 'ProductCategoryName', 'Definition': 'The name of the product category. This can refer to either a top-level category or a subcategory, depending on the context.', 'Type': 'NVARCHAR(50)'}]}]}\n", + "INFO:root:Vector Fields: {'Question': 'QuestionEmbedding', 'Query': 'QueryEmbedding'}\n", + "INFO:root:Vector Fields: {'Question': 'QuestionEmbedding', 'Query': 'QueryEmbedding'}\n", + "INFO:httpx:HTTP Request: POST https://open-ai-gpt-001.openai.azure.com/openai/deployments/text-embedding-ada-002/embeddings?api-version=2023-03-15-preview \"HTTP/1.1 200 OK\"\n", + "INFO:root:Document with embeddings: {'Question': 'How many different product categories do we have?', 'Query': 'SELECT COUNT(DISTINCT ProductCategoryName) AS CategoryCount FROM SalesLT.vGetAllCategories;', 'Schemas': [{'Entity': 'vGetAllCategories', 'Columns': [{'Name': 'ProductCategoryID', 'Definition': 'A unique identifier for each product category. This ID is used to reference specific categories.', 'Type': 'INT'}, {'Name': 'ParentProductCategoryName', 'Definition': 'The name of the parent product category. This represents the top-level category under which subcategories are grouped.', 'Type': 'NVARCHAR(50)'}, {'Name': 'ProductCategoryName', 'Definition': 'The name of the product category. This can refer to either a top-level category or a subcategory, depending on the context.', 'Type': 'NVARCHAR(50)'}]}], 'QuestionEmbedding': [0.0196035448461771, 0.004998903721570969, -0.001196633093059063, -0.009553460404276848, -0.013075564056634903, 0.0004860045446548611, -0.009037233889102936, 0.008187747560441494, -0.01612718217074871, -0.012859925627708435, 0.003943579737097025, 0.017538638785481453, -0.026085782796144485, 0.0021041138097643852, -0.008344575762748718, 0.027549514546990395, 0.014781072735786438, 0.020832033827900887, -0.011938558891415596, -0.016689151525497437, -0.023955531418323517, 0.0015323437983170152, -0.0009140152833424509, -0.008279230445623398, -0.010520569048821926, 0.009677616879343987, 0.02558916062116623, -0.006776291877031326, 0.0015993225388228893, -0.001930949161760509, 0.006328677758574486, -0.0011206693015992641, -0.02017858251929283, -0.021498553454875946, -0.015578283928334713, 0.020662136375904083, 0.006848171819001436, -0.004730988759547472, 0.003819423960521817, -0.002367128152400255, 0.014702659100294113, 0.024164635688066483, 0.007338260300457478, 0.008573283441364765, -0.003466560272499919, 0.0021825279109179974, -0.013748619705438614, -0.003180675208568573, -0.005034843925386667, 0.016270942986011505, 0.014480485580861568, 0.01692439429461956, -0.019485924392938614, -0.010866898111999035, 0.006697877775877714, 0.019747303798794746, 0.008703974075615406, 0.006057495251297951, 0.0011655940907076001, -0.0011108675971627235, -0.004469608422368765, 0.040017370134592056, -0.022570215165615082, 0.01389237865805626, -0.03123498149216175, -0.032175950706005096, -0.011820937506854534, -0.002396533265709877, -0.003463292960077524, 0.002522322814911604, 0.012448251247406006, 0.028385933488607407, -0.009056837297976017, -0.0073970709927380085, 0.0036331904120743275, -0.006433229893445969, -8.086462185019627e-05, -0.016898255795240402, -0.015173143707215786, 0.017708536237478256, 0.017094291746616364, -0.01152034942060709, -0.007253311574459076, -0.002800039714202285, 0.0196035448461771, -0.011951628141105175, -0.004234365653246641, 0.0509953536093235, -0.002960135228931904, -0.003446956630796194, 0.011605298146605492, 0.01774774305522442, 0.025667574256658554, -0.013160512782633305, 0.00552819948643446, 0.01911999098956585, -0.002064906759187579, 0.0013583622639998794, -0.008664767257869244, -0.0007722979644313455, -0.01301675383001566, -0.011945093050599098, -0.009043768979609013, -0.019329095259308815, 0.001079011824913323, -0.012415578588843346, 0.004100407939404249, -0.0030842910055071115, 0.00013896054588258266, 0.002252774080261588, -0.02345890924334526, 0.02383791096508503, 0.025262434035539627, -0.018505746498703957, 0.005273353774100542, -0.017421016469597816, 0.0165715292096138, -0.0005672776023857296, -0.00878238771110773, -0.013304272666573524, 0.023119114339351654, 0.0131474444642663, 0.030189458280801773, -0.014937900938093662, 0.027941586449742317, -0.00984751433134079, -0.01896316185593605, -0.013219323940575123, 0.009644944220781326, -0.012448251247406006, 0.01915919780731201, 0.007370932959020138, 0.020792827010154724, 0.015944216400384903, -0.0111544169485569, 0.0395207479596138, -0.020152444019913673, 0.04895658418536186, 0.01621866598725319, -0.009442374110221863, 0.020635997876524925, 0.012565872631967068, 0.004688514396548271, 0.019747303798794746, 0.01969502866268158, 0.02456977590918541, 0.02820296585559845, 0.018950093537569046, -0.007050741463899612, 0.003236218588426709, 0.015787387266755104, 0.009180993773043156, 0.03194070979952812, 0.011258969083428383, 0.01534304115921259, -0.010840760543942451, 0.0007433010614477098, 0.005247215274721384, -0.038893431425094604, -0.005573941394686699, 0.007312122266739607, 0.004747325088828802, -0.006848171819001436, -0.00035919412039220333, 0.020662136375904083, 0.025419263169169426, 0.03209753707051277, 0.0013885843800380826, 0.012343699112534523, 0.00013048609253019094, -0.008390316739678383, 0.0010430719703435898, -0.004472875501960516, 0.006547584198415279, 0.004002390429377556, 0.01612718217074871, 0.0018590694526210427, -0.009684151038527489, -0.027706343680620193, -0.005475923418998718, 0.005221077241003513, -0.00873011164367199, 0.0131474444642663, 0.004312779754400253, -0.020230857655405998, 0.00023115846852306277, -3.286401693003427e-07, -0.009723357856273651, 0.016401631757616997, -0.012487458065152168, -0.014768003486096859, 0.026726165786385536, -0.003950114361941814, 0.018126744776964188, -0.6779167056083679, -0.015735112130641937, 0.015356110408902168, -0.03079063445329666, 0.02846434712409973, 0.01074274256825447, 0.012186869978904724, 0.017094291746616364, -0.021367864683270454, 0.02425611950457096, 0.0028229104354977608, -0.006567187607288361, 0.017538638785481453, -0.0029356307350099087, -0.006113038863986731, -0.02313218265771866, 0.012925270944833755, 0.0015740012750029564, -0.013735550455749035, 0.01794377714395523, 0.0016630340833216906, 0.005488992668688297, -0.017669327557086945, -0.00744281243532896, 0.014441277831792831, 0.01352644618600607, 0.019708096981048584, -0.00701153464615345, -0.018427332863211632, 0.0064168935641646385, -0.005299491807818413, 0.019015438854694366, 0.0192768182605505, -0.014950970187783241, 0.037429701536893845, 0.006008486729115248, -0.010860363952815533, 0.02715744450688362, 0.014258312061429024, 0.01625787280499935, -0.04401649162173271, -0.012271818704903126, 0.004172287881374359, -0.003649526508525014, -0.016519254073500633, 0.011938558891415596, 0.01778694987297058, 0.007344794925302267, 0.018179019913077354, -0.012748838402330875, 0.01889781653881073, -0.034815896302461624, -0.003822691272944212, -0.008710508234798908, 0.03463292866945267, 0.002584400586783886, 0.01679370366036892, -0.006050960626453161, 0.002945432672277093, 0.027549514546990395, -0.004649307578802109, 0.003571112407371402, 0.003424085909500718, -0.010043549351394176, -0.031025877222418785, 0.007331725675612688, -0.039468470960855484, -0.0062339273281395435, 5.71770078749978e-06, 0.001337125082500279, -0.0121084563434124, 0.0005178602878004313, -0.030607668682932854, -0.001261161407455802, 0.0046199019998312, -0.002483115764334798, 0.04299710690975189, 0.026307957246899605, -0.01701587624847889, 0.002388365101069212, 0.0005811634473502636, -0.01570897363126278, 0.008984957821667194, 0.005377905908972025, 0.01453276164829731, 0.0024455422535538673, -0.007671520579606295, 0.002073074923828244, 0.012480923905968666, 0.04030488803982735, 0.0006015838007442653, 0.018571091815829277, 0.011807868257164955, -0.016832910478115082, -0.020975792780518532, 0.018636437132954597, -0.013552583754062653, 0.018375055864453316, -0.0031676061917096376, -0.02660854533314705, -0.0024145033676177263, 0.004851877223700285, 0.012376371771097183, 0.006570454686880112, 0.006678274367004633, 0.008560214191675186, -0.006887378636747599, 0.00470158364623785, 0.016401631757616997, -0.031025877222418785, 0.00976909976452589, -0.012467854656279087, -0.016205597668886185, -0.006750153843313456, -0.00980177242308855, -0.01953819952905178, 0.0328294038772583, -0.00021870204363949597, -0.03324761241674423, -0.0012374737998470664, 0.010233050212264061, 0.012546268291771412, 0.017198843881487846, -0.013500307686626911, 0.007122621405869722, 0.00981484167277813, -0.022648628801107407, 0.0027690005954355, -0.009742962196469307, -0.002945432672277093, 0.020675204694271088, -0.012533199973404408, 0.005907201673835516, -0.01956433802843094, -0.017865363508462906, 0.024138499051332474, 0.013101702556014061, -0.02348504588007927, 0.01597035489976406, -0.03659328445792198, -0.00020430568838492036, -0.010951846837997437, -0.020034823566675186, -0.017198843881487846, -0.004564358852803707, -0.010566310957074165, -0.02472660504281521, 0.011847076006233692, 0.0050087058916687965, 0.0018737721256911755, -0.010115428827702999, -0.005309293512254953, -0.0014955870574340224, 0.01387930940836668, 0.0231060441583395, 0.0223088338971138, -0.013258530758321285, -0.03492044657468796, -0.02558916062116623, -0.002463512122631073, 0.008886940777301788, 0.020348479971289635, -0.0007216554949991405, -0.011932024732232094, -0.009076441638171673, 0.0008012948674149811, -0.01343496236950159, 0.03693307936191559, 0.008900009095668793, -0.028830280527472496, 3.540379839250818e-05, -0.01883247122168541, 0.0020077296067029238, 0.009396632201969624, -0.005531467031687498, 0.004071002826094627, -0.009167924523353577, 0.002782069845125079, 0.01265082135796547, -0.019015438854694366, -0.0005595178226940334, 0.013474170118570328, -0.007462415844202042, 0.019995614886283875, 0.009050303138792515, 0.008658232167363167, 0.007423209026455879, -0.0010128498543053865, -0.006145711522549391, 0.02686992473900318, -0.004371590446680784, 0.03703762963414192, -0.0029045918490737677, 0.00889347493648529, -0.022387247532606125, 0.0017806553514674306, 0.000748201971873641, -0.0015380614204332232, -0.015604421496391296, -0.004583962261676788, 0.013539515435695648, 0.01179479993879795, -0.02250486984848976, 0.002819643123075366, 0.024648189544677734, -0.0030842910055071115, -0.0028800873551517725, 0.006207789294421673, 0.03643645718693733, 0.010448689572513103, 0.015225419774651527, 0.008305368945002556, -0.019355233758687973, -0.004822472110390663, -0.008808526210486889, 0.015003246255218983, -0.01953819952905178, 0.009148321114480495, -0.0007522860541939735, 0.008723577484488487, 0.01176212728023529, -0.01212805975228548, -0.0009720090893097222, 0.00787409022450447, -0.024687398225069046, 0.008011315017938614, -0.005988882854580879, 0.02428225800395012, -0.004770196042954922, -0.024060083553195, -0.006302539724856615, -0.0025321245193481445, 0.030189458280801773, 0.009605737403035164, -0.006717481184750795, 0.020518377423286438, 0.031339533627033234, -0.012722700834274292, 0.032489608973264694, 0.024648189544677734, 0.0059006670489907265, 0.026399441063404083, 0.01078848447650671, 0.013787826523184776, 0.030006492510437965, -0.0031267653685063124, 0.012448251247406006, 0.007220638915896416, -0.009311683475971222, 0.002076342236250639, -0.01032453402876854, -0.026843788102269173, -0.027654066681861877, 0.01303635723888874, 0.0040252613835036755, -0.0033979478757828474, -0.008344575762748718, 0.010572845116257668, -0.008076660335063934, 0.017930708825588226, 0.01838812418282032, 0.006563920062035322, 0.02607271447777748, -0.011827471666038036, 0.02157696895301342, 0.025484608486294746, -0.01854495331645012, 0.002001195214688778, 0.0140230692923069, -0.022517938166856766, 0.00560007942840457, 0.0011949994368478656, 0.01730339601635933, -0.015055522322654724, -0.003368542529642582, 0.019263749942183495, 0.010553241707384586, 0.0009564896463416517, -0.01909385249018669, 0.0167283583432436, -0.015604421496391296, -0.030189458280801773, -0.01685904897749424, 0.003321167314425111, -0.003642992116510868, -0.0008829763391986489, -0.004489211831241846, -0.019734235480427742, -0.027575653046369553, 0.017643190920352936, 0.01679370366036892, 0.02705289237201214, -0.016597667708992958, -0.0009009462664835155, 0.006900447886437178, -0.003058152971789241, 0.019734235480427742, -0.018414262682199478, 0.009141786023974419, 0.0148986941203475, 0.002287080278620124, 0.00011445611016824841, 0.003995855804532766, -0.01217380166053772, 0.02556302212178707, 0.0005272536654956639, -0.025223227217793465, -0.016937462612986565, -0.014402071014046669, -0.034815896302461624, 0.004499013535678387, -0.0029486999846994877, -0.0003763472195714712, 0.0046199019998312, 0.022152004763484, 0.014872555620968342, -0.007390536367893219, 0.008599421940743923, 0.022230420261621475, 0.012402509339153767, -0.0007506523979827762, -0.020413825288414955, 0.009971669875085354, -0.0014416773337870836, 0.050943080335855484, 0.006309074349701405, -0.03672397509217262, 0.03340443968772888, -0.020766688510775566, -0.018244365230202675, -0.017643190920352936, -0.01126550417393446, 0.015539076179265976, 0.003074489301070571, -0.03852749988436699, -0.00704420730471611, 0.003040183102712035, -0.008592886850237846, 0.018218228593468666, 0.0021253509912639856, 0.0021057473495602608, -0.01072313915938139, -0.017421016469597816, -0.009586133062839508, 0.008553680032491684, 0.006420161109417677, 0.012748838402330875, 0.032620299607515335, -0.0035188363399356604, 0.0022397050634026527, 0.043232351541519165, 0.026216473430395126, 0.008233488537371159, -0.0026252414099872112, -0.002017531543970108, 0.0019652554765343666, 0.00206327298656106, 0.007586571853607893, -0.011690246872603893, 0.004267038311809301, -0.015055522322654724, 0.006207789294421673, 0.03021559678018093, 0.00034959655022248626, 0.011141347698867321, 0.004910687915980816, -0.004564358852803707, -0.009520788677036762, 0.004146149847656488, 0.012533199973404408, -0.010729673318564892, 0.008971888571977615, 0.027706343680620193, -0.003463292960077524, -0.005025042220950127, 0.004185356665402651, -0.016401631757616997, 0.009710289537906647, 0.005488992668688297, -0.00508385244756937, -0.010252653621137142, -0.005822252947837114, -0.0231060441583395, -0.05985615774989128, 0.0001528463908471167, 0.014676520600914955, 0.01790457032620907, -0.010925709269940853, -0.011376590467989445, -0.01867564395070076, -0.02115875855088234, -0.028856417164206505, -0.026490923017263412, -0.026464786380529404, -0.015173143707215786, -0.02667389065027237, -0.0178522951900959, -0.027941586449742317, 0.013363082893192768, 0.014663451351225376, 0.009350891225039959, -0.006880844011902809, -0.0018688712734729052, 0.016532322391867638, -0.0037540788762271404, -0.03157477453351021, -0.009481580927968025, -0.03358740732073784, -0.01105639897286892, 0.017447154968976974, -0.016845978796482086, 0.0014032870531082153, -0.010540172457695007, 0.005126326810568571, -0.011435401625931263, -0.012121525593101978, 0.026843788102269173, -0.014950970187783241, 0.013140909373760223, -0.0002754706365521997, -0.008220420219004154, 0.001852534944191575, -0.007037672679871321, -0.02027006447315216, 0.013774757273495197, -0.003845561994239688, -0.011990834958851337, -0.029170075431466103, -0.014794141985476017, 0.015656698495149612, 0.016362424939870834, -0.02966669760644436, 0.011879747733473778, 0.0037736822851002216, 0.016140252351760864, -0.012729234993457794, 0.017264189198613167, -0.009030699729919434, 0.009756030514836311, 0.014349794946610928, 0.025288572534918785, 0.010304929688572884, -0.0031153298914432526, -0.009069906547665596, 0.01574818044900894, -0.004044864792376757, 0.005809183698147535, -0.006420161109417677, -0.04213455319404602, 0.01889781653881073, -0.020858172327280045, -0.023511184379458427, -0.014689589850604534, 0.001707141986116767, -0.0035809141118079424, 0.025262434035539627, -0.02718358300626278, -0.029849663376808167, -0.032045260071754456, 0.0031104290392249823, -0.022387247532606125, 0.019172266125679016, -0.007906762883067131, -0.01832278072834015, -0.03230664134025574, -0.005472656339406967, -0.021746866405010223, -0.015147005207836628, -0.03478975594043732, -0.03353513032197952, 0.001911345636472106, 0.026399441063404083, -0.0165715292096138, 0.011840540915727615, 0.002608905080705881, -0.015212350524961948, -0.015761250630021095, -0.009658013470470905, -0.01723805069923401, -0.033927202224731445, 0.008573283441364765, -0.0253408495336771, 0.012239146046340466, 0.03703762963414192, 0.013474170118570328, -0.013284669257700443, 0.01962968334555626, 0.008507938124239445, -0.0049335588701069355, 0.009932463057339191, 0.004672178067266941, 0.0014163560699671507, -0.021877555176615715, -0.0005832054303027689, -0.004776730202138424, -0.0004888633848167956, 0.017407948151230812, 0.010808087885379791, 0.01395772397518158, 0.03348285332322121, -0.027366548776626587, -0.020897379145026207, -0.025693712756037712, -0.006001952104270458, -0.015225419774651527, -0.017133498564362526, -0.015225419774651527, 0.01774774305522442, -0.016297079622745514, 0.0044663408771157265, 0.009481580927968025, -0.0012480923905968666, -0.00464604003354907, 0.020165512338280678, 0.042082276195287704, 0.0025909352116286755, 0.02253100834786892, 0.0021335191559046507, 0.009520788677036762, -0.0223088338971138, -0.023027630522847176, -0.02922235056757927, -0.028699589893221855, -0.015617490746080875, -0.0022772785741835833, 0.028385933488607407, -0.0013493773294612765, 0.003324434394016862, -0.010317998938262463, 0.012513596564531326, -0.019302956759929657, -0.020243927836418152, -0.00787409022450447, -0.009279010817408562, -0.017185773700475693, -0.00831843726336956, -0.03515569120645523, -0.021916763857007027, 0.004495746456086636, 0.004900886211544275, -0.033927202224731445, 0.017068153247237206, -0.012435181997716427, -0.017185773700475693, -0.003881501965224743, -0.005064249038696289, 0.04085378721356392, -0.0008364178938791156, 0.023432770743966103, 0.04095834121108055, 0.015617490746080875, -0.006162047386169434, -0.02514481358230114, -0.009076441638171673, -0.01998254656791687, 0.043807387351989746, 0.019577406346797943, -0.006782826501876116, -0.011278572492301464, -0.01029186137020588, 0.0022544076200574636, -0.013827033340930939, -0.02747110091149807, 0.0029127600137144327, 0.005384440533816814, 0.027863170951604843, -0.0010332701494917274, -0.0063678850419819355, 0.008592886850237846, 0.01024611946195364, -0.0018182287458330393, 0.007292518857866526, 0.00037981869536451995, -0.011409263126552105, -0.021080344915390015, 0.03575686737895012, -0.02131558768451214, 0.007351329550147057, -0.00299934227950871, -0.010468292981386185, 0.007194500882178545, -0.0032215157989412546, 0.0036952681839466095, -0.003097360022366047, -0.00014355512394104153, 0.010239585302770138, 0.01250706147402525, 0.025262434035539627, 0.01300368458032608, -0.006854705978184938, -0.026791511103510857, -0.007285984233021736, 0.002925829030573368, 0.023027630522847176, -0.004567625932395458, -0.023158321157097816, 0.002991174114868045, 0.011402728967368603, 0.017198843881487846, -0.0033979478757828474, -0.019198404625058174, 0.002765733515843749, -0.026490923017263412, -0.005341966170817614, 0.020544515922665596, -0.008984957821667194, -0.007651917170733213, 0.002354058902710676, -0.008540610782802105, -0.005694829858839512, -0.038292258977890015, -0.01024611946195364, 0.02253100834786892, -0.025928955525159836, -0.013866241089999676, -0.00645283330231905, 0.03238505497574806, -0.01874098926782608, 0.009298615157604218, -0.03288168087601662, 0.011298175901174545, -0.0033391371835023165, -0.009396632201969624, -0.0029307298827916384, 0.007913297973573208, -0.00232628732919693, -0.03444996103644371, -0.0030140450689941645, -0.006139176897704601, -0.01861029863357544, 0.01082115713506937, -0.0070180692709982395, -0.021184897050261497, 0.0032247831113636494, -0.001997927902266383, -0.018440401181578636, -0.0065345149487257, -0.010866898111999035, -0.0050413780845701694, -0.008344575762748718, 0.013127840124070644, -0.012480923905968666, -0.0012480923905968666, 0.017159637063741684, -0.03484203293919563, 0.0012938339496031404, 0.00560007942840457, -0.007606175262480974, 0.01547373179346323, -0.004309512674808502, -0.011311245150864124, -0.0026301422622054815, -0.004329116083681583, -0.013232393190264702, -0.01108907163143158, -0.004361788742244244, 0.014362864196300507, -0.010814622044563293, -0.017603984102606773, -0.0056915623135864735, 0.006325410678982735, 0.003669130150228739, 0.00838378258049488, -0.01998254656791687, -0.0016573163447901607, 0.024582846090197563, 0.016427770256996155, 0.004534953273832798, -0.008605956099927425, -0.030633805319666862, -0.018754057586193085, -0.008932681754231453, -0.022609421983361244, -0.019485924392938614, -0.0035776470322161913, 0.038736604154109955, -0.001443310989998281, -0.012918735854327679, -0.009932463057339191, 0.014062276110053062, -0.012369836680591106, -0.028960971161723137, 0.019655821844935417, 0.008135471493005753, 0.009971669875085354, 0.013363082893192768, -0.016754496842622757, 0.019747303798794746, -0.00799824669957161, -0.005208008456975222, -0.008194281719624996, 0.009076441638171673, 0.007782607339322567, -0.011415797285735607, 0.0070050000213086605, -0.019106920808553696, -0.01534304115921259, -0.01787843368947506, 0.012467854656279087, 0.011049864813685417, -0.007619244512170553, 0.019420579075813293, -0.00232628732919693, -0.005655622575432062, 0.003610319457948208, 0.023798704147338867, 0.017355671152472496, 0.02492263913154602, 0.0034175512846559286, -0.04263117536902428, -0.0020894112531095743, -0.006273134145885706, -0.0014147225301712751, 0.004753859713673592, -0.02087124064564705, -0.003567845094949007, -0.004472875501960516, 0.011539953760802746, -0.0040252613835036755, -0.007259846199303865, -0.011258969083428383, -0.003388145938515663, -0.009442374110221863, 0.006325410678982735, -0.002733060857281089, 0.01344803161919117, 0.02625568024814129, -0.007240242790430784, 0.0030532521195709705, -0.021720727905631065, 0.014728796668350697, 0.004760394338518381, -0.00016366917407140136, -0.006122840568423271, 0.013866241089999676, -0.018845541402697563, -0.00461336737498641, -0.008338040672242641, 0.0012538100127130747, -0.018179019913077354, -0.03178388252854347, -0.010664328001439571, 0.01962968334555626, 0.0036789318546652794, -0.012435181997716427, -0.010259188711643219, 0.003930510953068733, -0.00601502088829875, -0.0032100805547088385, -0.021080344915390015, 0.00463623832911253, -0.0030369157902896404, -0.005335431545972824, 0.027288135141134262, -0.020675204694271088, -0.0038978380616754293, -0.0012031676014885306, 0.01547373179346323, 0.007926366291940212, 0.030320148915052414, 0.21621403098106384, 0.017198843881487846, -0.01606183685362339, 0.036567144095897675, 0.038710467517375946, -0.001502121682278812, 0.02383791096508503, 0.010631656274199486, 0.009579598903656006, 0.010095825418829918, 0.014702659100294113, 0.004499013535678387, 0.009723357856273651, 0.008801992051303387, 0.010010876692831516, -0.014441277831792831, -0.03708990663290024, -0.02425611950457096, -0.01034413743764162, 0.04051399230957031, 0.026242611929774284, 0.0024765811394900084, 0.01082115713506937, -0.009004561230540276, 0.03468520566821098, 0.02507946826517582, -0.015147005207836628, -0.024556707590818405, 0.02846434712409973, -0.0018394659273326397, -0.007076879497617483, -0.015133936889469624, -0.004414064809679985, 0.032933954149484634, 0.002488016616553068, -0.013709411956369877, 0.009710289537906647, -0.012101921252906322, 0.015382247976958752, -0.013800895772874355, 0.0023785633966326714, 0.021812211722135544, 0.006126107648015022, 0.007357863709330559, -0.002690586494281888, 0.02093658596277237, -0.01787843368947506, 0.0023328217212110758, 0.013487238436937332, -0.0017087756423279643, -0.015199282206594944, 0.001437593251466751, 0.017538638785481453, 0.033953338861465454, -0.006933120544999838, -0.006358082871884108, -0.0077760727144777775, -0.002323020016774535, -0.0055837430991232395, 0.007743400055915117, 0.0036397248040884733, 0.030921325087547302, -0.04020033776760101, 0.035992108285427094, -0.003607052145525813, -0.006835102569311857, -0.03617507591843605, -0.015160074457526207, 0.02673923596739769, -0.02705289237201214, 0.007357863709330559, 0.00879545696079731, -0.012644286267459393, -0.002976471558213234, -0.002082876628264785, -9.87834864645265e-05, 0.018649505451321602, 0.03329988941550255, 0.01343496236950159, 0.0047375233843922615, 0.007279449608176947, -0.02166845090687275, -0.010474827140569687, -0.01641470193862915, -0.005077318288385868, -0.010585914365947247, 0.03097360022366047, -0.0044205994345247746, 0.030842911452054977, 0.004557824227958918, 0.0024586112704128027, -0.011337383650243282, -0.00471791997551918, 0.00650184229016304, -0.01947285421192646, 0.043075524270534515, 0.009742962196469307, -0.003780216909945011, -0.0009997808374464512, -0.03899798542261124, -0.009030699729919434, 0.06863854825496674, 0.02479195035994053, 0.014336725696921349, -0.0036789318546652794, 0.0003628697886597365, -0.012696562334895134, -0.010938777588307858, 0.013395755551755428, -0.003708337200805545, 0.005348500330001116, -0.010651259683072567, -0.0032378521282225847, -0.014036138541996479, -0.0033113653771579266, -0.01734260283410549, -0.013630998320877552, 0.002259308472275734, -0.003610319457948208, -0.009684151038527489, -0.020949654281139374, -0.026059646159410477, 0.0034959653858095407, 0.007867556065320969, -0.004280107095837593, -0.0064920405857264996, -0.01938137225806713, 0.005979081150144339, 0.0004627253510989249, -0.034815896302461624, 0.009729892946779728, -0.001163143664598465, -0.00784141756594181, -0.007540830411016941, 0.004391193855553865, -0.0019048111280426383, 0.008684370666742325, 0.005113258026540279, -0.019198404625058174, -0.006972327362746, -0.018192090094089508, 0.001126387040130794, 0.01395772397518158, -0.0006779559189453721, 0.0035188363399356604, -0.014362864196300507, 0.005038111004978418, 0.01067739725112915, 0.004064468201249838, -0.021681521087884903, -0.017094291746616364, 0.010899570770561695, -0.013167047873139381, -0.007861021906137466, 0.006704412400722504, 0.006586791016161442, -0.005034843925386667, -0.017865363508462906, 0.030006492510437965, -0.018022192642092705, -0.018205158412456512, -0.034659069031476974, 0.03928550332784653, 0.007932901382446289, -0.021054206416010857, -0.00697886198759079, -0.16644716262817383, 0.01568283513188362, 0.040487855672836304, -0.023275941610336304, 0.015578283928334713, 0.000630580703727901, 0.04116744548082352, 0.009357425384223461, -0.021616175770759583, -0.008004780858755112, 0.03910253569483757, -0.013121305964887142, -0.033927202224731445, -0.01389237865805626, 0.030921325087547302, -0.019616613164544106, 0.010174239985644817, 0.02297535538673401, 0.01293833926320076, 0.005005438346415758, 0.04953162372112274, 0.011807868257164955, -0.03152250126004219, -0.007194500882178545, 0.002082876628264785, -0.00873011164367199, -0.010775415226817131, 0.024805018678307533, 0.00801785010844469, -0.03447610139846802, -0.0102003775537014, -0.01641470193862915, 0.015878871083259583, 0.008638628758490086, 0.001981591572985053, 0.003806354943662882, -0.009148321114480495, -0.010128498077392578, 0.004786532372236252, 0.009043768979609013, 0.007246776949614286, 0.019577406346797943, 0.03384878858923912, 0.01159876398742199, -0.004760394338518381, -0.0008470364846289158, 0.014101482927799225, -0.0020469368901103735, 0.0006105687352828681, -0.03531251847743988, 0.001314254361204803, -0.008102798834443092, -0.00043332003406248987, 0.004044864792376757, 0.0149771086871624, 0.01794377714395523, 0.011285107582807541, 0.02049223892390728, 0.013552583754062653, -0.007756469305604696, 0.007455881685018539, -0.02651706151664257, -0.012082317844033241, -0.007527761161327362, -0.015055522322654724, 0.0007494271849282086, 0.0014931366313248873, 0.012533199973404408, -0.021145690232515335, 0.01991720125079155, -0.0025827670469880104, 0.0005035660578869283, 0.006776291877031326, -0.004502280615270138, -0.008168144151568413, 0.0130690298974514, -0.011415797285735607, -0.005956210196018219, 0.012552803382277489, 0.0008682736661285162, -0.002087777480483055, 0.017996054142713547, -0.014271380379796028, 0.01599649339914322, -0.014232173562049866, -0.002844147616997361, 0.014349794946610928, 0.01343496236950159, -0.01648004725575447, -0.009416235610842705, 0.013827033340930939, -0.036854665726423264, -0.017773881554603577, -0.0019636217039078474, 0.005665424279868603, 0.027993861585855484, -0.021903693675994873, -0.0016279109986498952, 0.020988861098885536, -0.009069906547665596, 0.006926585920155048, 0.012043111026287079, -0.030267873778939247, 0.025471540167927742, 0.030607668682932854, -0.005760174710303545, 0.001774120843037963, 0.008821595460176468, 0.039311643689870834, -0.004907420836389065, 0.017185773700475693, 0.027967723086476326, 0.011951628141105175, 0.006472437176853418, 0.012794580310583115, 0.03201912343502045, 0.0015013047959655523, -0.016832910478115082, -0.004766928497701883, 0.01199736911803484, 0.031600914895534515, -0.002835979452356696, -0.007553899195045233, 0.019943339750170708, 0.004064468201249838, 0.00024075603869277984, -0.1128118634223938, -0.007155294064432383, 0.008658232167363167, 0.009461977519094944, -0.032803263515233994, 0.052249982953071594, 0.015617490746080875, 0.01931602694094181, -0.016872117295861244, 0.027680205181241035, 0.0014188066124916077, -0.037299010902643204, 0.004178822506219149, -0.015800457447767258, 0.003121864516288042, -0.001658950001001358, -0.013735550455749035, -0.021367864683270454, -0.00744281243532896, 0.003950114361941814, 0.006459367927163839, -0.02549767680466175, 0.007292518857866526, -0.014663451351225376, 0.002213567029684782, -0.015068591572344303, -0.027575653046369553, -0.004038330167531967, -0.005453052930533886, 0.00346982735209167, -0.0019652554765343666, -0.03876274451613426, -0.011481142602860928, -0.029013246297836304, 0.0015388783067464828, 0.028595037758350372, -0.004757126793265343, 0.005926805082708597, 0.014441277831792831, -0.022713974118232727, 0.004672178067266941, -0.003642992116510868, -0.01734260283410549, -0.03701149299740791, -0.0026497459039092064, -0.00970375444740057, -0.02221735008060932, 0.01727725751698017, 0.004054666496813297, -0.014950970187783241, -0.02027006447315216, -0.02301456220448017, -0.01216073241084814, -0.016048768535256386, -0.02368108183145523, -0.0011933657806366682, -0.01991720125079155, 0.01905464567244053, 0.0159311480820179, 0.0112328315153718, -0.0062208580784499645, 0.020858172327280045, -0.010252653621137142, 0.006763223093003035, 0.03949460759758949, 0.010063152760267258, -0.01781308837234974, 0.01301675383001566, 0.010017411783337593, -0.03097360022366047, -0.010553241707384586, 0.011526884511113167, -0.028699589893221855, 0.009135251864790916, -0.030424701049923897, 0.010808087885379791, -0.019969478249549866, -0.010102360509335995, 0.012716165743768215, -0.013225858099758625, -0.0035809141118079424, -0.026477854698896408, -0.021407071501016617, 0.004943360574543476, 0.0038586310110986233, 0.016832910478115082, -0.0010242852149531245, 0.006217590998858213, -0.00937049463391304, -0.02849048562347889, 0.004476142581552267, 0.0034012149553745985, 0.0334567166864872, -0.01991720125079155, 0.00563275208696723, 0.028255242854356766, 0.015787387266755104, -0.014676520600914955, 0.05000210925936699, 0.028595037758350372, -0.0007236975361593068, -0.008599421940743923, -0.055778618901968, 0.02294921688735485, 0.003803087631240487, 0.0016744694439694285, 0.006194720044732094, 0.00943583995103836, 0.02087124064564705, -0.02364187501370907, 0.006090167909860611, 0.019525131210684776, -0.009167924523353577, 0.005299491807818413, -0.01526462659239769, -0.001914612832479179, 0.01749943196773529, -0.005224344786256552, 0.014166828244924545, 0.016558460891246796, 0.01293833926320076, -0.013748619705438614, 0.01085382979363203, 0.006580256391316652, 0.018531884998083115, 0.0017888235161080956, -0.016911324113607407, 0.007338260300457478, -0.03358740732073784, 0.004319314379245043, -0.01125243492424488, -0.0066750068217515945, 0.03591369464993477, -0.002432473236694932, -0.015891941264271736, 0.01438900176435709, -0.011278572492301464, -0.020008685067296028, -0.01654539257287979, 0.01395772397518158, 0.028542760759592056, -0.004021993838250637, -0.01774774305522442, -0.04213455319404602, -0.00701153464615345, -0.0392070896923542, -0.01956433802843094, -0.022361110895872116, -0.006168582011014223, -0.01156609132885933, 0.0020224323961883783, -0.003489430993795395, 0.032202091068029404, 0.01408841460943222, 0.0059006670489907265, -0.023223666474223137, -0.015225419774651527, -0.026111921295523643, 0.006410358939319849, -0.014258312061429024, 0.04809403046965599, -0.014166828244924545, -0.0019178801449015737, 0.014179897494614124, 0.03358740732073784, -0.009135251864790916, 0.008050522767007351, 0.017264189198613167, 0.0005889231688342988, 0.0012840322451665998, 0.010520569048821926, -0.026922201737761497, -0.0006436497205868363, 0.0046166349202394485, 0.007174897473305464, -0.006629265379160643, 0.025419263169169426, -0.01721191219985485, -0.00513939606025815, 0.011526884511113167, -0.01351337693631649, 0.017630120739340782, -0.0029486999846994877, 0.008677835576236248, -0.011977765709161758, 0.00552819948643446, 0.019355233758687973, 0.00801785010844469, -0.0075800372287631035, 0.008514473214745522, -0.02587667852640152, -0.003561310702934861, -0.022857733070850372, -0.00301567860879004, -0.020923517644405365, -0.006057495251297951, 0.012480923905968666, 0.0014653649413958192, -0.013644067570567131, -0.005573941394686699, -0.023158321157097816, 0.01526462659239769, -0.0167283583432436, -0.009429304860532284, -0.012690028175711632, -0.012918735854327679, -0.015199282206594944, 0.018152883276343346, -0.0070180692709982395, -0.02922235056757927, -0.0204007551074028, 0.00701153464615345, 0.0077303312718868256, 0.007031138055026531, -0.018558021634817123, 0.0040121921338140965, -0.013722481206059456, -0.0034044822677969933, -0.027680205181241035, -0.01014810148626566, -0.035103414207696915, 0.03899798542261124, -0.004714652430266142, 0.0006122023914940655, -0.00424743490293622, -0.007939435541629791, 0.022361110895872116, 0.017538638785481453, 0.018976232036948204, -0.011324314400553703, 0.043676696717739105, 0.007174897473305464, -0.02734041027724743, -0.01829664222896099, 0.0026301422622054815, -0.010670863091945648, -0.01590500958263874, -0.034946586936712265, 0.0026105386205017567, 0.0350511372089386, 0.008592886850237846, 0.06294044852256775, -0.00517206871882081, -0.008207350969314575, 0.022256558761000633, 0.0024357405491173267, 0.020152444019913673, 0.030869048088788986, 0.006861240603029728, -0.026399441063404083, -0.024295326322317123, 0.025576092302799225, 0.005760174710303545, 0.02157696895301342, -0.024151567369699478, 0.026556268334388733, 0.005724234972149134, -0.041193582117557526, -0.0131474444642663, 0.010540172457695007, -0.015094729140400887, 0.01911999098956585, -0.03711604326963425, 0.019172266125679016, 0.004753859713673592, -0.011206693015992641, -0.0017675863346084952, 0.03499886393547058, 0.022896939888596535, -0.02109341509640217, -0.04806789383292198, -0.0029209281783550978, -0.006269867066293955, -0.0299542173743248, -0.010631656274199486, -0.012167266570031643, 0.0037508115638047457, 0.005694829858839512, 0.004116744268685579, 0.0062339273281395435, 0.015173143707215786, -0.013696343638002872, 0.014192966744303703, -0.006113038863986731, -0.012879529036581516, -0.017185773700475693, -0.015251558274030685, -0.004077537450939417, -0.016741426661610603, -0.034659069031476974], 'QueryEmbedding': [-0.005838225595653057, 0.013511702418327332, -0.028619274497032166, 0.0011528501054272056, -0.010366507805883884, 0.005043615121394396, -0.03034813515841961, -0.01645076274871826, 0.0029124633874744177, -0.041333042085170746, 0.011922481469810009, 0.023193316534161568, -0.007354302331805229, -0.02674412727355957, -0.001785379950888455, 0.03130565583705902, 0.00138724350836128, 0.01026676595211029, -0.0038799596950411797, -0.012015573680400848, -0.000941729755140841, 0.017674263566732407, -0.00048707291716709733, 0.013671289198100567, -0.0004729428328573704, 0.009182903915643692, 0.008664245717227459, -0.03846047446131706, -0.0025567172560840845, 0.01597200334072113, -0.0012035522377118468, -0.015892209485173225, 0.013099435716867447, -0.03973717242479324, -0.022129401564598083, 0.025879697874188423, 0.007227962836623192, -0.016597051173448563, 0.024709392338991165, 0.012813509441912174, 0.021890021860599518, 0.008444814011454582, -0.0011046414729207754, -0.006942036096006632, -0.002209282945841551, 0.015440045855939388, 0.0033862374257296324, -0.002684719394892454, 0.004830832593142986, -0.006579640321433544, 0.007886258885264397, 0.037582747638225555, -0.024177435785531998, -0.00792615581303835, -0.013737783767282963, 0.001041471608914435, 0.020812809467315674, -0.0012002275325357914, -0.004242355469614267, -0.014868192374706268, 0.02038724347949028, 0.02494877390563488, -0.01583901233971119, 0.014030360616743565, -0.02497537061572075, -0.004797585308551788, -0.02984277531504631, -0.002382169011980295, -0.011922481469810009, 0.016211383044719696, 0.008744039572775364, 0.028752263635396957, 0.01547994278371334, -0.01532035507261753, 0.00623719347640872, 0.009029966779053211, 0.005292970221489668, 0.017089111730456352, -0.012241655960679054, -0.014828295446932316, 0.025041865184903145, -0.008564503863453865, -0.010978258214890957, 0.0031884158961474895, 0.03322070091962814, 0.006902139168232679, -0.049312394112348557, 0.03867325931787491, -0.03215678781270981, -0.012966446578502655, 0.02856607921421528, 0.02199641242623329, 0.00685559306293726, -0.003173454664647579, 0.017647666856646538, 0.00017413272871635854, -0.017341790720820427, 0.02723618783056736, -0.00783306360244751, -0.020440438762307167, -0.03151844069361687, -0.00092261255485937, 0.0018751476891338825, -0.008757338859140873, -0.007075025234371424, 0.011583358980715275, -0.0033147556241601706, 0.0035009405110031366, 0.002498534508049488, 0.012035522609949112, -0.022408679127693176, 0.02037394419312477, 0.03324729949235916, -0.008192134089767933, 0.0045681786723434925, 0.00371372327208519, -0.014947985298931599, -0.024669496342539787, -0.022967234253883362, -0.008777286857366562, 0.011031453497707844, 0.021770332008600235, 0.000481670256704092, 0.0046812198124825954, 0.025188153609633446, -0.01877807453274727, -0.00778651749715209, -0.022222494706511497, -0.004747714381664991, -0.005359464790672064, 0.042476750910282135, 0.008537906222045422, 0.008650947362184525, 0.008025897666811943, -0.011922481469810009, 0.03689120337367058, -0.011290783062577248, 0.049312394112348557, -0.006692681461572647, -0.0007534669130109251, 0.011895883828401566, 0.008557855151593685, 0.020653221756219864, 0.00019324992899782956, 0.005814952775835991, 0.03657202795147896, 0.007553786505013704, 0.006004462018609047, -0.015346953645348549, 0.010313312523066998, 0.008624349720776081, -0.012866704724729061, 0.01988188549876213, -0.003504265332594514, 0.008218732662498951, -0.034630388021469116, -0.003993000835180283, -0.0007634410867467523, 0.00025662759435363114, -0.025161555036902428, -0.003397874068468809, 0.01844560168683529, 0.00027761494857259095, -0.02448331192135811, 0.005608819425106049, 0.04008294269442558, 0.020772911608219147, -0.011051402427256107, -0.012614024803042412, -0.020932499319314957, 0.010871866717934608, 0.003490966511890292, -0.01744818314909935, 0.010333260521292686, -0.002190996892750263, -0.0053727636113762856, 0.004185834899544716, -0.033194102346897125, 0.00011407979764044285, -0.017887046560645103, 0.017567873001098633, 0.012121965177357197, 0.005183253902941942, 0.006875541526824236, -0.0101005295291543, -0.0017870423616841435, -0.004980445373803377, -0.0009134695283137262, -0.00095835339743644, -0.019669102504849434, -0.0152405621483922, 0.034178223460912704, 0.0015742596006020904, -0.002405442064628005, -0.6374970078468323, -0.01714230701327324, -0.018312612548470497, -0.007081674877554178, 0.05042950436472893, -0.01907065138220787, -0.0011146157048642635, 0.014562317170202732, -0.021730434149503708, 0.032023798674345016, 0.008152238093316555, -0.009043265134096146, 0.005146681796759367, -0.005482479464262724, -0.002352246316149831, -0.0037203726824373007, -0.00840491708368063, -0.009907695464789867, -0.013185879215598106, 0.038566865026950836, -0.011616606265306473, 0.0032432740554213524, -0.028991645202040672, -0.000760531984269619, 0.007487291935831308, 0.010346559807658195, 0.024988669902086258, 0.005396036431193352, 0.012441139668226242, -0.000884378154296428, -0.04194479063153267, 0.020334048196673393, 0.015134170651435852, 0.004122665151953697, 0.038247693330049515, 0.02364547923207283, -0.014628811739385128, 0.014642110094428062, 0.010213570669293404, 0.03244936466217041, -0.042795922607183456, 0.005462531000375748, 0.006177348084747791, -0.010752176865935326, -0.0019100573845207691, 0.01986858621239662, -0.009116409346461296, -0.010945010930299759, 0.006915437988936901, -0.025228049606084824, 0.00447841128334403, -0.03143864497542381, -0.016344372183084488, -0.01566612720489502, 0.014309637248516083, 0.002229231409728527, 0.01679653488099575, -0.001949954079464078, 0.022727852687239647, 0.00945553183555603, -0.008850431069731712, 0.005768406204879284, 0.004973795730620623, -0.006659434176981449, -0.035188939422369, 0.009947591461241245, -0.006144100800156593, -0.020998993888497353, 0.01760776899755001, 0.00822538137435913, -0.018206220120191574, 0.017155606299638748, -0.004641322884708643, 0.005864823702722788, -0.004840806592255831, -0.002126164734363556, 0.049817752093076706, 0.005665339529514313, -0.010712279938161373, 0.007646878715604544, 0.010752176865935326, -0.016038497909903526, -0.0073410035111010075, -0.00906321406364441, 0.004372019786387682, -0.016597051173448563, -0.034630388021469116, 0.001041471608914435, 0.01665024645626545, 0.013671289198100567, -0.0014479198725894094, 0.009522026404738426, 0.006393455434590578, -0.011224288493394852, -0.012753663584589958, 0.02036064676940441, -0.017660966143012047, 0.003311431035399437, -0.017022617161273956, -0.049179404973983765, 0.007447395008057356, -0.0036106565967202187, -0.006110853515565395, 0.005509077571332455, 0.015759220346808434, 0.00045216327998787165, -0.010891814716160297, -0.00897677056491375, 0.032555755227804184, -0.03213018923997879, -0.006310337223112583, -0.03095988556742668, -0.002443676581606269, 0.008205433376133442, -0.010200271382927895, -0.022235793992877007, 0.036811407655477524, -0.006782448850572109, -0.00044302025344222784, -0.004714467097073793, 0.0016033509746193886, 0.034311212599277496, 0.013564897701144218, -0.02513495832681656, 0.0042656282894313335, 0.028778862208127975, -0.014389431104063988, 0.005941292271018028, -0.00742744654417038, 0.010153724811971188, 0.007267859764397144, 0.003557461081072688, 0.005635417066514492, -0.02856607921421528, 0.010812021791934967, -0.014894790016114712, 0.018179623410105705, -0.0015476617263630033, 0.013398661278188229, -0.02025425434112549, 0.010565991513431072, 0.012394593097269535, -0.0007551292655989528, -0.006157399620860815, 0.008983420208096504, -0.02167723886668682, -0.02917782962322235, 0.0018535369308665395, -0.009003368206322193, 0.020626625046133995, -0.018884465098381042, -0.015014479868113995, 0.005588870961219072, -0.0016881315968930721, 0.014682007022202015, -0.0028044097125530243, -0.0032382868230342865, -0.030880091711878777, 0.00697528338059783, -0.040029749274253845, -0.009189553558826447, 0.01695612259209156, 0.004471761640161276, 0.0028143839444965124, 0.003883284516632557, -0.014402730390429497, -0.032050397247076035, 0.02169053815305233, -0.0008594426908530295, -0.019469618797302246, 0.01861848682165146, -0.015134170651435852, 0.0012077081482857466, 0.0034942911006510258, 0.011762894690036774, -0.010499496944248676, -0.034018635749816895, 0.03226317837834358, 0.03976377099752426, -0.005582221318036318, -0.0007825582870282233, 0.02869906835258007, 0.01240124274045229, 0.0004646310117095709, 0.01695612259209156, 0.0004467605904210359, 0.00366717716678977, -4.902678028884111e-06, -0.026863817125558853, 0.03715718165040016, -0.02623876929283142, 0.03207699581980705, -0.03165142983198166, -0.013086136430501938, -0.012175160460174084, 0.024895576760172844, -0.01273371558636427, 0.006822345778346062, -0.015759220346808434, -0.005179929081350565, 0.009681613184511662, 0.030587514862418175, -0.005386062432080507, 0.005858174059540033, -0.0004729428328573704, 0.013591496273875237, -0.012181810103356838, -0.002131151966750622, 0.022461874410510063, 0.01157670933753252, 0.013392011635005474, -0.003876635106280446, -0.014775099232792854, -0.0141899473965168, 0.005552298855036497, 0.02118517830967903, -0.014974583871662617, 0.0005145019385963678, -0.0011004855623468757, 0.009980838745832443, 0.025999387726187706, 0.010679032653570175, 0.018365807831287384, -0.007866310887038708, -0.007174767088145018, 0.005329541862010956, 0.002646485110744834, 0.010865217074751854, 0.004717791918665171, -0.028113916516304016, -0.01695612259209156, 0.0037802178412675858, 0.02607918158173561, 0.0031052976846694946, -0.000939236197154969, 0.02675742655992508, 0.04588127136230469, -0.010825320146977901, 0.01044630166143179, -0.004554879851639271, -0.009668314829468727, 0.02936401404440403, 0.005449232179671526, -0.0150942737236619, 0.015918806195259094, -0.005698587279766798, 0.02655794285237789, 0.008178835734724998, -0.012248304672539234, 0.005964565556496382, 0.013657990843057632, -5.2234623581171036e-05, -0.019283432513475418, -0.0006940373568795621, 0.0040428717620670795, -0.020121265202760696, -0.031199265271425247, 0.015759220346808434, 0.01811312884092331, 0.029417209327220917, 0.028938449919223785, -0.00664281053468585, 0.02252836897969246, 0.008664245717227459, 0.007281158585101366, 0.03393884375691414, -0.010991557501256466, 0.012534231878817081, 0.0025018593296408653, -0.02494877390563488, 0.021424559876322746, -0.012507634237408638, 0.04207778349518776, -0.020998993888497353, -0.006290388759225607, -0.017567873001098633, 0.005974539555609226, 0.025321142747998238, -0.006380156613886356, 0.01613158918917179, -0.013278971426188946, -0.052450940012931824, 0.016849732026457787, 0.019310031086206436, -0.008850431069731712, -0.004305525217205286, 0.013844175264239311, -0.008650947362184525, -0.01566612720489502, 0.003411172889173031, 0.018020035699009895, 0.02283424511551857, -0.02102559246122837, 0.003939805086702108, 0.009814602322876453, 0.01762106828391552, 0.0395243875682354, -0.006563016679137945, -0.007753270212560892, 0.015732621774077415, -0.02101229317486286, -0.006084255874156952, -0.023711973801255226, -0.0015609606634825468, 0.03263554722070694, 0.0015991950640454888, -0.03476337715983391, -0.02379176765680313, 0.011776193045079708, -0.006815696135163307, -0.032369568943977356, 0.008251979947090149, -0.0037702436093240976, 0.013897370547056198, 0.0016798197757452726, 0.008664245717227459, -0.012135264463722706, 0.02216929942369461, 0.034470800310373306, 0.014628811739385128, -0.002222581999376416, -0.033513277769088745, 0.004827507771551609, 0.012195109389722347, 0.012846756726503372, -0.028592677786946297, -0.04130644351243973, 0.0017820552457123995, -0.02933741733431816, -0.004837482236325741, -0.011629905551671982, 0.005854849237948656, 0.01630447618663311, 0.006622862070798874, -0.04888682812452316, -0.016557155176997185, 0.014256441965699196, -0.016397567465901375, 0.028167111799120903, 0.01957600936293602, 0.002355571137741208, -0.02218259871006012, 0.006539743859320879, -0.017873747274279594, -0.0032931449823081493, 0.013604794628918171, -8.426112617598847e-05, 0.011749595403671265, 0.013737783767282963, 0.01354494970291853, 0.056547004729509354, 0.005176604259759188, 0.01942972093820572, -0.014336234889924526, -0.029470406472682953, 0.01633107289671898, 0.005698587279766798, 0.01645076274871826, 0.0119091821834445, 0.02560042031109333, -0.00530626904219389, 0.0029074763879179955, -0.003683800809085369, 0.00029527756851166487, 0.022634761407971382, 0.02936401404440403, 0.002777811838313937, -0.012175160460174084, 0.0257733054459095, 0.0008182991296052933, -0.008059144951403141, 0.01582571491599083, 0.010486197657883167, -0.0005726847448386252, -0.01050614658743143, 0.005811627954244614, -0.013518352061510086, 0.032688744366168976, -0.007174767088145018, 0.0046812198124825954, -0.036811407655477524, 0.002362220548093319, -0.012899952009320259, -0.04761013388633728, -0.0110048558562994, 0.003683800809085369, 0.012979745864868164, -0.019044052809476852, -0.008730740286409855, -0.015785817056894302, -0.01393726747483015, -0.019190341234207153, -0.012667221017181873, 0.004501684103161097, -0.03420482203364372, -0.03617306053638458, -0.005598844960331917, -0.001614156411960721, 0.03819449618458748, 0.0004999562515877187, 0.02560042031109333, 0.000209769670618698, -0.017700862139463425, 0.03364626690745354, -0.02641165442764759, -0.03186421096324921, -0.012853405438363552, -0.03441760316491127, -0.0011187716154381633, -0.0003576162562239915, -0.020267553627490997, 0.004963821731507778, 0.005492453929036856, -0.009887746535241604, -0.006021085660904646, -0.013471805490553379, 0.025839800015091896, -0.015293757431209087, 0.03441760316491127, -0.01216186210513115, -0.006094229873269796, -0.007533838041126728, 0.008092392235994339, -0.012620674446225166, 0.013897370547056198, -0.00871744193136692, -0.011882584542036057, -0.0162911769002676, 0.011031453497707844, 0.004225731827318668, 0.0001782886392902583, -0.016078393906354904, 0.003683800809085369, -0.009601820260286331, 0.012414541095495224, -0.005302944220602512, 0.019017454236745834, -0.022927338257431984, 0.018658384680747986, 0.004674570169299841, 0.021118683740496635, -0.005123408976942301, 0.014442626386880875, -0.011955728754401207, -0.0058947461657226086, 0.001606675679795444, 0.01779395528137684, -0.0015617918688803911, -0.03207699581980705, 0.01973559707403183, 0.0002057176607195288, 0.0049172756262123585, 0.006084255874156952, 0.016025198623538017, -0.005419309716671705, 0.005529026035219431, -0.014455925673246384, -0.03266214579343796, -0.020600026473402977, -0.00399965001270175, -0.013225775212049484, 0.03175782039761543, -0.010326610878109932, -0.02122507616877556, -0.03348667919635773, -0.02218259871006012, -0.010366507805883884, 0.009608468972146511, -0.025813203305006027, -0.023100223392248154, 0.0089036263525486, -0.003936480265110731, 0.014828295446932316, 0.019216937944293022, 0.03260895237326622, -0.007387549616396427, -0.02578660473227501, -0.012899952009320259, -0.032396167516708374, -0.030135352164506912, 0.010260116308927536, -0.011796141974627972, 0.017501378431916237, 0.016264578327536583, 0.05085507035255432, 0.011516864411532879, 0.024656197056174278, -0.017647666856646538, -0.018485497683286667, 0.01679653488099575, 0.01957600936293602, -0.005312918219715357, -0.011370575986802578, -0.008052496239542961, 0.01206876989454031, -0.006961984559893608, 0.01954941265285015, 0.009495428763329983, 0.0054060108959674835, 0.014123452827334404, -0.03311431035399437, -0.027129795402288437, -0.008112341165542603, -0.009103110060095787, -0.02040054276585579, 0.0024669496342539787, -0.0016100005013868213, 0.010645785368978977, -0.015360252000391483, -0.017009317874908447, 0.016676845028996468, -0.0047876108437776566, 0.005775055848062038, 0.014229844324290752, 0.051785994321107864, 0.00022192571486812085, 0.013631392270326614, -0.01889776438474655, -0.02021435834467411, -0.022568266838788986, 0.011809440329670906, -0.005987838376313448, -0.0018252767622470856, -0.004112690687179565, -0.000426812213845551, 0.04127984493970871, 0.00864429771900177, 0.005415984895080328, -0.01124423649162054, 0.011895883828401566, -0.008963472209870815, -0.014495822601020336, -0.01190253347158432, -0.015998600050807, -0.0161448884755373, -0.034976158291101456, -0.011696400120854378, -0.0018535369308665395, 0.019496215507388115, 0.01579911634325981, 0.0021245023235678673, 0.010472899302840233, 0.0132856210693717, -0.0346037894487381, -0.0010364844929426908, -0.022781049832701683, 0.03976377099752426, -0.015772517770528793, 0.0048208581283688545, 0.021158581599593163, 0.004514983389526606, -0.01986858621239662, 0.008152238093316555, -0.009342490695416927, -0.026943610981106758, 0.03673161566257477, 0.0200547706335783, -0.007168117444962263, -0.00889697764068842, -0.0009891071822494268, -0.001127914641983807, -0.02169053815305233, -0.01924353651702404, 0.014349534176290035, -0.011437070555984974, -0.002840981585904956, -0.02138466201722622, 0.004375344607979059, -0.004721116274595261, 0.004398617427796125, 0.0009334179339930415, -0.005535675212740898, 0.027608556672930717, -0.0038799596950411797, -0.01633107289671898, 0.0005706067895516753, -0.034816570580005646, 0.010938361287117004, -0.00664281053468585, 0.006004462018609047, -0.010652435012161732, 0.01796684041619301, -0.003730346914380789, 0.0012675533071160316, -0.014961284585297108, 0.007041777949780226, 0.019004156813025475, 0.006170698907226324, 0.00385668664239347, 0.005652040708810091, -0.010718929581344128, -0.003587383544072509, 0.0008818845963105559, 0.02819371037185192, -0.006336935330182314, -0.017261996865272522, -9.335218055639416e-05, 0.01763436757028103, 0.02250177226960659, -0.00538273761048913, -0.03117266669869423, -0.021477755159139633, -0.02885865606367588, -0.002053020754829049, 0.009561923332512379, -0.007540487218648195, 0.024363620206713676, 0.009721510112285614, -0.004408591892570257, -0.016583751887083054, -0.03311431035399437, -0.0009741458343341947, 0.013039590790867805, -0.01645076274871826, 0.004997069016098976, 0.012288201600313187, 0.005558948498219252, -0.008584452793002129, 0.0023239862639456987, -0.031412046402692795, 0.004006299655884504, 0.00914300698786974, -0.02218259871006012, -0.015267159789800644, 0.00011428759171394631, -0.01107800006866455, -0.04766332730650902, 0.007587033789604902, -0.012427840381860733, -0.0021544250193983316, 0.002992257010191679, -0.004651297349482775, -0.0013032940914854407, -0.006513145752251148, 0.009555273689329624, 0.005755107384175062, -0.004721116274595261, -0.018352508544921875, 0.018153024837374687, 0.004807559307664633, 0.015785817056894302, -0.009701562114059925, 0.008232031017541885, 0.02872566692531109, -0.012035522609949112, -0.024017848074436188, 0.006662758532911539, 0.0028027473017573357, 0.02689041569828987, -0.011011505499482155, -0.012946498580276966, 0.0030022310093045235, -0.026970209553837776, -0.008757338859140873, -0.024735990911722183, -0.000853624427691102, -0.008983420208096504, -0.0025966139510273933, -0.03893923759460449, -0.026212170720100403, 0.0003303950361441821, 0.027156393975019455, 0.010173673741519451, -0.015506540425121784, 0.01149691641330719, -0.008983420208096504, -0.006659434176981449, 0.020626625046133995, -0.0012816833332180977, -0.0077798678539693356, -0.019708998501300812, -0.006446651183068752, -0.05316907912492752, -0.0028592676389962435, -0.018153024837374687, 0.019443020224571228, -0.012274903245270252, -0.007068375591188669, 0.002586639951914549, 0.006739227566868067, -0.013671289198100567, -0.02006806991994381, 0.001623299322091043, 0.007733321748673916, 0.005116759333759546, 0.0014071919722482562, -0.004714467097073793, 0.003919856622815132, -0.010951660573482513, -0.01395056676119566, -0.0528499074280262, 0.024110941216349602, 0.0043487465009093285, 0.016370970755815506, 0.03800831362605095, -0.026491448283195496, -0.006715954281389713, -0.014814996160566807, -0.002116190502420068, 0.01582571491599083, -0.0013814253034070134, 0.020812809467315674, -0.0033430159091949463, -0.005495778750628233, -0.0019981625955551863, 0.0031601558439433575, 0.02448331192135811, -0.010605888441205025, -0.004574828315526247, -0.03550811484456062, 0.0051200841553509235, 0.0035109147429466248, 0.019150443375110626, 0.0008502996643073857, -0.011550111696124077, 0.00021070476213935763, -0.009827901609241962, 0.015945404767990112, -0.023219913244247437, -0.017647666856646538, 0.0011420446680858731, 0.01808653026819229, 0.01891106367111206, 0.012261603958904743, -0.0132856210693717, 0.041519228368997574, 0.011516864411532879, -0.0010356534039601684, 0.010585940442979336, -0.015147469006478786, -0.009834551252424717, 0.0023904808331280947, -0.0034843168687075377, -0.0034676932264119387, 0.003289820160716772, -0.0322897769510746, -0.009954241104424, 0.0041259899735450745, -0.013884072192013264, -0.026052583009004593, -0.010240168310701847, -0.052450940012931824, 0.021304870024323463, 0.006476573646068573, 0.0004388643428683281, 0.012108665890991688, 0.013963866047561169, -0.005588870961219072, 0.011377225629985332, -0.020107965916395187, -0.004292226396501064, -0.037130583077669144, -0.04034892097115517, 0.02431042492389679, -0.01762106828391552, 0.008358370512723923, -0.02399125136435032, -0.006556367501616478, -0.005033641122281551, 0.030587514862418175, 0.20948457717895508, 0.01746148057281971, -0.025826502591371536, 0.027010105550289154, 0.01019362173974514, 0.005921343807131052, 0.021557549014687538, 0.002822695765644312, 0.004960496909916401, 0.025201452895998955, -0.009202851913869381, 0.02134476602077484, 0.031066276133060455, 0.007720022927969694, 0.02103889174759388, 0.009595170617103577, -0.032236579805612564, -0.015493241138756275, -0.03032153658568859, -0.009448882192373276, 0.020347347483038902, -0.0004317993007134646, -0.0022707905154675245, -0.013465155847370625, 0.02118517830967903, 0.0007659346447326243, -0.017155606299638748, -0.0021843474823981524, 0.04159902036190033, -0.018884465098381042, -0.0175944697111845, 0.0023938054218888283, 0.003229975001886487, 0.002383831422775984, 0.01336541399359703, -0.020121265202760696, 0.007899558171629906, -0.0017704187193885446, 0.017155606299638748, -0.01288000401109457, 0.01321247685700655, -0.0239646527916193, 0.020134564489126205, 0.0012243317905813456, -0.007394199259579182, 0.017009317874908447, 0.0056420667096972466, 0.004997069016098976, 0.017222100868821144, -0.006995231844484806, -0.01696942187845707, 0.010845269076526165, 0.012853405438363552, 0.02036064676940441, -0.006955334916710854, -0.003597357776015997, 0.022554967552423477, -0.015014479868113995, -0.016091693192720413, -0.0033097686246037483, -0.0054226345382630825, 0.02822030708193779, -0.026850517839193344, 0.0029257622081786394, -7.743633432255592e-07, -0.014030360616743565, -0.017873747274279594, 0.010413054376840591, -0.005568922497332096, -0.022714555263519287, 0.0014013736508786678, -0.038247693330049515, -0.006223894190043211, -0.01069233100861311, -0.0026614463422447443, -0.0006998556200414896, -0.0006919594015926123, 0.023911457508802414, 0.01941642351448536, 0.0012974758865311742, 0.003316418034955859, -0.024762587621808052, -0.010206921026110649, -0.01395056676119566, -0.00889697764068842, 0.003946454264223576, -0.019363226369023323, 0.0008577803382650018, -0.00042764339013956487, 0.0014736865414306521, 0.017727460712194443, -0.02232888527214527, -0.006287064403295517, -0.006935386452823877, 0.011297431774437428, 0.03994995355606079, 0.006742552388459444, -0.017660966143012047, -0.01666354574263096, -0.03133225440979004, -0.023618880659341812, 0.054073408246040344, 0.013584846630692482, -0.0015767531003803015, -0.014575615525245667, 0.011390524916350842, 0.0040727942250669, -0.003697099629789591, -0.00635688379406929, 0.0046812198124825954, -0.00619397172704339, -0.01892436295747757, -0.016171487048268318, -0.013312218710780144, -0.008790586143732071, -0.013631392270326614, -0.0026664333418011665, -0.001051445840857923, 0.01727529615163803, -0.007174767088145018, -0.0005016186041757464, -0.01762106828391552, 0.023233212530612946, 0.011536812409758568, -0.033513277769088745, 0.008172186091542244, -0.02234218455851078, 0.0026331860572099686, -0.006203946191817522, -0.049179404973983765, 0.007101622875779867, -0.00011969027400482446, 0.0043952930718660355, 0.000829520111437887, 0.016410866752266884, 0.015307056717574596, 0.010752176865935326, 0.01280685979872942, -0.02708989940583706, -0.022461874410510063, 0.00664613489061594, -0.010758825577795506, 0.004278927575796843, -0.010745527222752571, -0.0006134126451797783, -0.0243237242102623, 0.022953934967517853, 0.02856607921421528, -0.00889697764068842, -0.028433090075850487, -0.027847938239574432, -0.007952754385769367, 0.007753270212560892, 0.009428934194147587, 0.012899952009320259, 0.018804673105478287, -0.010499496944248676, -0.026491448283195496, 0.009967540390789509, -0.01532035507261753, -0.04064149782061577, -0.02478918619453907, 0.034630388021469116, 0.006715954281389713, -0.014495822601020336, -0.019669102504849434, -0.1688430905342102, 0.006875541526824236, 0.020626625046133995, -0.018817970529198647, 0.01763436757028103, 0.010792072862386703, 0.049312394112348557, 0.014642110094428062, -0.005276346579194069, 0.007746620569378138, 0.01663694903254509, -0.007573734503239393, -0.03494955971837044, -0.011935780756175518, 0.01566612720489502, -0.023592283949255943, 0.004628024064004421, 0.017155606299638748, 0.03835408389568329, 0.014482523314654827, 0.058462049812078476, 0.0005078524700365961, -0.009003368206322193, 0.011164442636072636, 0.019482918083667755, 0.01345185749232769, -0.006456625647842884, 0.010865217074751854, -0.006486548110842705, -0.04564189165830612, -0.0006840631831437349, -0.00016228837193921208, -0.007061726413667202, -0.020453738048672676, 0.0051034605130553246, 0.02037394419312477, -0.013225775212049484, -0.014376131817698479, -0.0006051008240319788, 0.008511308580636978, 0.0008091561612673104, 0.023751869797706604, 0.035135746002197266, 0.013584846630692482, 0.017421584576368332, 0.013245724141597748, 0.0178072527050972, -0.003085349453613162, 0.019443020224571228, -0.025028565898537636, 0.006346909329295158, -0.0390988253057003, 0.0024470011703670025, -0.0049172756262123585, 0.005043615121394396, 0.020826108753681183, 0.010825320146977901, 0.026225470006465912, -0.014123452827334404, -0.003783542662858963, 0.01956271007657051, -0.020506933331489563, -0.018046634271740913, -0.01288665272295475, -0.011157793924212456, -0.004661271348595619, -0.01647736132144928, 0.005808303132653236, -0.010140426456928253, 0.010878516361117363, -0.029231024906039238, -0.002777811838313937, -0.02169053815305233, 0.009262697771191597, 0.009887746535241604, 0.001861848752014339, -0.013505052775144577, 0.01905735209584236, 0.020134564489126205, -0.007886258885264397, -0.037290170788764954, 0.03917861729860306, 0.0020147862378507853, 0.010831969790160656, -0.01345185749232769, 0.02073301561176777, 0.007081674877554178, 0.005173279903829098, -0.006942036096006632, -0.003454394405707717, 0.020307449623942375, -0.04843466356396675, -0.01857859082520008, -0.009701562114059925, 0.03800831362605095, 0.017873747274279594, -0.02723618783056736, -0.010579290799796581, 0.017341790720820427, 0.00242705293931067, 0.011563410982489586, -0.025959491729736328, -0.05045609921216965, 0.026637736707925797, 0.0076734768226742744, 0.008431514725089073, -0.008517958223819733, 0.022461874410510063, 0.02968318946659565, -0.017847150564193726, -0.012301500886678696, 0.03197060152888298, -0.002069644397124648, 0.02661113813519478, 0.021637342870235443, 0.020932499319314957, -0.008531256578862667, -0.018139725551009178, -0.00954862404614687, 0.025866398587822914, 0.021092087030410767, -0.017035916447639465, 0.001239293022081256, 0.009236100129783154, 0.006699330639094114, 0.014469224959611893, -0.0645795539021492, -0.03569430112838745, 0.023711973801255226, 0.02822030708193779, -0.02449660934507847, 0.032848332077264786, -0.00542928371578455, 0.027023404836654663, -0.02625206671655178, 0.0217171348631382, 0.011523514054715633, -0.01369788683950901, -0.01051944587379694, -0.025387637317180634, 0.018179623410105705, 0.0036605275236070156, 0.010293363593518734, -0.03101308085024357, 0.005130058154463768, 0.004242355469614267, 0.0016681832494214177, -0.004272277932614088, 0.021251672878861427, -0.03598687797784805, -0.013671289198100567, 0.013923969119787216, -0.016171487048268318, 0.00664281053468585, 0.005918019451200962, 0.029257623478770256, -0.0033746007829904556, -0.00945553183555603, -0.004182510077953339, -0.007041777949780226, -0.013897370547056198, -0.00766682717949152, -0.042955510318279266, 0.012274903245270252, 0.008351721800863743, -0.016011899337172508, 0.00383341358974576, -0.003630605060607195, 0.00021569184900727123, -0.03226317837834358, -0.02529454417526722, -0.003913206979632378, -0.01857859082520008, 0.03181101754307747, 0.008378319442272186, -0.01004068460315466, 0.007128220982849598, -0.003760269610211253, 0.020187759771943092, -0.03739656135439873, -0.020600026473402977, 0.011217638850212097, 0.016051795333623886, 0.016091693192720413, -0.01760776899755001, 0.01666354574263096, -0.004272277932614088, 0.013152631931006908, 0.022581566125154495, 0.03250255808234215, 0.016437465324997902, 0.02085270546376705, -0.023193316534161568, -0.01581241562962532, 0.012328098528087139, -0.018844569101929665, -0.006001137662678957, 0.011550111696124077, -0.04335447773337364, -0.0005485804285854101, -0.01843230240046978, 0.026717528700828552, -0.03338028863072395, -0.015360252000391483, 0.005316243041306734, -0.01532035507261753, -0.010014086030423641, -0.02121177688241005, -0.02513495832681656, -0.012986394576728344, 0.029789580032229424, 0.021557549014687538, -0.0021544250193983316, 0.00037922701449133456, 0.004701168276369572, -0.02089260332286358, -0.013438558205962181, -0.007114922162145376, 0.046386633068323135, -0.02526794746518135, -0.004784286487847567, 0.011762894690036774, 0.026478148996829987, -0.002668095752596855, 0.017567873001098633, 0.007826413959264755, -0.011570059694349766, -0.005193227902054787, -0.08117660880088806, 0.00986114889383316, -0.0304811242967844, -0.0006632836302742362, 0.006649459712207317, 0.01181608997285366, 0.009947591461241245, -0.0044119167141616344, 0.00208294321782887, 0.011317380703985691, -0.03165142983198166, 0.005558948498219252, -0.01811312884092331, -0.001690625213086605, -0.006639485713094473, -0.003929830621927977, -0.011044752784073353, -0.00342779653146863, 0.008730740286409855, -0.022448576986789703, -0.006227219011634588, 0.005010367836803198, 0.009575221687555313, 0.015546437352895737, -0.012913251295685768, 0.001265890896320343, -0.012015573680400848, 0.009581871330738068, -0.015692725777626038, -0.00714151980355382, 0.0372103787958622, -0.01207541860640049, -0.005967890378087759, 0.02851288393139839, -0.015599632635712624, -0.027103198692202568, 0.0051865787245333195, 0.007194715552031994, 0.04529612138867378, -0.01442932803183794, -0.03635924682021141, -0.02415083721280098, -0.0051533314399421215, 0.0025899645406752825, -0.015533138066530228, 0.0030836870428174734, 0.01857859082520008, -0.002176035661250353, -0.003497615922242403, 0.022554967552423477, 0.019682401791214943, 0.01485489308834076, 0.014775099232792854, -0.014017061330378056, -0.005189903546124697, -0.036784812808036804, 0.01954941265285015, -0.007194715552031994, 0.04582807794213295, -0.00714151980355382, 0.015054376795887947, 0.03393884375691414, 0.054259590804576874, 0.02512165904045105, -0.004338772501796484, 0.012115315534174442, -0.011031453497707844, -0.00369045021943748, 0.031279057264328, -0.03314090892672539, -0.0020679819863289595, -0.010067282244563103, -0.0023938054218888283, -0.010745527222752571, 0.02267465740442276, -0.01288665272295475, -0.01182938925921917, 0.008970120921730995, -0.004827507771551609, 0.019629204645752907, 0.0036605275236070156, 0.028911851346492767, -0.02429712563753128, 0.01828601397573948, 0.02968318946659565, 0.05330206826329231, 0.0013440221082419157, 0.009196203202009201, 0.0027528763748705387, -0.02087930403649807, -0.014628811739385128, 0.0021560874301940203, -0.01876477524638176, -0.0012052145320922136, 0.006592939607799053, -0.0005410998128354549, -0.008019248954951763, -0.007853011600673199, -0.0019316680263727903, 0.018232818692922592, -0.007886258885264397, 0.006902139168232679, -0.012248304672539234, -0.015546437352895737, -0.02449660934507847, 0.026039283722639084, -0.023392800241708755, -0.040827684104442596, -0.0036937748081982136, -0.009129708632826805, 0.019456319510936737, 0.012853405438363552, 0.034523993730545044, 0.0035009405110031366, -0.005282995756715536, 0.005738483741879463, -0.014136751182377338, -0.013644691556692123, -0.029284220188856125, 0.015041078440845013, -0.011955728754401207, 0.011443720199167728, 0.0019349928479641676, 0.0029856073670089245, 0.014017061330378056, 0.031571634113788605, 0.003454394405707717, 0.008065794594585896, 0.03505595028400421, -0.008464762009680271, 0.00017631458467803895, 0.007460693828761578, -0.018817970529198647, -0.016716741025447845, -0.003414497710764408, -0.01109794806689024, -0.00978800468146801, 0.027289383113384247, -0.010818671435117722, 0.05596185475587845, -0.011842687614262104, -0.022102804854512215, 0.005582221318036318, 0.011722997762262821, 0.02706330083310604, 0.028938449919223785, 0.00906321406364441, -0.03298132121562958, -0.0544457770884037, 0.06160059571266174, -0.019629204645752907, 0.01676993817090988, -0.03763594105839729, 0.009043265134096146, 0.010752176865935326, -0.018857868388295174, -0.020985694602131844, 0.003750295378267765, 0.0014404392568394542, 0.008950172923505306, -0.010964958928525448, 0.010898464359343052, 0.0003717463696375489, -0.011204339563846588, -0.01288665272295475, 0.023246511816978455, 0.023273108527064323, -0.0015717661008238792, -0.04960497096180916, 0.018073230981826782, 0.0016465724911540747, -0.02332630567252636, -0.014682007022202015, 0.018206220120191574, -0.02008136920630932, 0.000137041206471622, -0.008857080712914467, 0.01877807453274727, 0.006725928746163845, 0.006067632231861353, 0.011071350425481796, -0.010698980651795864, -0.005113434512168169, -0.016184784471988678, -0.0015792467165738344, -0.013498403131961823, 0.004255654290318489, -0.009189553558826447], 'Id': 'SG93IG1hbnkgZGlmZmVyZW50IHByb2R1Y3QgY2F0ZWdvcmllcyBkbyB3ZSBoYXZlPw=='}\n", + "INFO:azure.core.pipeline.policies.http_logging_policy:Request URL: 'https://open-ai-vector-db.search.windows.net/indexes('text-2-sql-query-cache-index')/docs/search.index?api-version=REDACTED'\n", + "Request method: 'POST'\n", + "Request headers:\n", + " 'Content-Type': 'application/json'\n", + " 'Content-Length': '69724'\n", + " 'api-key': 'REDACTED'\n", + " 'Accept': 'application/json;odata.metadata=none'\n", + " 'x-ms-client-request-id': '5a0a4738-7141-11ef-99b1-0242ac110002'\n", + " 'User-Agent': 'azsdk-python-search-documents/11.6.0b4 Python/3.12.3 (Linux-5.15.153.1-microsoft-standard-WSL2-x86_64-with-glibc2.36)'\n", + "A body is sent with the request\n", + "INFO:azure.core.pipeline.policies.http_logging_policy:Response status: 200\n", + "Response headers:\n", + " 'Transfer-Encoding': 'chunked'\n", + " 'Content-Type': 'application/json; odata.metadata=none; odata.streaming=true; charset=utf-8'\n", + " 'Content-Encoding': 'REDACTED'\n", + " 'Vary': 'REDACTED'\n", + " 'Server': 'Microsoft-IIS/10.0'\n", + " 'Strict-Transport-Security': 'REDACTED'\n", + " 'Preference-Applied': 'REDACTED'\n", + " 'OData-Version': 'REDACTED'\n", + " 'request-id': '5a0a4738-7141-11ef-99b1-0242ac110002'\n", + " 'elapsed-time': 'REDACTED'\n", + " 'Strict-Transport-Security': 'REDACTED'\n", + " 'Date': 'Thu, 12 Sep 2024 19:58:17 GMT'\n" + ] } ], "source": [ - "await ask_question(\"What is the top performing product by quantity of units sold?\", history)" + "await ask_question(\"How many different product categories do we have?\", history)" ] }, { "cell_type": "code", - "execution_count": 12, + "execution_count": null, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ + "INFO:httpx:HTTP Request: POST https://open-ai-gpt-001.openai.azure.com/openai/deployments/text-embedding-ada-002/embeddings?api-version=2023-03-15-preview \"HTTP/1.1 200 OK\"\n", + "INFO:azure.core.pipeline.policies.http_logging_policy:Request URL: 'https://open-ai-vector-db.search.windows.net/indexes('text-2-sql-query-cache-index')/docs/search.post.search?api-version=REDACTED'\n", + "Request method: 'POST'\n", + "Request headers:\n", + " 'Content-Type': 'application/json'\n", + " 'Content-Length': '34763'\n", + " 'api-key': 'REDACTED'\n", + " 'Accept': 'application/json;odata.metadata=none'\n", + " 'x-ms-client-request-id': 'd0fb9ae2-713f-11ef-97cc-0242ac110002'\n", + " 'User-Agent': 'azsdk-python-search-documents/11.6.0b4 Python/3.12.3 (Linux-5.15.153.1-microsoft-standard-WSL2-x86_64-with-glibc2.36)'\n", + "A body is sent with the request\n", + "INFO:azure.core.pipeline.policies.http_logging_policy:Response status: 200\n", + "Response headers:\n", + " 'Transfer-Encoding': 'chunked'\n", + " 'Content-Type': 'application/json; odata.metadata=none; odata.streaming=true; charset=utf-8'\n", + " 'Content-Encoding': 'REDACTED'\n", + " 'Vary': 'REDACTED'\n", + " 'Server': 'Microsoft-IIS/10.0'\n", + " 'Strict-Transport-Security': 'REDACTED'\n", + " 'Preference-Applied': 'REDACTED'\n", + " 'OData-Version': 'REDACTED'\n", + " 'request-id': 'd0fb9ae2-713f-11ef-97cc-0242ac110002'\n", + " 'elapsed-time': 'REDACTED'\n", + " 'Strict-Transport-Security': 'REDACTED'\n", + " 'Date': 'Thu, 12 Sep 2024 19:47:17 GMT'\n", "INFO:root:Question: Which country did we sell the most to in June 2008?\n", "INFO:semantic_kernel.functions.kernel_function:Function ChatBot-Chat invoking.\n", "INFO:semantic_kernel.contents.chat_history:Could not parse prompt \n", @@ -816,7 +999,14 @@ "\n", "\n", " [SQL DATABASE INFORMATION]\n", - " Use the 'GetEntitySchema()' function to search for the most relevant schemas for the data that you wish to obtain. Use the 'RunSQLQuery()' function to run the SQL query against the database.\n", + " First look at the cached queries, SQL templates and schemas to see if you can use them to formulate a SQL query. If you can't find a suitable query, use the 'GetEntitySchema()' function to search for the most relevant schemas for the data that you wish to obtain.\n", + "\n", + " [BEGIN QUERY CACHE]\n", + " []\n", + " [END QUERY CACHE]\n", + " \n", + "\n", + " Use the 'RunSQLQuery()' function to run the SQL query against the database.\n", "\n", " Output corresponding text values in the answer for columns where there is an ID. For example, if the column is 'ProductID', output the corresponding 'ProductModel' in the response. Do not include the ID in the response.\n", " If a user is asking for a comparison, always compare the relevant values in the database.\n", @@ -824,13 +1014,11 @@ " The target database engine is Microsoft TSQL Server, SQL queries must be able compatible to run on Microsoft TSQL Server. \n", " The following Microsoft TSQL Server Syntax rules must be adhered to.\n", " Use TOP X to limit the number of rows returned instead of LIMIT X. NEVER USE LIMIT X as it produces a syntax error.\n", - " Always generate the SQL query based on the GetEntitySchema() function output, do not use the chat history data to generate the SQL query.\n", - " Only use the column names obtained from GetEntitySchema() when constructing a SQL query, do not make up column names.\n", " You must only provide SELECT SQL queries.\n", - " For a given entity, use the 'SelectFromEntity' property returned from 'GetEntitySchema()' function in the SELECT FROM part of the SQL query. If the property is {'SelectFromEntity': 'test_schema.test_table'}, the select statement will be formulated from 'SELECT <VALUES> FROM test_schema.test_table WHERE <CONDITION>.\n", + " For a given entity, use the 'SelectFromEntity' property returned in the schema in the SELECT FROM part of the SQL query. If the property is {'SelectFromEntity': 'test_schema.test_table'}, the select statement will be formulated from 'SELECT <VALUES> FROM test_schema.test_table WHERE <CONDITION>.\n", "\n", " If you don't know how the value is formatted in a column, run a query against the column to get the unique values that might match your query.\n", - " Some columns returned from 'GetEntitySchema()' may have the properties 'AllowedValues' or 'SampleValues'. Use these values to determine the possible values that can be used in the SQL query.\n", + " Some columns in the schema may have the properties 'AllowedValues' or 'SampleValues'. Use these values to determine the possible values that can be used in the SQL query.\n", "\n", " The source title to cite is the 'EntityName' property. The source reference is the SQL query used. The source chunk is the result of the SQL query used to answer the user query in Markdown table format. e.g. { 'title': "vProductAndDescription", 'chunk': '| ProductID | Name | ProductModel | Culture | Description |\\n|-----------|-------------------|--------------|---------|----------------------------------|\\n| 101 | Mountain Bike | MT-100 | en | A durable bike for mountain use. |\\n| 102 | Road Bike | RB-200 | en | Lightweight bike for road use. |\\n| 103 | Hybrid Bike | HB-300 | fr | V\u00e9lo hybride pour usage mixte. |\\n', 'reference': 'SELECT ProductID, Name, ProductModel, Culture, Description FROM vProductAndDescription WHERE Culture = "en";' }\n", " [END SQL DATABASE INFORMATION]\n", @@ -840,10 +1028,11 @@ "\n", "[RESPONSE OUTPUT REQUIREMENTS]\n", "\n", - " The answer MUST be returned in JSON format as { \"answer\": \"\", \"sources\": [ {\"title\": , \"chunk\": , \"reference\": \"\"}, {\"title\": , \"chunk\": , \"reference\": \"\"} ] }.\n", + " The answer MUST be returned in JSON format as { \"answer\": \"\", \"sources\": [ {\"title\": , \"chunk\": , \"reference\": \"\"}, {\"title\": , \"chunk\": , \"reference\": \"\"} ], \"schemas\": [ ] }.\n", "\n", " The 'answer' property MUST meet the requirements in the ANSWER PROPERTY REQUIREMENTS.\n", " The 'sources' property MUST meet the requirements in the SOURCES PROPERTY REQUIREMENTS.\n", + " The 'schemas' property MUST meet the requirements in the SCHEMAS PROPERTY REQUIREMENTS.\n", "\n", " Do NOT return anything outside of the provided JSON property. Ensure that this is valid JSON returned.\n", "\n", @@ -886,6 +1075,15 @@ " Citations should be embedded within the text, not as a separate list at the end of the 'answer' property.\n", " [END ANSWER PROPERTY REQUIREMENTS]\n", "\n", + " [SCHEMAS PROPERTY REQUIREMENTS]\n", + " 1. Inclusion Criteria:\n", + " If you used a schema obtained from 'GetEntitySchemas' function, it must be returned in the 'schemas' property. The 'schemas' property should contain a list of all the schemas used to create the SQL query.\n", + "\n", + " 3. Schema Format:\n", + " Each schema entry should be formatted as: {\"Entity\": \"\", \"Columns\", [ {\"Name\": \"\", \"Definition\": , \"Type\": \"\" } ]}. This is the same format as the 'GetEntitySchemas' function output. Simply copy the schema from the function output to the 'schemas' property and remove the not needed properties.\n", + "\n", + " [END SCHEMAS PROPERTY REQUIREMENTS]\n", + "\n", " [SOURCES PROPERTY REQUIREMENTS]\n", " 1. Reference Inclusion:\n", " Include all corresponding references for all cited content in the 'answer' property.\n", @@ -906,11 +1104,11 @@ "[END RESPONSE OUTPUT REQUIREMENTS]\n", "\n", "What are the different product categories we have?What is the top performing product by quantity of units sold?\n", - "Which country did we sell the most to in June 2008? as xml, treating as text, error was: not well-formed (invalid token): line 41, column 78\n", + "Which country did we sell the most to in June 2008? as xml, treating as text, error was: not well-formed (invalid token): line 46, column 78\n", "INFO:httpx:HTTP Request: POST https://open-ai-gpt-001.openai.azure.com/openai/deployments/gpt-4o/chat/completions?api-version=2024-02-01 \"HTTP/1.1 200 OK\"\n", - "INFO:semantic_kernel.connectors.ai.open_ai.services.open_ai_handler:OpenAI usage: CompletionUsage(completion_tokens=58, prompt_tokens=1878, total_tokens=1936)\n", + "INFO:semantic_kernel.connectors.ai.open_ai.services.open_ai_handler:OpenAI usage: CompletionUsage(completion_tokens=55, prompt_tokens=2051, total_tokens=2106)\n", "INFO:semantic_kernel.connectors.ai.open_ai.services.open_ai_chat_completion_base:processing 2 tool calls in parallel.\n", - "INFO:semantic_kernel.kernel:Calling SQL-GetEntitySchema function with args: {\"text\": \"sales by country in June 2008\"}\n", + "INFO:semantic_kernel.kernel:Calling SQL-GetEntitySchema function with args: {\"text\": \"sales by country and date\"}\n", "INFO:semantic_kernel.functions.kernel_function:Function SQL-GetEntitySchema invoking.\n", "INFO:semantic_kernel.kernel:Calling SQL-GetEntitySchema function with args: {\"text\": \"sales data\"}\n", "INFO:semantic_kernel.functions.kernel_function:Function SQL-GetEntitySchema invoking.\n", @@ -919,10 +1117,10 @@ "Request method: 'POST'\n", "Request headers:\n", " 'Content-Type': 'application/json'\n", - " 'Content-Length': '34658'\n", + " 'Content-Length': '34766'\n", " 'api-key': 'REDACTED'\n", " 'Accept': 'application/json;odata.metadata=none'\n", - " 'x-ms-client-request-id': '4b5adb26-706a-11ef-ae73-0242ac110002'\n", + " 'x-ms-client-request-id': 'd1c04da6-713f-11ef-97cc-0242ac110002'\n", " 'User-Agent': 'azsdk-python-search-documents/11.6.0b4 Python/3.12.3 (Linux-5.15.153.1-microsoft-standard-WSL2-x86_64-with-glibc2.36)'\n", "A body is sent with the request\n", "INFO:httpx:HTTP Request: POST https://open-ai-gpt-001.openai.azure.com/openai/deployments/text-embedding-ada-002/embeddings?api-version=2023-03-15-preview \"HTTP/1.1 200 OK\"\n", @@ -930,10 +1128,10 @@ "Request method: 'POST'\n", "Request headers:\n", " 'Content-Type': 'application/json'\n", - " 'Content-Length': '34688'\n", + " 'Content-Length': '34658'\n", " 'api-key': 'REDACTED'\n", " 'Accept': 'application/json;odata.metadata=none'\n", - " 'x-ms-client-request-id': '4b65b654-706a-11ef-ae73-0242ac110002'\n", + " 'x-ms-client-request-id': 'd1c7197e-713f-11ef-97cc-0242ac110002'\n", " 'User-Agent': 'azsdk-python-search-documents/11.6.0b4 Python/3.12.3 (Linux-5.15.153.1-microsoft-standard-WSL2-x86_64-with-glibc2.36)'\n", "A body is sent with the request\n", "INFO:azure.core.pipeline.policies.http_logging_policy:Response status: 200\n", @@ -946,12 +1144,12 @@ " 'Strict-Transport-Security': 'REDACTED'\n", " 'Preference-Applied': 'REDACTED'\n", " 'OData-Version': 'REDACTED'\n", - " 'request-id': '4b5adb26-706a-11ef-ae73-0242ac110002'\n", + " 'request-id': 'd1c7197e-713f-11ef-97cc-0242ac110002'\n", " 'elapsed-time': 'REDACTED'\n", " 'Strict-Transport-Security': 'REDACTED'\n", - " 'Date': 'Wed, 11 Sep 2024 18:18:52 GMT'\n", + " 'Date': 'Thu, 12 Sep 2024 19:47:19 GMT'\n", "INFO:semantic_kernel.functions.kernel_function:Function SQL-GetEntitySchema succeeded.\n", - "INFO:semantic_kernel.functions.kernel_function:Function completed. Duration: 0.427427s\n", + "INFO:semantic_kernel.functions.kernel_function:Function completed. Duration: 0.489950s\n", "INFO:azure.core.pipeline.policies.http_logging_policy:Response status: 200\n", "Response headers:\n", " 'Transfer-Encoding': 'chunked'\n", @@ -962,55 +1160,32 @@ " 'Strict-Transport-Security': 'REDACTED'\n", " 'Preference-Applied': 'REDACTED'\n", " 'OData-Version': 'REDACTED'\n", - " 'request-id': '4b65b654-706a-11ef-ae73-0242ac110002'\n", + " 'request-id': 'd1c04da6-713f-11ef-97cc-0242ac110002'\n", " 'elapsed-time': 'REDACTED'\n", " 'Strict-Transport-Security': 'REDACTED'\n", - " 'Date': 'Wed, 11 Sep 2024 18:18:52 GMT'\n", + " 'Date': 'Thu, 12 Sep 2024 19:47:19 GMT'\n", "INFO:semantic_kernel.functions.kernel_function:Function SQL-GetEntitySchema succeeded.\n", - "INFO:semantic_kernel.functions.kernel_function:Function completed. Duration: 0.501665s\n", + "INFO:semantic_kernel.functions.kernel_function:Function completed. Duration: 0.575687s\n", "INFO:httpx:HTTP Request: POST https://open-ai-gpt-001.openai.azure.com/openai/deployments/gpt-4o/chat/completions?api-version=2024-02-01 \"HTTP/1.1 200 OK\"\n", - "INFO:semantic_kernel.connectors.ai.open_ai.services.open_ai_handler:OpenAI usage: CompletionUsage(completion_tokens=74, prompt_tokens=5848, total_tokens=5922)\n", + "INFO:semantic_kernel.connectors.ai.open_ai.services.open_ai_handler:OpenAI usage: CompletionUsage(completion_tokens=91, prompt_tokens=8543, total_tokens=8634)\n", "INFO:semantic_kernel.connectors.ai.open_ai.services.open_ai_chat_completion_base:processing 1 tool calls in parallel.\n", - "INFO:semantic_kernel.kernel:Calling SQL-RunSQLQuery function with args: {\"sql_query\":\"SELECT TOP 1 ShipToAddressID, SUM(TotalDue) as TotalSales FROM SalesLT.SalesOrderHeader WHERE OrderDate BETWEEN '2008-06-01' AND '2008-06-30' GROUP BY ShipToAddressID ORDER BY TotalSales DESC;\"}\n", + "INFO:semantic_kernel.kernel:Calling SQL-RunSQLQuery function with args: {\"sql_query\":\"SELECT TOP 1 A.CountryRegion, SUM(H.TotalDue) AS TotalSales FROM SalesLT.SalesOrderHeader H INNER JOIN SalesLT.Address A ON H.ShipToAddressID = A.AddressID WHERE H.OrderDate BETWEEN '2008-06-01' AND '2008-06-30' GROUP BY A.CountryRegion ORDER BY TotalSales DESC;\"}\n", "INFO:semantic_kernel.functions.kernel_function:Function SQL-RunSQLQuery invoking.\n", "INFO:root:Executing SQL Query\n", "INFO:semantic_kernel.functions.kernel_function:Function SQL-RunSQLQuery succeeded.\n", - "INFO:semantic_kernel.functions.kernel_function:Function completed. Duration: 0.269046s\n", - "INFO:httpx:HTTP Request: POST https://open-ai-gpt-001.openai.azure.com/openai/deployments/gpt-4o/chat/completions?api-version=2024-02-01 \"HTTP/1.1 429 Too Many Requests\"\n", - "INFO:openai._base_client:Retrying request to /chat/completions in 17.000000 seconds\n", + "INFO:semantic_kernel.functions.kernel_function:Function completed. Duration: 0.689865s\n", "INFO:httpx:HTTP Request: POST https://open-ai-gpt-001.openai.azure.com/openai/deployments/gpt-4o/chat/completions?api-version=2024-02-01 \"HTTP/1.1 200 OK\"\n", - "INFO:semantic_kernel.connectors.ai.open_ai.services.open_ai_handler:OpenAI usage: CompletionUsage(completion_tokens=40, prompt_tokens=5955, total_tokens=5995)\n", - "INFO:semantic_kernel.connectors.ai.open_ai.services.open_ai_chat_completion_base:processing 1 tool calls in parallel.\n", - "INFO:semantic_kernel.kernel:Calling SQL-RunSQLQuery function with args: {\"sql_query\":\"SELECT AddressLine1, City, StateProvince, CountryRegion FROM SalesLT.Address WHERE AddressID = 659;\"}\n", - "INFO:semantic_kernel.functions.kernel_function:Function SQL-RunSQLQuery invoking.\n", - "INFO:root:Executing SQL Query\n", - "INFO:semantic_kernel.functions.kernel_function:Function SQL-RunSQLQuery succeeded.\n", - "INFO:semantic_kernel.functions.kernel_function:Function completed. Duration: 0.419786s\n", - "INFO:httpx:HTTP Request: POST https://open-ai-gpt-001.openai.azure.com/openai/deployments/gpt-4o/chat/completions?api-version=2024-02-01 \"HTTP/1.1 200 OK\"\n", - "INFO:semantic_kernel.connectors.ai.open_ai.services.open_ai_handler:OpenAI usage: CompletionUsage(completion_tokens=266, prompt_tokens=6048, total_tokens=6314)\n", + "INFO:semantic_kernel.connectors.ai.open_ai.services.open_ai_handler:OpenAI usage: CompletionUsage(completion_tokens=1323, prompt_tokens=8666, total_tokens=9989)\n", "INFO:semantic_kernel.functions.kernel_function:Function ChatBot-Chat succeeded.\n", - "INFO:semantic_kernel.functions.kernel_function:Function completed. Duration: 25.101880s\n", - "INFO:root:Answer: { \n", - " \"answer\": \"The country where we sold the most in June 2008 is the United Kingdom, specifically to an address in Woolston, England [1][2].\", \n", - " \"sources\": [ \n", - " { \n", - " \"title\": \"Sales Order Header\", \n", - " \"chunk\": \"| ShipToAddressID | TotalSales |\\n|-----------------|----------------|\\n| 659 | 119960.8240 |\\n\", \n", - " \"reference\": \"SELECT TOP 1 ShipToAddressID, SUM(TotalDue) as TotalSales FROM SalesLT.SalesOrderHeader WHERE OrderDate BETWEEN '2008-06-01' AND '2008-06-30' GROUP BY ShipToAddressID ORDER BY TotalSales DESC;\" \n", - " }, \n", - " { \n", - " \"title\": \"Address\", \n", - " \"chunk\": \"| AddressLine1 | City | StateProvince | CountryRegion |\\n|---------------------------|-----------|---------------|---------------|\\n| Warrington Ldc Unit 25/2 | Woolston | England | United Kingdom|\\n\", \n", - " \"reference\": \"SELECT AddressLine1, City, StateProvince, CountryRegion FROM SalesLT.Address WHERE AddressID = 659;\" \n", - " } \n", - " ] \n", - "}\n" + "INFO:semantic_kernel.functions.kernel_function:Function completed. Duration: 16.777993s\n", + "INFO:root:Answer: { \"answer\": \"In June 2008, the country that we sold the most to was the United Kingdom, with total sales amounting to \u00a3572,496.56 [1].\", \"sources\": [ { \"title\": \"Sales Order Header\", \"chunk\": \"| CountryRegion | TotalSales |\\n|-------------------|--------------|\\n| United Kingdom | 572496.5594 |\\n\", \"reference\": \"SELECT TOP 1 A.CountryRegion, SUM(H.TotalDue) AS TotalSales FROM SalesLT.SalesOrderHeader H INNER JOIN SalesLT.Address A ON H.ShipToAddressID = A.AddressID WHERE H.OrderDate BETWEEN '2008-06-01' AND '2008-06-30' GROUP BY A.CountryRegion ORDER BY TotalSales DESC;\" } ], \"schemas\": [ { \"Entity\": \"SalesOrderHeader\", \"Columns\": [ { \"Name\": \"SalesOrderID\", \"Definition\": \"A unique identifier for each sales order. This ID is auto-generated and serves as the primary key for the SalesOrderHeader table.\", \"Type\": \"INT\" }, { \"Name\": \"OrderDate\", \"Definition\": \"The date and time when the sales order was created. This field is used to track when the order was initiated.\", \"Type\": \"DATETIME\" }, { \"Name\": \"DueDate\", \"Definition\": \"The date by which the order is expected to be fulfilled or delivered. It helps in managing delivery timelines.\", \"Type\": \"DATETIME\" }, { \"Name\": \"ShipDate\", \"Definition\": \"The date when the order was shipped to the customer. This is used for tracking shipping and fulfillment status.\", \"Type\": \"DATETIME\" }, { \"Name\": \"Status\", \"Definition\": \"The current status of the order, represented as a numeric code (e.g., 1 for In Progress, 2 for Completed, 3 for Canceled).\", \"Type\": \"TINYINT\", \"AllowedValues\": \"[1,2,3]\" }, { \"Name\": \"OnlineOrderFlag\", \"Definition\": \"Indicates whether the order was placed online.\", \"Type\": \"BIT\", \"AllowedValues\": \"[\\\"True\\\",\\\"False\\\"]\" }, { \"Name\": \"SalesOrderNumber\", \"Definition\": \"A unique order number assigned to the sales order. This is used for tracking and identification purposes.\", \"Type\": \"NVARCHAR(25)\" }, { \"Name\": \"PurchaseOrderNumber\", \"Definition\": \"The purchase order number provided by the customer. This field links the sales order to the customer's purchase order.\", \"Type\": \"NVARCHAR(25)\" }, { \"Name\": \"AccountNumber\", \"Definition\": \"The account number of the customer placing the order. This helps link the order to the customer's account.\", \"Type\": \"NVARCHAR(15)\" }, { \"Name\": \"CustomerID\", \"Definition\": \"A foreign key that links to the Customer table, representing the customer who placed the order.\", \"Type\": \"INT\" }, { \"Name\": \"ShipToAddressID\", \"Definition\": \"A foreign key that links to the Address table, representing the shipping address for the order.\", \"Type\": \"INT\" }, { \"Name\": \"BillToAddressID\", \"Definition\": \"A foreign key that links to the Address table, representing the billing address for the order.\", \"Type\": \"INT\" }, { \"Name\": \"ShipMethod\", \"Definition\": \"The shipping method used for the order (e.g., UPS, FedEx). This field helps track shipping preferences.\", \"Type\": \"NVARCHAR(50)\" }, { \"Name\": \"SubTotal\", \"Definition\": \"The total cost of the order before taxes and shipping charges. This field is used to calculate the final total. The currency is pound sterling (GBP).\", \"Type\": \"MONEY\" }, { \"Name\": \"TaxAmt\", \"Definition\": \"The tax amount applied to the order. This is calculated based on the order subtotal and applicable tax rates. The currency is pound sterling (GBP).\", \"Type\": \"MONEY\" }, { \"Name\": \"Freight\", \"Definition\": \"The shipping charge applied to the order. This field represents the cost of shipping the order to the customer. The currency is pound sterling (GBP).\", \"Type\": \"MONEY\" }, { \"Name\": \"TotalDue\", \"Definition\": \"The total amount due for the order, including all line items, taxes, and shipping charges. The currency is pound sterling (GBP).\", \"Type\": \"MONEY\" }, { \"Name\": \"Comment\", \"Definition\": \"Any additional comments or notes related to the sales order. This field can include special instructions or remarks.\", \"Type\": \"NVARCHAR(255)\" }, { \"Name\": \"ModifiedDate\", \"Definition\": \"The date and time when the sales order header record was last modified. This is used for tracking updates and changes to the order.\", \"Type\": \"DATETIME\" } ] }, { \"Entity\": \"Address\", \"Columns\": [ { \"Name\": \"AddressID\", \"Definition\": \"A unique identifier for each address. This ID is auto-generated and serves as the primary key for the Address table.\", \"Type\": \"INT\" }, { \"Name\": \"City\", \"Definition\": \"The city in which the address is located. This is used to specify the city for the address.\", \"Type\": \"NVARCHAR(30)\" }, { \"Name\": \"StateProvince\", \"Definition\": \"The state or province in which the address is located. This is used to specify the state or province for the address.\", \"Type\": \"NVARCHAR(50)\" }, { \"Name\": \"CountryRegion\", \"Definition\": \"The country or region in which the address is located. This is used to specify the country or region for the address.\", \"Type\": \"NVARCHAR(50)\" }, { \"Name\": \"PostalCode\", \"Definition\": \"The postal code associated with the address. This is used to specify the postal code for the address, which helps in geographical sorting and shipping.\", \"Type\": \"NVARCHAR(15)\" }, { \"Name\": \"ModifiedDate\", \"Definition\": \"The date and time when the address record was last modified. This is used for tracking updates and changes to the address information.\", \"Type\": \"DATETIME\" } ] } ] }\n", + "INFO:root:Time taken: 17.167546033859253\n" ] }, { "data": { "text/markdown": [ - "The country where we sold the most in June 2008 is the United Kingdom, specifically to an address in Woolston, England [1][2]." + "In June 2008, the country that we sold the most to was the United Kingdom, with total sales amounting to \u00a3572,496.56 [1]." ], "text/plain": [ "" @@ -1018,6 +1193,19 @@ }, "metadata": {}, "output_type": "display_data" + }, + { + "ename": "TypeError", + "evalue": "unhashable type: 'dict'", + "output_type": "error", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mTypeError\u001b[0m Traceback (most recent call last)", + "Cell \u001b[0;32mIn[18], line 1\u001b[0m\n\u001b[0;32m----> 1\u001b[0m \u001b[38;5;28;01mawait\u001b[39;00m ask_question(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mWhich country did we sell the most to in June 2008?\u001b[39m\u001b[38;5;124m\"\u001b[39m, history)\n", + "Cell \u001b[0;32mIn[15], line 60\u001b[0m, in \u001b[0;36mask_question\u001b[0;34m(question, chat_history)\u001b[0m\n\u001b[1;32m 58\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m query \u001b[38;5;129;01min\u001b[39;00m queries:\n\u001b[1;32m 59\u001b[0m entry \u001b[38;5;241m=\u001b[39m {\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mQuestion\u001b[39m\u001b[38;5;124m\"\u001b[39m: question, \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mQuery\u001b[39m\u001b[38;5;124m\"\u001b[39m: query, \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mSchemas\u001b[39m\u001b[38;5;124m\"\u001b[39m: json_answer[\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mschemas\u001b[39m\u001b[38;5;124m\"\u001b[39m]}\n\u001b[0;32m---> 60\u001b[0m \u001b[38;5;28;01mawait\u001b[39;00m add_entry_to_index(\n\u001b[1;32m 61\u001b[0m entry,\n\u001b[1;32m 62\u001b[0m json_answer[\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mschemas\u001b[39m\u001b[38;5;124m\"\u001b[39m],\n\u001b[1;32m 63\u001b[0m os\u001b[38;5;241m.\u001b[39menviron[\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mAIService__AzureSearchOptions__Text2SqlQueryCache__Index\u001b[39m\u001b[38;5;124m\"\u001b[39m],\n\u001b[1;32m 64\u001b[0m )\n", + "File \u001b[0;32m/workspaces/dstoolkit-text2sql-and-imageprocessing/text_2_sql/ai_search.py:77\u001b[0m, in \u001b[0;36madd_entry_to_index\u001b[0;34m(document, vector_fields, index_name)\u001b[0m\n\u001b[1;32m 0\u001b[0m \n", + "\u001b[0;31mTypeError\u001b[0m: unhashable type: 'dict'" + ] } ], "source": [ From 851f2a59d5c20688b79779ac21df690739c0b678 Mon Sep 17 00:00:00 2001 From: Ben Constable Date: Fri, 13 Sep 2024 14:56:01 +0100 Subject: [PATCH 09/17] Update of documentation --- deploy_ai_search/README.md | 12 ++++++ text_2_sql/README.md | 35 ++++++++++-------- .../OneShot SQL vs TwoShot SQL OpenAI.png | Bin 223764 -> 0 bytes text_2_sql/images/Text2SQL Approaches.png | Bin 0 -> 117922 bytes .../vector_based_sql_plugin.py | 2 +- 5 files changed, 32 insertions(+), 17 deletions(-) delete mode 100644 text_2_sql/images/OneShot SQL vs TwoShot SQL OpenAI.png create mode 100644 text_2_sql/images/Text2SQL Approaches.png diff --git a/deploy_ai_search/README.md b/deploy_ai_search/README.md index 874114a..0962cea 100644 --- a/deploy_ai_search/README.md +++ b/deploy_ai_search/README.md @@ -15,6 +15,8 @@ The associated scripts in this portion of the repository contains pre-built scri ## Steps for Text2SQL Index Deployment +### Entity Schema Index + 1. Update `.env` file with the associated values. Not all values are required dependent on whether you are using System / User Assigned Identities or a Key based authentication. 2. Adjust `text_2_sql.py` with any changes to the index / indexer. The `get_skills()` method implements the skills pipeline. Make any adjustments here in the skills needed to enrich the data source. 3. Run `deploy.py` with the following args: @@ -23,6 +25,16 @@ The associated scripts in this portion of the repository contains pre-built scri - `rebuild`. Whether to delete and rebuild the index. - `suffix`. Optional parameter that will apply a suffix onto the deployed index and indexer. This is useful if you want deploy a test version, before overwriting the main version. +### Query Cache Index + +1. Update `.env` file with the associated values. Not all values are required dependent on whether you are using System / User Assigned Identities or a Key based authentication. +2. Adjust `text_2_sql_query_cache.py` with any changes to the index. **There is no provided indexer or skillset for this cache, it is expected that application code will write directly to it.** +3. Run `deploy.py` with the following args: + + - `index_type text_2_sql_query_cache`. This selects the `Text2SQLQueryCacheAISearch` sub class. + - `rebuild`. Whether to delete and rebuild the index. + - `suffix`. Optional parameter that will apply a suffix onto the deployed index and indexer. This is useful if you want deploy a test version, before overwriting the main version. + ## ai_search.py & environment.py This includes a variety of helper files and scripts to deploy the index setup. This is useful for CI/CD to avoid having to write JSON files manually or use the UI to deploy the pipeline. diff --git a/text_2_sql/README.md b/text_2_sql/README.md index 523177c..eb3c1f2 100644 --- a/text_2_sql/README.md +++ b/text_2_sql/README.md @@ -6,7 +6,7 @@ The implementation is written for [Semantic Kernel](https://github.com/microsoft The sample provided works with Azure SQL Server, although it has been easily adapted to other SQL sources such as Snowflake. -**Two approaches are provided for schema management. A prompt based approach and a vector database based approach. See Multi-Shot Approach for more details** +**Three iterations on the approache are provided for SQL query generation. A prompt based approach and a two vector database based approaches. See Multi-Shot Approach for more details** ## High Level Workflow @@ -27,23 +27,28 @@ Generating SQL queries and executing them to provide context for the RAG applica ## Multi-Shot Approach -A common way to perform Text2SQL generation is to provide the complete schema information (either a full schema or a plain text description) inside the initial prompt. Whilst this works for small databases, there are issues with scalability as the number of tables and views exposed to the LLM increases: +A common way to perform Text2SQL generation _(Iteration 1)_ is to provide the complete schema information (either a full schema or a plain text description) inside the initial prompt. Whilst this works for small databases, there are issues with scalability as the number of tables and views exposed to the LLM increases: - More tables / views significantly increases the number of tokens used within the prompt and the cost of inference. - More schema information can cause confusion with the LLM. In our original use case, when exceeding 5 complex tables / views, we found that the LLM could get confused between which columns belonged to which entity and as such, would generate invalid SQL queries. -To solve these issues, a Multi-Shot approach is used: +To solve these issues, a Multi-Shot approach is developed. Below is the iterations of development on the Text2SQL query component. -![Comparison between a common Text2SQL approach and a Multi-Shot Text2SQL approach.](./images/OneShot%20SQL%20vs%20TwoShot%20SQL%20OpenAI.png "Multi Shot SQL Approach") +![Comparison between a common Text2SQL approach and a Multi-Shot Text2SQL approach.](./images/Text2SQL%20Approaches.png "Multi Shot SQL Approaches") -To solve this, two different approaches can be used: - - Injection of a brief description of the available entities is injected into the prompt. This limits the number of tokens used and avoids filling the prompt with confusing schema information. - - Indexing the entity definitions in a vector database, such as AI Search, and querying it retrieve the most relevant entities for the query. +Three different iterations are presented and code provided for: + - **Iteration 2:** Injection of a brief description of the available entities is injected into the prompt. This limits the number of tokens used and avoids filling the prompt with confusing schema information. + - **Iteration 3:** Indexing the entity definitions in a vector database, such as AI Search, and querying it to retrieve the most relevant entities for the key terms from the query. + - **Iteration 4:** Keeping an index of commonly asked questions and which schema / SQL query they resolve to. Additionally, indexing the entity definitions in a vector database, such as AI Search _(same as Iteration 3)_. First querying this index to see if a similar SQL query can be obtained. If not, falling back to the schema index, and querying it to retrieve the most relevant entities for the key terms from the query. -Both approaches limit the number of tokens used and avoids filling the prompt with confusing schema information. +All approaches limit the number of tokens used and avoids filling the prompt with confusing schema information. Using Auto-Function calling capabilities, the LLM is able to retrieve from the plugin the full schema information for the views / tables that it considers useful for answering the question. Once retrieved, the full SQL query can then be generated. The schemas for multiple views / tables can be retrieved to allow the LLM to perform joins and other complex queries. +### Comparison of Iterations + + + ## Sample Output ### What is the top performing product by quantity of units sold? @@ -141,6 +146,12 @@ The data dictionary is stored in `./plugins/sql_plugin/entities.json`. Below is A full data dictionary must be built for all the views / tables you which to expose to the LLM. The metadata provide directly influences the accuracy of the Text2SQL component. +## Common Plugin Components + +#### run_sql_query() + +This method is called by the Semantic Kernel framework automatically, when instructed to do so by the LLM, to run a SQL query against the given database. It returns a JSON string containing a row wise dump of the results returned. These results are then interpreted to answer the question. + ## Prompt Based SQL Plugin This approach works well for a small number of entities (test on up to 20 entities with hundreds of columns). It performed well on the testing, with correct metadata, we achieved 100% accuracy on the test set. @@ -163,10 +174,6 @@ The **target_engine** is passed to the prompt, along with **engine_specific_rule This method is called by the Semantic Kernel framework automatically, when instructed to do so by the LLM, to fetch the full schema definitions for a given entity. This returns a JSON string of the chosen entity which allows the LLM to understand the column definitions and their associated metadata. This can be called in parallel for multiple entities. -#### run_sql_query() - -This method is called by the Semantic Kernel framework automatically, when instructed to do so by the LLM, to run a SQL query against the given database. It returns a JSON string containing a row wise dump of the results returned. These results are then interpreted to answer the question. - ## Vector Based SQL Plugin This approach allows the system to scale without significantly increasing the number of tokens used within the system prompt. Indexing and running an AI Search instance consumes additional cost, compared to the prompt based approach. @@ -191,10 +198,6 @@ This method is called by the Semantic Kernel framework automatically, when instr The search text passed is vectorised against the entity level **Description** columns. A hybrid Semantic Reranking search is applied against the **EntityName**, **Entity**, **Columns/Name** fields. -#### run_sql_query() - -This method is called by the Semantic Kernel framework automatically, when instructed to do so by the LLM, to run a SQL query against the given database. It returns a JSON string containing a row wise dump of the results returned. These results are then interpreted to answer the question. - ## Tips for good Text2SQL performance. - Pre-assemble views to avoid the LLM having to make complex joins between multiple tables diff --git a/text_2_sql/images/OneShot SQL vs TwoShot SQL OpenAI.png b/text_2_sql/images/OneShot SQL vs TwoShot SQL OpenAI.png deleted file mode 100644 index 6b9f6e814224bdb7acdd50ee05b34e3839f92421..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 223764 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�>MRiox$0J11Z-q}E?#^l= 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 diff --git a/text_2_sql/images/Text2SQL Approaches.png b/text_2_sql/images/Text2SQL Approaches.png new file mode 100644 index 0000000000000000000000000000000000000000..8e8a9b3246ce8fef0fa1c3ecbf5d51148c610bd8 GIT binary patch literal 117922 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 lmtTPn8ZkUz0 Date: Fri, 13 Sep 2024 15:47:28 +0100 Subject: [PATCH 10/17] Update the README --- text_2_sql/README.md | 11 +++++++++-- text_2_sql/images/Text2SQL Approaches.png | Bin 117922 -> 118166 bytes 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/text_2_sql/README.md b/text_2_sql/README.md index eb3c1f2..6d30a0e 100644 --- a/text_2_sql/README.md +++ b/text_2_sql/README.md @@ -46,8 +46,15 @@ All approaches limit the number of tokens used and avoids filling the prompt wit Using Auto-Function calling capabilities, the LLM is able to retrieve from the plugin the full schema information for the views / tables that it considers useful for answering the question. Once retrieved, the full SQL query can then be generated. The schemas for multiple views / tables can be retrieved to allow the LLM to perform joins and other complex queries. ### Comparison of Iterations - - +| | Common Text2SQL Approach | Prompt Based Multi-Shot Text2SQL Approach | Vector Based Multi-Shot Text2SQL Approach | Vector Based Multi-Shot Text2SQL Approach With Query Cache | +|-|-|-|-|-| +|**Advantages** | Fast for a limited number of entities. | Significant reduction in token usage. | Significant reduction in token usage. | Significant reduction in token usage. +| | | | Scales well to multiple entities. | Scales well to multiple entities. | +| | | | Uses a vector approach to detect the best fitting entity which is faster than using an LLM. Matching is offloaded to AI Search. | Uses a vector approach to detect the best fitting entity which is faster than using an LLM. Matching is offloaded to AI Search. | +| | | | | Significantly faster to answer similar questions as best fitting entity detection is skipped. Observed tests resulted in almost half the time for final output compared to the previous iteration. | +|**Disadvantages** | Slows down significantly as the number of entities increases. | Uses LLM to detect the best fitting entity which is slow compared to a vector approach. | Could be sped up without auto function calling for vector search, but passing whole query **may** reduce reduce matching performance. | Slower than other approaches for the first time a question with no similar questions in the cache is asked. | +| | Consumes a significant number of tokens as number of entities increases. | As number of entities increases, token usage will grow but at a lesser rate than Iteration 1. | AI Search adds additional cost to the solution. | AI Search adds additional cost to the solution. | +| | LLM struggled to differentiate which table to choose with the large amount of information passed. | | | ## Sample Output diff --git a/text_2_sql/images/Text2SQL Approaches.png b/text_2_sql/images/Text2SQL Approaches.png index 8e8a9b3246ce8fef0fa1c3ecbf5d51148c610bd8..90310e3039e40d809af537ec88f85cbca8ddff9f 100644 GIT binary patch literal 118166 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

  • ebu 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
  • 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 lmtTPn8ZkUz0 Date: Fri, 13 Sep 2024 15:52:15 +0100 Subject: [PATCH 11/17] Further README updates --- README.md | 4 ++-- text_2_sql/README.md | 3 +++ 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 161277c..61127e2 100644 --- a/README.md +++ b/README.md @@ -6,8 +6,8 @@ It is intended that the plugins and skills provided in this repository, are adap ## Components -- `./text_2_sql` contains an two Multi-Shot implementation for Text2SQL generation and querying which can be used to answer questions backed by a database as a knowledge base. A prompt based and vector based approach are shown, both of which exhibit great performance in answering sql queries. With these plugins, your RAG application can now access and pull data from any SQL table exposed to it to answer questions. -- `./adi_function_app` contains code for linking Azure Document Intelligence with AI Search to process complex documents with charts and images, and uses multi-modal models (gpt4o) to interpret and understand these. With this custom skill, the RAG application can draw insights from complex charts and images during the vector search. +- `./text_2_sql` contains an three Multi-Shot implementations for Text2SQL generation and querying which can be used to answer questions backed by a database as a knowledge base. A **prompt based** and **vector based** approach are shown, both of which exhibit great performance in answering sql queries. Additionally, a further iteration on the vector based approach is shown which uses a **query cache** to further speed up generation. With these plugins, your RAG application can now access and pull data from any SQL table exposed to it to answer questions. +- `./adi_function_app` contains code for linking **Azure Document Intelligence** with AI Search to process complex documents with charts and images, and uses **multi-modal models (gpt4o)** to interpret and understand these. With this custom skill, the RAG application can **draw insights from complex charts** and images during the vector search. - `./deploy_ai_search` provides an easy Python based utility for deploying an index, indexer and corresponding skillset for AI Search and for Text2SQL. The above components have been successfully used on production RAG projects to increase the quality of responses. diff --git a/text_2_sql/README.md b/text_2_sql/README.md index 6d30a0e..a88e9af 100644 --- a/text_2_sql/README.md +++ b/text_2_sql/README.md @@ -104,6 +104,7 @@ The top-performing product by quantity of units sold is the **Classic Vest, S** - `./rag_with_prompt_based_text_2_sql.ipynb` provides example of how to utilise the Prompt Based Text2SQL plugin to query the database. - `./rag_with_vector_based_text_2_sql.ipynb` provides example of how to utilise the Vector Based Text2SQL plugin to query the database. +- `./rag_with_vector_based_text_2_sql_query_cache.ipynb` provides example of how to utilise the Vector Based Text2SQL plugin, alongside the query cache, to query the database. - `./rag_with_ai_search_and_text_2_sql.ipynb` provides an example of how to use the Text2SQL and an AISearch plugin in parallel to automatically retrieve data from the most relevant source to answer the query. - This setup is useful for a production application as the SQL Database is unlikely to be able to answer all the questions a user may ask. @@ -199,6 +200,8 @@ This method simply returns a pre-made system prompt that contains optimised and The **target_engine** is passed to the prompt, along with **engine_specific_rules** to ensure that the SQL queries generated work on the target engine. +If the query cache is enabled, the prompt is adjusted to instruct the LLM to look at the cached data first, before calling `get_entity_schema()`. + #### get_entity_schema() This method is called by the Semantic Kernel framework automatically, when instructed to do so by the LLM, to search the AI Search instance with the given text. The LLM is able to pass the key terms from the user query, and retrieve a ranked list of the most suitable entities to answer the question. From 91e4a1ce8565ffea76826b0d12252e60bea680f1 Mon Sep 17 00:00:00 2001 From: Ben Constable Date: Fri, 13 Sep 2024 16:01:41 +0100 Subject: [PATCH 12/17] Adjustment of readme --- text_2_sql/README.md | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/text_2_sql/README.md b/text_2_sql/README.md index a88e9af..29acc73 100644 --- a/text_2_sql/README.md +++ b/text_2_sql/README.md @@ -45,6 +45,8 @@ All approaches limit the number of tokens used and avoids filling the prompt wit Using Auto-Function calling capabilities, the LLM is able to retrieve from the plugin the full schema information for the views / tables that it considers useful for answering the question. Once retrieved, the full SQL query can then be generated. The schemas for multiple views / tables can be retrieved to allow the LLM to perform joins and other complex queries. +For the query cache enabled approach, AI Search is used as a vector based cache, but any other cache that supports vector queries could be used, such as Redis. + ### Comparison of Iterations | | Common Text2SQL Approach | Prompt Based Multi-Shot Text2SQL Approach | Vector Based Multi-Shot Text2SQL Approach | Vector Based Multi-Shot Text2SQL Approach With Query Cache | |-|-|-|-|-| @@ -200,7 +202,7 @@ This method simply returns a pre-made system prompt that contains optimised and The **target_engine** is passed to the prompt, along with **engine_specific_rules** to ensure that the SQL queries generated work on the target engine. -If the query cache is enabled, the prompt is adjusted to instruct the LLM to look at the cached data first, before calling `get_entity_schema()`. +**If the query cache is enabled, the prompt is adjusted to instruct the LLM to look at the cached data first, before calling `get_entity_schema()`.** #### get_entity_schema() @@ -208,6 +210,10 @@ This method is called by the Semantic Kernel framework automatically, when instr The search text passed is vectorised against the entity level **Description** columns. A hybrid Semantic Reranking search is applied against the **EntityName**, **Entity**, **Columns/Name** fields. +#### run_ai_search_query() + +The vector based with query cache notebook uses the `run_ai_search_query()` method to fetch the most relevant previous query and injects it into the prompt. The use of Auto-Function Calling here is avoided to reduce the response time as the cache index will always be used first. + ## Tips for good Text2SQL performance. - Pre-assemble views to avoid the LLM having to make complex joins between multiple tables From b09e5261a709233a38d40a49fc297e139f6d957a Mon Sep 17 00:00:00 2001 From: Ben Constable Date: Fri, 13 Sep 2024 16:15:38 +0100 Subject: [PATCH 13/17] Limit number of results --- text_2_sql/ai_search.py | 4 ++-- .../vector_based_sql_plugin/vector_based_sql_plugin.py | 1 + text_2_sql/rag_with_vector_based_text_2_sql_query_cache.ipynb | 1 + 3 files changed, 4 insertions(+), 2 deletions(-) diff --git a/text_2_sql/ai_search.py b/text_2_sql/ai_search.py index d1f29c6..201158c 100644 --- a/text_2_sql/ai_search.py +++ b/text_2_sql/ai_search.py @@ -17,6 +17,7 @@ async def run_ai_search_query( retrieval_fields: list[str], index_name: str, semantic_config: str, + top=5, ): """Run the AI search query.""" identity_type = get_identity_type() @@ -56,8 +57,7 @@ async def run_ai_search_query( credential=credential, ) as search_client: results = await search_client.search( - top=5, - query_type="semantic", + top=top, semantic_configuration_name=semantic_config, search_text=query, select=",".join(retrieval_fields), diff --git a/text_2_sql/plugins/vector_based_sql_plugin/vector_based_sql_plugin.py b/text_2_sql/plugins/vector_based_sql_plugin/vector_based_sql_plugin.py index 2b7ea6e..9e88fbb 100644 --- a/text_2_sql/plugins/vector_based_sql_plugin/vector_based_sql_plugin.py +++ b/text_2_sql/plugins/vector_based_sql_plugin/vector_based_sql_plugin.py @@ -101,6 +101,7 @@ async def get_entity_schemas( ["Entity", "EntityName", "Description", "Columns"], os.environ["AIService__AzureSearchOptions__Text2Sql__Index"], os.environ["AIService__AzureSearchOptions__Text2Sql__SemanticConfig"], + top=3, ) for schema in schemas: diff --git a/text_2_sql/rag_with_vector_based_text_2_sql_query_cache.ipynb b/text_2_sql/rag_with_vector_based_text_2_sql_query_cache.ipynb index 49c172b..9298d12 100644 --- a/text_2_sql/rag_with_vector_based_text_2_sql_query_cache.ipynb +++ b/text_2_sql/rag_with_vector_based_text_2_sql_query_cache.ipynb @@ -252,6 +252,7 @@ " [\"Question\", \"Query\", \"Schemas\"],\n", " os.environ[\"AIService__AzureSearchOptions__Text2SqlQueryCache__Index\"],\n", " os.environ[\"AIService__AzureSearchOptions__Text2SqlQueryCache__SemanticConfig\"],\n", + " top=1,\n", " )\n", "\n", " # Create important information prompt that contains the SQL database information.\n", From 7ba569ff2b5761001fa432d887ff87321c3ec1dd Mon Sep 17 00:00:00 2001 From: Ben Constable Date: Mon, 16 Sep 2024 09:26:07 +0100 Subject: [PATCH 14/17] Update README --- text_2_sql/README.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/text_2_sql/README.md b/text_2_sql/README.md index 29acc73..b5fc36e 100644 --- a/text_2_sql/README.md +++ b/text_2_sql/README.md @@ -162,7 +162,7 @@ A full data dictionary must be built for all the views / tables you which to exp This method is called by the Semantic Kernel framework automatically, when instructed to do so by the LLM, to run a SQL query against the given database. It returns a JSON string containing a row wise dump of the results returned. These results are then interpreted to answer the question. -## Prompt Based SQL Plugin +## Prompt Based SQL Plugin (Iteration 2) This approach works well for a small number of entities (test on up to 20 entities with hundreds of columns). It performed well on the testing, with correct metadata, we achieved 100% accuracy on the test set. @@ -184,7 +184,7 @@ The **target_engine** is passed to the prompt, along with **engine_specific_rule This method is called by the Semantic Kernel framework automatically, when instructed to do so by the LLM, to fetch the full schema definitions for a given entity. This returns a JSON string of the chosen entity which allows the LLM to understand the column definitions and their associated metadata. This can be called in parallel for multiple entities. -## Vector Based SQL Plugin +## Vector Based SQL Plugin (Iterations 3 & 4) This approach allows the system to scale without significantly increasing the number of tokens used within the system prompt. Indexing and running an AI Search instance consumes additional cost, compared to the prompt based approach. @@ -212,7 +212,7 @@ The search text passed is vectorised against the entity level **Description** co #### run_ai_search_query() -The vector based with query cache notebook uses the `run_ai_search_query()` method to fetch the most relevant previous query and injects it into the prompt. The use of Auto-Function Calling here is avoided to reduce the response time as the cache index will always be used first. +The vector based with query cache notebook uses the `run_ai_search_query()` method to fetch the most relevant previous query and injects it into the prompt before the initial LLM call. The use of Auto-Function Calling here is avoided to reduce the response time as the cache index will always be used first. ## Tips for good Text2SQL performance. From 813a900840ec96fd3b27f5956c2d28bc4b08db86 Mon Sep 17 00:00:00 2001 From: Ben Constable Date: Mon, 16 Sep 2024 09:31:07 +0100 Subject: [PATCH 15/17] Update README --- adi_function_app/README.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/adi_function_app/README.md b/adi_function_app/README.md index 679d534..1794059 100644 --- a/adi_function_app/README.md +++ b/adi_function_app/README.md @@ -206,6 +206,12 @@ If `chunk_by_page` header is `False`: **Page wise analysis in ADI is recommended to avoid splitting tables / figures across multiple chunks, when the chunking is performed.** +## Other Provided Custom Skills + +Due to a AI Search product limitation that AI Search cannot connect to AI Services behind Private Endpoints, we provide a Custom Key Phrase Extraction Skill that will work within a Private Endpoint environment. + +Additionally, a custom cleaning skill is provided to clean the chunks before vectorisation takes place. + ## Production Considerations Below are some of the considerations that should be made before using this custom skill in production: From 89c9834176c2a3179de2499b2e507d922c46fde4 Mon Sep 17 00:00:00 2001 From: Ben Constable Date: Mon, 16 Sep 2024 09:52:31 +0100 Subject: [PATCH 16/17] Update code --- ..._vector_based_text_2_sql_query_cache.ipynb | 279 ------------------ 1 file changed, 279 deletions(-) diff --git a/text_2_sql/rag_with_vector_based_text_2_sql_query_cache.ipynb b/text_2_sql/rag_with_vector_based_text_2_sql_query_cache.ipynb index 9298d12..1e02fc4 100644 --- a/text_2_sql/rag_with_vector_based_text_2_sql_query_cache.ipynb +++ b/text_2_sql/rag_with_vector_based_text_2_sql_query_cache.ipynb @@ -212,13 +212,6 @@ "## ChatBot setup" ] }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] - }, { "cell_type": "code", "execution_count": 8, @@ -947,278 +940,6 @@ "source": [ "await ask_question(\"How many different product categories do we have?\", history)" ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "INFO:httpx:HTTP Request: POST https://open-ai-gpt-001.openai.azure.com/openai/deployments/text-embedding-ada-002/embeddings?api-version=2023-03-15-preview \"HTTP/1.1 200 OK\"\n", - "INFO:azure.core.pipeline.policies.http_logging_policy:Request URL: 'https://open-ai-vector-db.search.windows.net/indexes('text-2-sql-query-cache-index')/docs/search.post.search?api-version=REDACTED'\n", - "Request method: 'POST'\n", - "Request headers:\n", - " 'Content-Type': 'application/json'\n", - " 'Content-Length': '34763'\n", - " 'api-key': 'REDACTED'\n", - " 'Accept': 'application/json;odata.metadata=none'\n", - " 'x-ms-client-request-id': 'd0fb9ae2-713f-11ef-97cc-0242ac110002'\n", - " 'User-Agent': 'azsdk-python-search-documents/11.6.0b4 Python/3.12.3 (Linux-5.15.153.1-microsoft-standard-WSL2-x86_64-with-glibc2.36)'\n", - "A body is sent with the request\n", - "INFO:azure.core.pipeline.policies.http_logging_policy:Response status: 200\n", - "Response headers:\n", - " 'Transfer-Encoding': 'chunked'\n", - " 'Content-Type': 'application/json; odata.metadata=none; odata.streaming=true; charset=utf-8'\n", - " 'Content-Encoding': 'REDACTED'\n", - " 'Vary': 'REDACTED'\n", - " 'Server': 'Microsoft-IIS/10.0'\n", - " 'Strict-Transport-Security': 'REDACTED'\n", - " 'Preference-Applied': 'REDACTED'\n", - " 'OData-Version': 'REDACTED'\n", - " 'request-id': 'd0fb9ae2-713f-11ef-97cc-0242ac110002'\n", - " 'elapsed-time': 'REDACTED'\n", - " 'Strict-Transport-Security': 'REDACTED'\n", - " 'Date': 'Thu, 12 Sep 2024 19:47:17 GMT'\n", - "INFO:root:Question: Which country did we sell the most to in June 2008?\n", - "INFO:semantic_kernel.functions.kernel_function:Function ChatBot-Chat invoking.\n", - "INFO:semantic_kernel.contents.chat_history:Could not parse prompt \n", - "As a senior analyst, your primary responsibility is to provide precise and thorough answers to the user's queries. Utilize all the provided functions to craft your responses. You must deliver detailed and accurate final answers with clear explanations and actionable insights.\n", - "\n", - "Always use the provided functions to obtain key information in order to answer the question.\n", - "If you are asked to use always use a function, you must use that function to compliment the answer.\n", - "Always use multiple functions to formulate the answer.\n", - "Always execute multiple functions in parallel to compliment the results.\n", - "\n", - "The response to the user must meet the requirements in RESPONSE OUTPUT REQUIREMENTS.\n", - "IMPORTANT INFORMATION contains useful information that you can use to aid your knowledge.\n", - "CHAT HISTORY contains the previous question and answer pairs in the conversation in JSON format. Do not use this information to answer the question, but to provide context on what was asked previously.\n", - "\n", - "[IMPORTANT INFORMATION]\n", - "\n", - "\n", - " [SQL DATABASE INFORMATION]\n", - " First look at the cached queries, SQL templates and schemas to see if you can use them to formulate a SQL query. If you can't find a suitable query, use the 'GetEntitySchema()' function to search for the most relevant schemas for the data that you wish to obtain.\n", - "\n", - " [BEGIN QUERY CACHE]\n", - " []\n", - " [END QUERY CACHE]\n", - " \n", - "\n", - " Use the 'RunSQLQuery()' function to run the SQL query against the database.\n", - "\n", - " Output corresponding text values in the answer for columns where there is an ID. For example, if the column is 'ProductID', output the corresponding 'ProductModel' in the response. Do not include the ID in the response.\n", - " If a user is asking for a comparison, always compare the relevant values in the database.\n", - "\n", - " The target database engine is Microsoft TSQL Server, SQL queries must be able compatible to run on Microsoft TSQL Server. \n", - " The following Microsoft TSQL Server Syntax rules must be adhered to.\n", - " Use TOP X to limit the number of rows returned instead of LIMIT X. NEVER USE LIMIT X as it produces a syntax error.\n", - " You must only provide SELECT SQL queries.\n", - " For a given entity, use the 'SelectFromEntity' property returned in the schema in the SELECT FROM part of the SQL query. If the property is {'SelectFromEntity': 'test_schema.test_table'}, the select statement will be formulated from 'SELECT <VALUES> FROM test_schema.test_table WHERE <CONDITION>.\n", - "\n", - " If you don't know how the value is formatted in a column, run a query against the column to get the unique values that might match your query.\n", - " Some columns in the schema may have the properties 'AllowedValues' or 'SampleValues'. Use these values to determine the possible values that can be used in the SQL query.\n", - "\n", - " The source title to cite is the 'EntityName' property. The source reference is the SQL query used. The source chunk is the result of the SQL query used to answer the user query in Markdown table format. e.g. { 'title': "vProductAndDescription", 'chunk': '| ProductID | Name | ProductModel | Culture | Description |\\n|-----------|-------------------|--------------|---------|----------------------------------|\\n| 101 | Mountain Bike | MT-100 | en | A durable bike for mountain use. |\\n| 102 | Road Bike | RB-200 | en | Lightweight bike for road use. |\\n| 103 | Hybrid Bike | HB-300 | fr | V\u00e9lo hybride pour usage mixte. |\\n', 'reference': 'SELECT ProductID, Name, ProductModel, Culture, Description FROM vProductAndDescription WHERE Culture = "en";' }\n", - " [END SQL DATABASE INFORMATION]\n", - " \n", - "\n", - "[END IMPORTANT INFORMATION]\n", - "\n", - "[RESPONSE OUTPUT REQUIREMENTS]\n", - "\n", - " The answer MUST be returned in JSON format as { \"answer\": \"\", \"sources\": [ {\"title\": , \"chunk\": , \"reference\": \"\"}, {\"title\": , \"chunk\": , \"reference\": \"\"} ], \"schemas\": [ ] }.\n", - "\n", - " The 'answer' property MUST meet the requirements in the ANSWER PROPERTY REQUIREMENTS.\n", - " The 'sources' property MUST meet the requirements in the SOURCES PROPERTY REQUIREMENTS.\n", - " The 'schemas' property MUST meet the requirements in the SCHEMAS PROPERTY REQUIREMENTS.\n", - "\n", - " Do NOT return anything outside of the provided JSON property. Ensure that this is valid JSON returned.\n", - "\n", - " Never return an empty response or null value. Always answer the question.\n", - "\n", - " [ANSWER PROPERTY REQUIREMENTS]\n", - " 1. Language and Tone:\n", - " Use only British English throughout the response.\n", - " Employ a business-friendly language that is professional and easy to understand.\n", - "\n", - " 2. Content Restrictions:\n", - " Do not use any profanity, offensive language, hate speech, or code in the response.\n", - " If you encounter any such content, handle it gracefully by omitting or rephrasing it appropriately.\n", - "\n", - " 3. Information Sources:\n", - " Use only information from the provided functions and specified important information.\n", - " Do not use any external sources or the chat history for constructing the response.\n", - " In case of conflicting information, prioritize data from the SQL Database as the primary source of truth.\n", - "\n", - " 4. Calculations:\n", - " For any required calculations, use only the values provided in the context.\n", - " Provide a brief, clear explanation of the calculations beneath the results.\n", - "\n", - " 5. Response Structure:\n", - " Ensure the response is direct, easy to understand, and well-structured.\n", - " Format the response using Markdown for clarity and readability.\n", - " Use bold sub-headings for clarity where needed. Only use Markdown headings Level 3 (###) and Level 4 (####).\n", - " Use bullet points or numbered lists when appropriate.\n", - " Do not vary the font size within the same sentence.\n", - "\n", - " 6. Citations:\n", - " All factual information used in the answer must be cited with numbered references. For example, [1] should be used to refer to the first source.\n", - " Each citation in the answer must correspond to a single entry in the 'sources' object.\n", - " The same citation and corresponding context chunk may be used multiple times if needed.\n", - " Place the numbered citation at the end of each relevant sentence that uses information from the sources.\n", - " Ensure that each source listed in the 'sources' property is cited at least once in the answer.\n", - " Do not provide a list of definitions from the business glossary; use such information only to enhance the answer contextually.\n", - "\n", - " 7. Citations Format:\n", - " Citations should be embedded within the text, not as a separate list at the end of the 'answer' property.\n", - " [END ANSWER PROPERTY REQUIREMENTS]\n", - "\n", - " [SCHEMAS PROPERTY REQUIREMENTS]\n", - " 1. Inclusion Criteria:\n", - " If you used a schema obtained from 'GetEntitySchemas' function, it must be returned in the 'schemas' property. The 'schemas' property should contain a list of all the schemas used to create the SQL query.\n", - "\n", - " 3. Schema Format:\n", - " Each schema entry should be formatted as: {\"Entity\": \"\", \"Columns\", [ {\"Name\": \"\", \"Definition\": , \"Type\": \"\" } ]}. This is the same format as the 'GetEntitySchemas' function output. Simply copy the schema from the function output to the 'schemas' property and remove the not needed properties.\n", - "\n", - " [END SCHEMAS PROPERTY REQUIREMENTS]\n", - "\n", - " [SOURCES PROPERTY REQUIREMENTS]\n", - " 1. Reference Inclusion:\n", - " Include all corresponding references for all cited content in the 'answer' property.\n", - " Place the references in the 'sources' property.\n", - "\n", - " 2. Source Format:\n", - " Each entry in the 'sources' property must be formatted as: {\"title\": \"\", \"chunk\": \"\", \"reference\": \"\"}\n", - " For example, a complete response with two citations would be formatted as: { \"answer\": \"\", \"sources\": [ {\"title\": , \"chunk\": , \"reference\": \"\"}, {\"title\": , \"chunk\": , \"reference\": \"\"} ] }\n", - "\n", - " 3. Source Chunk:\n", - " The 'chunk' property should contain a concise, unedited snippet of the relevant context that supports the answer.\n", - "\n", - " 4. Mandatory References:\n", - " Ensure that every citation in the 'answer' has a corresponding entry in the 'sources' property.\n", - " Every entry in the 'sources' property must be cited at least once in the answer.\n", - " [END SOURCES PROPERTY REQUIREMENTS]\n", - "\n", - "[END RESPONSE OUTPUT REQUIREMENTS]\n", - "\n", - "What are the different product categories we have?What is the top performing product by quantity of units sold?\n", - "Which country did we sell the most to in June 2008? as xml, treating as text, error was: not well-formed (invalid token): line 46, column 78\n", - "INFO:httpx:HTTP Request: POST https://open-ai-gpt-001.openai.azure.com/openai/deployments/gpt-4o/chat/completions?api-version=2024-02-01 \"HTTP/1.1 200 OK\"\n", - "INFO:semantic_kernel.connectors.ai.open_ai.services.open_ai_handler:OpenAI usage: CompletionUsage(completion_tokens=55, prompt_tokens=2051, total_tokens=2106)\n", - "INFO:semantic_kernel.connectors.ai.open_ai.services.open_ai_chat_completion_base:processing 2 tool calls in parallel.\n", - "INFO:semantic_kernel.kernel:Calling SQL-GetEntitySchema function with args: {\"text\": \"sales by country and date\"}\n", - "INFO:semantic_kernel.functions.kernel_function:Function SQL-GetEntitySchema invoking.\n", - "INFO:semantic_kernel.kernel:Calling SQL-GetEntitySchema function with args: {\"text\": \"sales data\"}\n", - "INFO:semantic_kernel.functions.kernel_function:Function SQL-GetEntitySchema invoking.\n", - "INFO:httpx:HTTP Request: POST https://open-ai-gpt-001.openai.azure.com/openai/deployments/text-embedding-ada-002/embeddings?api-version=2023-03-15-preview \"HTTP/1.1 200 OK\"\n", - "INFO:azure.core.pipeline.policies.http_logging_policy:Request URL: 'https://open-ai-vector-db.search.windows.net/indexes('text-2-sql-index')/docs/search.post.search?api-version=REDACTED'\n", - "Request method: 'POST'\n", - "Request headers:\n", - " 'Content-Type': 'application/json'\n", - " 'Content-Length': '34766'\n", - " 'api-key': 'REDACTED'\n", - " 'Accept': 'application/json;odata.metadata=none'\n", - " 'x-ms-client-request-id': 'd1c04da6-713f-11ef-97cc-0242ac110002'\n", - " 'User-Agent': 'azsdk-python-search-documents/11.6.0b4 Python/3.12.3 (Linux-5.15.153.1-microsoft-standard-WSL2-x86_64-with-glibc2.36)'\n", - "A body is sent with the request\n", - "INFO:httpx:HTTP Request: POST https://open-ai-gpt-001.openai.azure.com/openai/deployments/text-embedding-ada-002/embeddings?api-version=2023-03-15-preview \"HTTP/1.1 200 OK\"\n", - "INFO:azure.core.pipeline.policies.http_logging_policy:Request URL: 'https://open-ai-vector-db.search.windows.net/indexes('text-2-sql-index')/docs/search.post.search?api-version=REDACTED'\n", - "Request method: 'POST'\n", - "Request headers:\n", - " 'Content-Type': 'application/json'\n", - " 'Content-Length': '34658'\n", - " 'api-key': 'REDACTED'\n", - " 'Accept': 'application/json;odata.metadata=none'\n", - " 'x-ms-client-request-id': 'd1c7197e-713f-11ef-97cc-0242ac110002'\n", - " 'User-Agent': 'azsdk-python-search-documents/11.6.0b4 Python/3.12.3 (Linux-5.15.153.1-microsoft-standard-WSL2-x86_64-with-glibc2.36)'\n", - "A body is sent with the request\n", - "INFO:azure.core.pipeline.policies.http_logging_policy:Response status: 200\n", - "Response headers:\n", - " 'Transfer-Encoding': 'chunked'\n", - " 'Content-Type': 'application/json; odata.metadata=none; odata.streaming=true; charset=utf-8'\n", - " 'Content-Encoding': 'REDACTED'\n", - " 'Vary': 'REDACTED'\n", - " 'Server': 'Microsoft-IIS/10.0'\n", - " 'Strict-Transport-Security': 'REDACTED'\n", - " 'Preference-Applied': 'REDACTED'\n", - " 'OData-Version': 'REDACTED'\n", - " 'request-id': 'd1c7197e-713f-11ef-97cc-0242ac110002'\n", - " 'elapsed-time': 'REDACTED'\n", - " 'Strict-Transport-Security': 'REDACTED'\n", - " 'Date': 'Thu, 12 Sep 2024 19:47:19 GMT'\n", - "INFO:semantic_kernel.functions.kernel_function:Function SQL-GetEntitySchema succeeded.\n", - "INFO:semantic_kernel.functions.kernel_function:Function completed. Duration: 0.489950s\n", - "INFO:azure.core.pipeline.policies.http_logging_policy:Response status: 200\n", - "Response headers:\n", - " 'Transfer-Encoding': 'chunked'\n", - " 'Content-Type': 'application/json; odata.metadata=none; odata.streaming=true; charset=utf-8'\n", - " 'Content-Encoding': 'REDACTED'\n", - " 'Vary': 'REDACTED'\n", - " 'Server': 'Microsoft-IIS/10.0'\n", - " 'Strict-Transport-Security': 'REDACTED'\n", - " 'Preference-Applied': 'REDACTED'\n", - " 'OData-Version': 'REDACTED'\n", - " 'request-id': 'd1c04da6-713f-11ef-97cc-0242ac110002'\n", - " 'elapsed-time': 'REDACTED'\n", - " 'Strict-Transport-Security': 'REDACTED'\n", - " 'Date': 'Thu, 12 Sep 2024 19:47:19 GMT'\n", - "INFO:semantic_kernel.functions.kernel_function:Function SQL-GetEntitySchema succeeded.\n", - "INFO:semantic_kernel.functions.kernel_function:Function completed. Duration: 0.575687s\n", - "INFO:httpx:HTTP Request: POST https://open-ai-gpt-001.openai.azure.com/openai/deployments/gpt-4o/chat/completions?api-version=2024-02-01 \"HTTP/1.1 200 OK\"\n", - "INFO:semantic_kernel.connectors.ai.open_ai.services.open_ai_handler:OpenAI usage: CompletionUsage(completion_tokens=91, prompt_tokens=8543, total_tokens=8634)\n", - "INFO:semantic_kernel.connectors.ai.open_ai.services.open_ai_chat_completion_base:processing 1 tool calls in parallel.\n", - "INFO:semantic_kernel.kernel:Calling SQL-RunSQLQuery function with args: {\"sql_query\":\"SELECT TOP 1 A.CountryRegion, SUM(H.TotalDue) AS TotalSales FROM SalesLT.SalesOrderHeader H INNER JOIN SalesLT.Address A ON H.ShipToAddressID = A.AddressID WHERE H.OrderDate BETWEEN '2008-06-01' AND '2008-06-30' GROUP BY A.CountryRegion ORDER BY TotalSales DESC;\"}\n", - "INFO:semantic_kernel.functions.kernel_function:Function SQL-RunSQLQuery invoking.\n", - "INFO:root:Executing SQL Query\n", - "INFO:semantic_kernel.functions.kernel_function:Function SQL-RunSQLQuery succeeded.\n", - "INFO:semantic_kernel.functions.kernel_function:Function completed. Duration: 0.689865s\n", - "INFO:httpx:HTTP Request: POST https://open-ai-gpt-001.openai.azure.com/openai/deployments/gpt-4o/chat/completions?api-version=2024-02-01 \"HTTP/1.1 200 OK\"\n", - "INFO:semantic_kernel.connectors.ai.open_ai.services.open_ai_handler:OpenAI usage: CompletionUsage(completion_tokens=1323, prompt_tokens=8666, total_tokens=9989)\n", - "INFO:semantic_kernel.functions.kernel_function:Function ChatBot-Chat succeeded.\n", - "INFO:semantic_kernel.functions.kernel_function:Function completed. Duration: 16.777993s\n", - "INFO:root:Answer: { \"answer\": \"In June 2008, the country that we sold the most to was the United Kingdom, with total sales amounting to \u00a3572,496.56 [1].\", \"sources\": [ { \"title\": \"Sales Order Header\", \"chunk\": \"| CountryRegion | TotalSales |\\n|-------------------|--------------|\\n| United Kingdom | 572496.5594 |\\n\", \"reference\": \"SELECT TOP 1 A.CountryRegion, SUM(H.TotalDue) AS TotalSales FROM SalesLT.SalesOrderHeader H INNER JOIN SalesLT.Address A ON H.ShipToAddressID = A.AddressID WHERE H.OrderDate BETWEEN '2008-06-01' AND '2008-06-30' GROUP BY A.CountryRegion ORDER BY TotalSales DESC;\" } ], \"schemas\": [ { \"Entity\": \"SalesOrderHeader\", \"Columns\": [ { \"Name\": \"SalesOrderID\", \"Definition\": \"A unique identifier for each sales order. This ID is auto-generated and serves as the primary key for the SalesOrderHeader table.\", \"Type\": \"INT\" }, { \"Name\": \"OrderDate\", \"Definition\": \"The date and time when the sales order was created. This field is used to track when the order was initiated.\", \"Type\": \"DATETIME\" }, { \"Name\": \"DueDate\", \"Definition\": \"The date by which the order is expected to be fulfilled or delivered. It helps in managing delivery timelines.\", \"Type\": \"DATETIME\" }, { \"Name\": \"ShipDate\", \"Definition\": \"The date when the order was shipped to the customer. This is used for tracking shipping and fulfillment status.\", \"Type\": \"DATETIME\" }, { \"Name\": \"Status\", \"Definition\": \"The current status of the order, represented as a numeric code (e.g., 1 for In Progress, 2 for Completed, 3 for Canceled).\", \"Type\": \"TINYINT\", \"AllowedValues\": \"[1,2,3]\" }, { \"Name\": \"OnlineOrderFlag\", \"Definition\": \"Indicates whether the order was placed online.\", \"Type\": \"BIT\", \"AllowedValues\": \"[\\\"True\\\",\\\"False\\\"]\" }, { \"Name\": \"SalesOrderNumber\", \"Definition\": \"A unique order number assigned to the sales order. This is used for tracking and identification purposes.\", \"Type\": \"NVARCHAR(25)\" }, { \"Name\": \"PurchaseOrderNumber\", \"Definition\": \"The purchase order number provided by the customer. This field links the sales order to the customer's purchase order.\", \"Type\": \"NVARCHAR(25)\" }, { \"Name\": \"AccountNumber\", \"Definition\": \"The account number of the customer placing the order. This helps link the order to the customer's account.\", \"Type\": \"NVARCHAR(15)\" }, { \"Name\": \"CustomerID\", \"Definition\": \"A foreign key that links to the Customer table, representing the customer who placed the order.\", \"Type\": \"INT\" }, { \"Name\": \"ShipToAddressID\", \"Definition\": \"A foreign key that links to the Address table, representing the shipping address for the order.\", \"Type\": \"INT\" }, { \"Name\": \"BillToAddressID\", \"Definition\": \"A foreign key that links to the Address table, representing the billing address for the order.\", \"Type\": \"INT\" }, { \"Name\": \"ShipMethod\", \"Definition\": \"The shipping method used for the order (e.g., UPS, FedEx). This field helps track shipping preferences.\", \"Type\": \"NVARCHAR(50)\" }, { \"Name\": \"SubTotal\", \"Definition\": \"The total cost of the order before taxes and shipping charges. This field is used to calculate the final total. The currency is pound sterling (GBP).\", \"Type\": \"MONEY\" }, { \"Name\": \"TaxAmt\", \"Definition\": \"The tax amount applied to the order. This is calculated based on the order subtotal and applicable tax rates. The currency is pound sterling (GBP).\", \"Type\": \"MONEY\" }, { \"Name\": \"Freight\", \"Definition\": \"The shipping charge applied to the order. This field represents the cost of shipping the order to the customer. The currency is pound sterling (GBP).\", \"Type\": \"MONEY\" }, { \"Name\": \"TotalDue\", \"Definition\": \"The total amount due for the order, including all line items, taxes, and shipping charges. The currency is pound sterling (GBP).\", \"Type\": \"MONEY\" }, { \"Name\": \"Comment\", \"Definition\": \"Any additional comments or notes related to the sales order. This field can include special instructions or remarks.\", \"Type\": \"NVARCHAR(255)\" }, { \"Name\": \"ModifiedDate\", \"Definition\": \"The date and time when the sales order header record was last modified. This is used for tracking updates and changes to the order.\", \"Type\": \"DATETIME\" } ] }, { \"Entity\": \"Address\", \"Columns\": [ { \"Name\": \"AddressID\", \"Definition\": \"A unique identifier for each address. This ID is auto-generated and serves as the primary key for the Address table.\", \"Type\": \"INT\" }, { \"Name\": \"City\", \"Definition\": \"The city in which the address is located. This is used to specify the city for the address.\", \"Type\": \"NVARCHAR(30)\" }, { \"Name\": \"StateProvince\", \"Definition\": \"The state or province in which the address is located. This is used to specify the state or province for the address.\", \"Type\": \"NVARCHAR(50)\" }, { \"Name\": \"CountryRegion\", \"Definition\": \"The country or region in which the address is located. This is used to specify the country or region for the address.\", \"Type\": \"NVARCHAR(50)\" }, { \"Name\": \"PostalCode\", \"Definition\": \"The postal code associated with the address. This is used to specify the postal code for the address, which helps in geographical sorting and shipping.\", \"Type\": \"NVARCHAR(15)\" }, { \"Name\": \"ModifiedDate\", \"Definition\": \"The date and time when the address record was last modified. This is used for tracking updates and changes to the address information.\", \"Type\": \"DATETIME\" } ] } ] }\n", - "INFO:root:Time taken: 17.167546033859253\n" - ] - }, - { - "data": { - "text/markdown": [ - "In June 2008, the country that we sold the most to was the United Kingdom, with total sales amounting to \u00a3572,496.56 [1]." - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "ename": "TypeError", - "evalue": "unhashable type: 'dict'", - "output_type": "error", - "traceback": [ - "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", - "\u001b[0;31mTypeError\u001b[0m Traceback (most recent call last)", - "Cell \u001b[0;32mIn[18], line 1\u001b[0m\n\u001b[0;32m----> 1\u001b[0m \u001b[38;5;28;01mawait\u001b[39;00m ask_question(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mWhich country did we sell the most to in June 2008?\u001b[39m\u001b[38;5;124m\"\u001b[39m, history)\n", - "Cell \u001b[0;32mIn[15], line 60\u001b[0m, in \u001b[0;36mask_question\u001b[0;34m(question, chat_history)\u001b[0m\n\u001b[1;32m 58\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m query \u001b[38;5;129;01min\u001b[39;00m queries:\n\u001b[1;32m 59\u001b[0m entry \u001b[38;5;241m=\u001b[39m {\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mQuestion\u001b[39m\u001b[38;5;124m\"\u001b[39m: question, \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mQuery\u001b[39m\u001b[38;5;124m\"\u001b[39m: query, \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mSchemas\u001b[39m\u001b[38;5;124m\"\u001b[39m: json_answer[\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mschemas\u001b[39m\u001b[38;5;124m\"\u001b[39m]}\n\u001b[0;32m---> 60\u001b[0m \u001b[38;5;28;01mawait\u001b[39;00m add_entry_to_index(\n\u001b[1;32m 61\u001b[0m entry,\n\u001b[1;32m 62\u001b[0m json_answer[\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mschemas\u001b[39m\u001b[38;5;124m\"\u001b[39m],\n\u001b[1;32m 63\u001b[0m os\u001b[38;5;241m.\u001b[39menviron[\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mAIService__AzureSearchOptions__Text2SqlQueryCache__Index\u001b[39m\u001b[38;5;124m\"\u001b[39m],\n\u001b[1;32m 64\u001b[0m )\n", - "File \u001b[0;32m/workspaces/dstoolkit-text2sql-and-imageprocessing/text_2_sql/ai_search.py:77\u001b[0m, in \u001b[0;36madd_entry_to_index\u001b[0;34m(document, vector_fields, index_name)\u001b[0m\n\u001b[1;32m 0\u001b[0m \n", - "\u001b[0;31mTypeError\u001b[0m: unhashable type: 'dict'" - ] - } - ], - "source": [ - "await ask_question(\"Which country did we sell the most to in June 2008?\", history)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] } ], "metadata": { From 1ed3d50daa90cd175b0b68567102cde627fed29a Mon Sep 17 00:00:00 2001 From: Ben Constable Date: Mon, 16 Sep 2024 10:37:38 +0100 Subject: [PATCH 17/17] Update plugin --- images/Plugin Based RAG Flow.png | Bin 30479 -> 24198 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/images/Plugin Based RAG Flow.png b/images/Plugin Based RAG Flow.png index 97c02d48ddb14c7433f5bd57da7e6103eb446607..5e90a850e961c55d4c5621723b1887ac5e9a7433 100644 GIT binary patch literal 24198 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