OctusTech/cartalogo-api
0
1import os2from pinecone import Pinecone, ServerlessSpec3import time4 5def setup_pinecone_index():6 """Configura índice otimizado do Pinecone para joias"""7 8 # Configuração9 api_key = os.getenv('PINECONE_API_KEY')10 index_name = os.getenv('PINECONE_INDEX_NAME', 'jewelry-embeddings')11 12 if not api_key:13 raise ValueError("PINECONE_API_KEY não encontrada no ambiente")14 15 # Inicializa cliente16 pc = Pinecone(api_key=api_key)17 18 # Configuração do índice19 index_config = {20 "name": index_name,21 "dimension": 768, # ViT-L-14 do OpenCLIP22 "metric": "cosine", # Melhor para embeddings de imagem23 "spec": ServerlessSpec(24 cloud="aws",25 region="us-east-1"26 )27 }28 29 try:30 # Verifica se índice existe31 existing_indexes = pc.list_indexes().names()32 33 if index_name in existing_indexes:34 print(f"✅ Índice '{index_name}' já existe!")35 36 # Verifica configuração37 index_info = pc.describe_index(index_name)38 print(f"📊 Dimensão: {index_info.dimension}")39 print(f"📊 Métrica: {index_info.metric}")40 print(f"📊 Status: {index_info.status.state}")41 42 else:43 print(f"🚀 Criando índice '{index_name}'...")44 pc.create_index(**index_config)45 46 # Aguarda criação47 print("⏳ Aguardando criação do índice...")48 while True:49 index_info = pc.describe_index(index_name)50 if index_info.status.state == "Ready":51 break52 time.sleep(5)53 54 print(f"✅ Índice '{index_name}' criado com sucesso!")55 56 # Testa conexão57 index = pc.Index(index_name)58 stats = index.describe_index_stats()59 print(f"📊 Vetores no índice: {stats.total_vector_count}")60 61 return index62 63 except Exception as e:64 print(f"❌ Erro ao configurar Pinecone: {e}")65 return None66 67if __name__ == "__main__":68 print("🔧 Configurando Pinecone para catalogação de joias...")69 index = setup_pinecone_index()70 71 if index:72 print("✅ Configuração do Pinecone concluída!")73 else:74 print("❌ Falha na configuração do Pinecone!")75 