| @@ -448,9 +448,64 @@ def convert_to_agent_apps(): | |||
| click.echo(click.style('Congratulations! Converted {} agent apps.'.format(len(proceeded_app_ids)), fg='green')) | |||
| @click.command('add-qdrant-doc-id-index', help='add qdrant doc_id index.') | |||
| @click.option('--field', default='metadata.doc_id', prompt=False, help='index field , default is metadata.doc_id.') | |||
| def add_qdrant_doc_id_index(field: str): | |||
| click.echo(click.style('Start add qdrant doc_id index.', fg='green')) | |||
| config = current_app.config | |||
| vector_type = config.get('VECTOR_STORE') | |||
| if vector_type != "qdrant": | |||
| click.echo(click.style('Sorry, only support qdrant vector store.', fg='red')) | |||
| return | |||
| create_count = 0 | |||
| try: | |||
| bindings = db.session.query(DatasetCollectionBinding).all() | |||
| if not bindings: | |||
| click.echo(click.style('Sorry, no dataset collection bindings found.', fg='red')) | |||
| return | |||
| import qdrant_client | |||
| from qdrant_client.http.exceptions import UnexpectedResponse | |||
| from qdrant_client.http.models import PayloadSchemaType | |||
| from core.rag.datasource.vdb.qdrant.qdrant_vector import QdrantConfig | |||
| for binding in bindings: | |||
| qdrant_config = QdrantConfig( | |||
| endpoint=config.get('QDRANT_URL'), | |||
| api_key=config.get('QDRANT_API_KEY'), | |||
| root_path=current_app.root_path, | |||
| timeout=config.get('QDRANT_CLIENT_TIMEOUT'), | |||
| grpc_port=config.get('QDRANT_GRPC_PORT'), | |||
| prefer_grpc=config.get('QDRANT_GRPC_ENABLED') | |||
| ) | |||
| try: | |||
| client = qdrant_client.QdrantClient(**qdrant_config.to_qdrant_params()) | |||
| # create payload index | |||
| client.create_payload_index(binding.collection_name, field, | |||
| field_schema=PayloadSchemaType.KEYWORD) | |||
| create_count += 1 | |||
| except UnexpectedResponse as e: | |||
| # Collection does not exist, so return | |||
| if e.status_code == 404: | |||
| click.echo(click.style(f'Collection not found, collection_name:{binding.collection_name}.', fg='red')) | |||
| continue | |||
| # Some other error occurred, so re-raise the exception | |||
| else: | |||
| click.echo(click.style(f'Failed to create qdrant index, collection_name:{binding.collection_name}.', fg='red')) | |||
| except Exception as e: | |||
| click.echo(click.style('Failed to create qdrant client.', fg='red')) | |||
| click.echo( | |||
| click.style(f'Congratulations! Create {create_count} collection indexes.', | |||
| fg='green')) | |||
| def register_commands(app): | |||
| app.cli.add_command(reset_password) | |||
| app.cli.add_command(reset_email) | |||
| app.cli.add_command(reset_encrypt_key_pair) | |||
| app.cli.add_command(vdb_migrate) | |||
| app.cli.add_command(convert_to_agent_apps) | |||
| app.cli.add_command(add_qdrant_doc_id_index) | |||