import json import os from io import BytesIO from types import FunctionType, MethodType, ModuleType from typing import TYPE_CHECKING, Any from urllib.parse import unquote import frappe import frappe.utils import requests from frappe.apps import get_apps as get_permitted_apps from frappe.core.doctype.file.file import get_local_image from frappe.core.doctype.file.utils import delete_file from frappe.integrations.utils import make_post_request from frappe.model.document import Document from frappe.utils.caching import redis_cache from frappe.utils.safe_exec import NamespaceDict, get_safe_globals from frappe.utils.telemetry import POSTHOG_HOST_FIELD, POSTHOG_PROJECT_FIELD from PIL import Image from werkzeug.wrappers import Response from builder import builder_analytics from builder.builder.doctype.builder_page.builder_page import BuilderPageRenderer @frappe.whitelist() def get_blocks(prompt): API_KEY = frappe.conf.openai_api_key if not API_KEY: frappe.throw("OpenAI API Key not set in site config.") messages = [ { "role": "system", "content": "You are a website developer. You respond only with HTML code WITHOUT any EXPLANATION. You use any publicly available images in the webpage. You can use any font from fonts.google.com. Do not use any external css file or font files. DO NOT ADD