| |
| import pinecone |
| from typing import Any |
|
|
| from ..common.brain_exception import BrainException |
| from ..common.http_response_codes import responses |
| from ..common.utils import ( |
| PINECONE_INDEX_NAME, |
| PINECONE_NAMESPACE, |
| ) |
| from ..model.req_model import ReqModel |
|
|
| DIMENSION = 1536 |
| METRIC = "cosine" |
| POD_TYPE = "p1.x1" |
|
|
|
|
| |
| def init_pinecone(index_name, setting: ReqModel, flag=True): |
| try: |
| pinecone.init(api_key=setting.pinecone_key, environment=setting.pinecone_env) |
| if flag: |
| return pinecone.Index(index_name) |
| else: |
| |
| return pinecone.create_index( |
| index_name, dimension=DIMENSION, metric=METRIC, pod_type=POD_TYPE |
| ) |
| except Exception as ex: |
| raise BrainException(code=508, message=responses[508]) |
|
|
|
|
| """add item in pinecone""" |
|
|
|
|
| def add_pinecone( |
| namespace: str, key: str, setting: ReqModel, value: list[float] |
| ) -> Any: |
| index = init_pinecone(index_name=PINECONE_INDEX_NAME, setting=setting) |
|
|
| upsert_response = index.upsert( |
| vectors=[{"id": key, "values": value}], |
| namespace=namespace, |
| ) |
| return upsert_response |
|
|
|
|
| """update item in pinecone""" |
|
|
|
|
| def update_pinecone( |
| setting: ReqModel, namespace: str, key: str, value: list[float] |
| ) -> Any: |
| index = init_pinecone(index_name=PINECONE_INDEX_NAME, setting=setting) |
|
|
| upsert_response = index.update( |
| id=key, |
| values=value, |
| namespace=namespace, |
| ) |
| return upsert_response |
|
|
|
|
| """delete item in pinecone""" |
|
|
|
|
| def delete_pinecone(setting: ReqModel, namespace: str, key: str) -> Any: |
| index = init_pinecone(index_name=PINECONE_INDEX_NAME, setting=setting) |
| delete_response = index.delete(ids=[key], namespace=namespace) |
| return delete_response |
|
|
|
|
| """delete all item in the namespace""" |
|
|
|
|
| def delete_all_pinecone(setting: ReqModel, namespace: str) -> Any: |
| index = init_pinecone(index_name=PINECONE_INDEX_NAME, setting=setting) |
| delete_response = index.delete(delete_all=True, namespace=namespace) |
| return delete_response |
|
|
|
|
| """generate index name of pinecone""" |
|
|
|
|
| def get_pinecone_index_name(uuid): |
| return PINECONE_INDEX_NAME + "-" + uuid |
|
|
|
|
| """generate a namespace of pinecone""" |
|
|
|
|
| def get_pinecone_index_namespace(uuid): |
| return PINECONE_NAMESPACE + "-" + uuid |
|
|