Spaces:
Running
Running
restructure project: pivot from multi-approach notebooks to focused COMICS panel search build
3bf4df9 | """Create the Pinecone document-schema index for comic panel search.""" | |
| import os | |
| import time | |
| from pinecone import Pinecone | |
| from pinecone.preview import SchemaBuilder | |
| INDEX_NAME = os.environ.get("PINECONE_INDEX_NAME", "comic-panels") | |
| IMAGE_EMBED_DIM = int(os.environ.get("IMAGE_EMBED_DIM", "512")) | |
| IMAGE_EMBED_METRIC = os.environ.get("IMAGE_EMBED_METRIC", "cosine") | |
| def create_index(pc: Pinecone) -> None: | |
| existing = [idx.name for idx in pc.list_indexes()] | |
| if INDEX_NAME in existing: | |
| print(f"Index '{INDEX_NAME}' already exists — skipping creation") | |
| return | |
| print(f"Creating index '{INDEX_NAME}' (dim={IMAGE_EMBED_DIM}, metric={IMAGE_EMBED_METRIC})") | |
| schema = ( | |
| SchemaBuilder() | |
| .add_dense_vector_field( | |
| "image_dense", | |
| dimension=IMAGE_EMBED_DIM, | |
| metric=IMAGE_EMBED_METRIC, | |
| ) | |
| .add_sparse_vector_field("text_sparse") | |
| .add_string_field("ocr_text", full_text_search={"language": "en"}) | |
| .add_string_field("search_text", full_text_search={"language": "en"}) | |
| .build() | |
| ) | |
| pc.preview.indexes.create(name=INDEX_NAME, schema=schema) | |
| # Wait for the index to be ready | |
| for _ in range(60): | |
| status = pc.describe_index(INDEX_NAME).status | |
| if status.get("ready"): | |
| print(f"Index '{INDEX_NAME}' is ready") | |
| return | |
| print(" waiting for index to be ready...") | |
| time.sleep(5) | |
| raise TimeoutError(f"Index '{INDEX_NAME}' did not become ready within 5 minutes") | |
| def main(): | |
| pc = Pinecone(api_key=os.environ["PINECONE_API_KEY"]) | |
| create_index(pc) | |
| if __name__ == "__main__": | |
| main() | |