|
from functools import lru_cache |
|
from typing import Optional |
|
|
|
from pydantic_settings import BaseSettings |
|
|
|
EXTRACT_INFO_SYSTEM = "You are an expert in structured data extraction. You will be given an image or a set of images of a product and should extract its properties into the given structure." |
|
|
|
EXTRACT_INFO_HUMAN = ( |
|
"""Output properties of the main product (or {product_taxonomy}) shown in the images. You should use the following product data to assist you, if available: |
|
|
|
{product_data} |
|
|
|
If an attribute appears in both the image and the product data, use the value from the product data.""" |
|
).replace(" ", "") |
|
|
|
FOLLOW_SCHEMA_SYSTEM = "You are an expert in structured data extraction. You will be given an dictionary of attributes of a product and should output the its properties into the given structure." |
|
|
|
FOLLOW_SCHEMA_HUMAN = """Convert following attributes to structured schema. Keep all the keys and number of values. Only replace the values themselves. : |
|
|
|
{json_info}""" |
|
|
|
GET_PERCENTAGE_SYSTEM = "You are a fashion assistant. You have to assign percentages of cerntainty to each attribute of a product based on the image and product data. You will be given an image or a set of images of a product and set of attributes and should output the percentages of certainty into the given structure." |
|
|
|
GET_PERCENTAGE_HUMAN = """I have a schema for extracting attributes from images of products. It's pasted below. |
|
For each of the allowed values, in each of the attributes, assign a percentage of certainty that the product fits with that value. |
|
I have attached images of the product. |
|
|
|
You should use the following product data to assist you, if available: |
|
{product_data} |
|
If an attribute appears in both the image and the product data, use the value from the product data. |
|
""" |
|
|
|
REEVALUATE_SYSTEM = "You are a fashion assistant. You have to reevaluate the attributes of a product based on the image and product data. You will be given an image or a set of images of a product and set of attributes and should output the reevaluated attributes into the given structure." |
|
|
|
REEVALUATE_HUMAN = """Reevaluate the following attributes of the main product (or {product_taxonomy}) shown in the images. Here are the attributes to reevaluate: |
|
{product_data} |
|
|
|
If an attribute has type of string, do not need to reevaluate the values, just the attribute itself. If an attribute has type of list[string], reevaluate the top three values. |
|
""" |
|
|
|
class Prompts(BaseSettings): |
|
EXTRACT_INFO_SYSTEM_MESSAGE: str = EXTRACT_INFO_SYSTEM |
|
|
|
EXTRACT_INFO_HUMAN_MESSAGE: str = EXTRACT_INFO_HUMAN |
|
|
|
FOLLOW_SCHEMA_SYSTEM_MESSAGE: str = FOLLOW_SCHEMA_SYSTEM |
|
|
|
FOLLOW_SCHEMA_HUMAN_MESSAGE: str = FOLLOW_SCHEMA_HUMAN |
|
|
|
GET_PERCENTAGE_SYSTEM_MESSAGE: str = GET_PERCENTAGE_SYSTEM |
|
|
|
GET_PERCENTAGE_HUMAN_MESSAGE: str = GET_PERCENTAGE_HUMAN |
|
|
|
REEVALUATE_SYSTEM_MESSAGE: str = REEVALUATE_SYSTEM |
|
|
|
REEVALUATE_HUMAN_MESSAGE: str = REEVALUATE_HUMAN |
|
|
|
|
|
|
|
@lru_cache |
|
def get_prompts() -> Prompts: |
|
""" |
|
Create and cache a Prompts instance. |
|
Returns the same instance for subsequent calls. |
|
""" |
|
prompts = Prompts() |
|
return prompts |
|
|