Spaces:
Runtime error
Runtime error
| from langchain.embeddings.openai import OpenAIEmbeddings | |
| from ..common.utils import OPENAI_API_KEY, PINECONE_NAMESPACE, PINECONE_INDEX_NAME | |
| from .pinecone_engine import ( | |
| init_pinecone, | |
| get_pinecone_index_namespace, | |
| delete_pinecone, | |
| update_pinecone, | |
| ) | |
| from ..model.basic_model import DataStatus | |
| from ..model.image_model import ImageModel | |
| from ..model.req_model import ReqModel | |
| def get_embeddings(setting: ReqModel): | |
| return OpenAIEmbeddings(openai_api_key=setting.openai_key) | |
| # def embed_image_text(image_text: str, image_name: str, uuid: str) -> str: | |
| def embed_image_text(image: ImageModel, setting: ReqModel) -> str: | |
| prompt_template = f""" | |
| This is the text about the image. | |
| ### | |
| {image.image_text} | |
| """ | |
| embed_image = get_embeddings(setting=setting).embed_query(prompt_template) | |
| index = init_pinecone(index_name=PINECONE_INDEX_NAME, setting=setting) | |
| """create | update | delete in pinecone""" | |
| pinecone_namespace = get_pinecone_index_namespace(image.uuid) | |
| try: | |
| if image.status == DataStatus.CREATED: | |
| """add a data in pinecone""" | |
| upsert_response = index.upsert( | |
| vectors=[{"id": image.image_name, "values": embed_image}], | |
| namespace=pinecone_namespace, | |
| ) | |
| elif image.status == DataStatus.DELETED: | |
| delete_pinecone(namespace=pinecone_namespace, key=image.image_name) | |
| elif image.status == DataStatus.UPDATED: | |
| update_pinecone( | |
| namespace=pinecone_namespace, key=image.image_name, value=embed_image | |
| ) | |
| except Exception as e: | |
| return "fail to embed image text" | |
| return "success to embed image text" | |
| def query_image_text(image_content, message, setting: ReqModel): | |
| embed_image = get_embeddings(setting=setting).embed_query( | |
| get_prompt_image_with_message(image_content, message) | |
| ) | |
| index = init_pinecone(index_name=PINECONE_INDEX_NAME, setting=setting) | |
| relatedness_data = index.query( | |
| vector=embed_image, | |
| top_k=3, | |
| include_values=False, | |
| namespace=get_pinecone_index_namespace(setting.uuid), | |
| ) | |
| if len(relatedness_data["matches"]) > 0: | |
| return relatedness_data["matches"][0]["id"] | |
| return "" | |
| def get_prompt_image_with_message(image_content, message): | |
| prompt_template = f""" | |
| This is the text about the image. | |
| ### | |
| {image_content} | |
| ### | |
| This message is the detailed description of the image. | |
| ### | |
| {message} | |
| """ | |
| return prompt_template | |