api_endpoint (Optional[str]): full URL to the API endpoint,
        such as "https://<DB-ID>-us-east1.apps.astra.datastax.com".
    astra_db_client (Optional[Any]): *alternative to token+api_endpoint*,
        you can pass an already-created 'astrapy.db.AstraDB' instance.
    namespace (Optional[str]): namespace (aka keyspace) where the
        collection is created. Defaults to the database's "default namespace".
    metric (Optional[str]): similarity function to use out of those
        available in Astra DB. If left out, it will use Astra DB API's
        defaults (i.e. "cosine" - but, for performance reasons,
        "dot_product" is suggested if embeddings are normalized to one).
Advanced arguments (coming with sensible defaults):
    batch_size (Optional[int]): Size of batches for bulk insertions.
    bulk_insert_batch_concurrency (Optional[int]): Number of threads
        to insert batches concurrently.
    bulk_insert_overwrite_concurrency (Optional[int]): Number of
        threads in a batch to insert pre-existing entries.
    bulk_delete_concurrency (Optional[int]): Number of threads
        (for deleting multiple rows concurrently).
    pre_delete_collection (Optional[bool]): whether to delete the collection
        before creating it. If False and the collection already exists,
        the collection will be used as is.
A note on concurrency: as a rule of thumb, on a typical client machine
it is suggested to keep the quantity
    bulk_insert_batch_concurrency * bulk_insert_overwrite_concurrency
much below 1000 to avoid exhausting the client multithreading/networking
resources. The hardcoded defaults are somewhat conservative to meet
most machines' specs, but a sensible choice to test may be:
    bulk_insert_batch_concurrency = 80