This is my working code with my urls redacted.
The three new fields I added are queryType
semanticConfiguration
and roleInformation.
import openai, os, requests
openai.api_type = "azure"
# Azure OpenAI on your own data is only supported by the 2023-08-01-preview API version
openai.api_version = "2023-09-01-preview"
# Azure OpenAI setup
openai.api_base = "" # Add your endpoint here
openai.api_key = os.getenv("OPENAI_API_KEY") # Add your OpenAI API key here
deployment_id = "" # Add your deployment ID here
# Azure Cognitive Search setup
search_endpoint = "" # Add your Azure Cognitive Search endpoint here
search_key = os.getenv("SEARCH_KEY"); # Add your Azure Cognitive Search admin key here
search_index_name = "" # Add your Azure Cognitive Search index name here
def setup_byod(deployment_id: str) -> None:
"""Sets up the OpenAI Python SDK to use your own data for the chat endpoint.
:param deployment_id: The deployment ID for the model to use with your own data.
To remove this configuration, simply set openai.requestssession to None.
"""
class BringYourOwnDataAdapter(requests.adapters.HTTPAdapter):
def send(self, request, **kwargs):
request.url = f"{openai.api_base}/openai/deployments/{deployment_id}/extensions/chat/completions?api-version={openai.api_version}"
return super().send(request, **kwargs)
session = requests.Session()
# Mount a custom adapter which will use the extensions endpoint for any call using the given `deployment_id`
session.mount(
prefix=f"{openai.api_base}/openai/deployments/{deployment_id}",
adapter=BringYourOwnDataAdapter()
)
openai.requestssession = session
setup_byod(deployment_id)
completion = openai.ChatCompletion.create(
messages=[{"role": "system", "content":
""" Task: Roleplay as a conversational assistant."""
},
{"role": "user", "content": "Who is Harry Styles?"}
],
deployment_id=deployment_id,
dataSources=[ # camelCase is intentional, as this is the format the API expects
{
"type": "AzureCognitiveSearch",
"parameters": {
"endpoint": search_endpoint,
"key": search_key,
"indexName": search_index_name,
"queryType": "semantic",
"semanticConfiguration" : "default",
"roleInformation": """ Task: Roleplay as a conversational assistant."""
}
}
]
)
print(completion)