scripts/utils/get_responses.py (49 lines of code) (raw):
import json
from openai import AzureOpenAI
from utils.external_data import get_readme
from utils.prompt import KEY_FEATURES_PROMPT, DISCLAIMER_PROMPT, SAMPLE_NEGATIVE_MATCH_PROMPT, SAMPLE_PRODUCTS_PROMPT, SAMPLE_TECH_PROMPT, SAMPLE_QUERIES_PROMPT, WORKLOAD_TYPE_PROMPT
import logging
FIELDS_THAT_NEED_RESPONSES = ["keyFeatures"]
# Configure logging
logging.basicConfig(level=logging.INFO, format='[%(asctime)s] - %(levelname)s - %(message)s')
def get_responses(workload: dict, client: AzureOpenAI, deployment_model: str) -> dict | str:
logging.info(f"Processing workload: {workload['title']}")
if workload["sourceType"] != "ExecDocs": external_data = get_readme(workload['source'])
else: external_data = ""
for field in FIELDS_THAT_NEED_RESPONSES:
logging.info(f"Getting response for {field}")
try:
workload[field] = get_field_response(client, workload, field, deployment_model)
logging.info(f"Successfully got response for {field}")
logging.info(f"Field {field} - Response: {workload[field]}")
except Exception as e:
logging.error(f"Error getting response for {field}: {e}")
workload[field] = str(e)
return workload
def get_field_response(client: AzureOpenAI, workload: dict, field: str, deployment_model: str) -> str:
ask_prompt = ""
match field:
case "sampleQueries":
if workload[field]: return workload[field]
ask_prompt = f"{SAMPLE_QUERIES_PROMPT}{WORKLOAD_TYPE_PROMPT}\nsourceType: {workload['sourceType']}\n"
case "tech":
ask_prompt = SAMPLE_TECH_PROMPT
case "products":
ask_prompt = SAMPLE_PRODUCTS_PROMPT
case "negativeMatch":
ask_prompt = SAMPLE_NEGATIVE_MATCH_PROMPT
case "keyFeatures":
ask_prompt = KEY_FEATURES_PROMPT
prompt = f"""title: {workload["title"]}\ndescription: {workload["description"]}\ntags:{workload['tags']}\n\n{external_data}\n\n{DISCLAIMER_PROMPT}\n\nYour Response:\n"""
try:
response = client.chat.completions.create(
model=deployment_model,
messages=[
{
"role": "system",
"content": f"{DISCLAIMER_PROMPT}\n\n{ask_prompt}\n\n{prompt}"
}
],
)
# print(f"{field}: {response.choices[0].message.content}")
return json.loads(response.choices[0].message.content)
except Exception as e:
return str(response.choices[0].message.content)