screenshot-to-code/backend/utils.py
2024-05-29 06:22:48 +05:30

40 lines
1.6 KiB
Python

import copy
import json
from typing import List
from openai.types.chat import ChatCompletionMessageParam
import base64
def pprint_prompt(prompt_messages: List[ChatCompletionMessageParam]):
print(json.dumps(truncate_data_strings(prompt_messages), indent=4))
def truncate_data_strings(data: List[ChatCompletionMessageParam]): # type: ignore
# Deep clone the data to avoid modifying the original object
cloned_data = copy.deepcopy(data)
if isinstance(cloned_data, dict):
for key, value in cloned_data.items(): # type: ignore
# Recursively call the function if the value is a dictionary or a list
if isinstance(value, (dict, list)):
cloned_data[key] = truncate_data_strings(value) # type: ignore
# Truncate the string if it it's long and add ellipsis and length
elif isinstance(value, str):
cloned_data[key] = value[:40] # type: ignore
if len(value) > 40:
cloned_data[key] += "..." + f" ({len(value)} chars)" # type: ignore
elif isinstance(cloned_data, list): # type: ignore
# Process each item in the list
cloned_data = [truncate_data_strings(item) for item in cloned_data] # type: ignore
return cloned_data # type: ignore
def make_json_serializable(content):
if isinstance(content, bytes):
return base64.b64encode(content).decode('utf-8')
elif isinstance(content, dict):
return {key: make_json_serializable(value) for key, value in content.items()}
elif isinstance(content, list):
return [make_json_serializable(item) for item in content]
return content