{"id":13724966,"url":"https://github.com/pgvector/pgvector-python","last_synced_at":"2025-06-20T10:40:18.753Z","repository":{"id":39898001,"uuid":"376300726","full_name":"pgvector/pgvector-python","owner":"pgvector","description":"pgvector support for Python","archived":false,"fork":false,"pushed_at":"2025-06-16T22:36:56.000Z","size":408,"stargazers_count":1244,"open_issues_count":5,"forks_count":77,"subscribers_count":17,"default_branch":"master","last_synced_at":"2025-06-16T23:29:22.678Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/pgvector.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE.txt","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2021-06-12T13:48:05.000Z","updated_at":"2025-06-16T22:36:59.000Z","dependencies_parsed_at":"2024-01-26T03:29:09.002Z","dependency_job_id":"df25e90e-f137-4188-a979-62ec5fcfa8f5","html_url":"https://github.com/pgvector/pgvector-python","commit_stats":{"total_commits":85,"total_committers":2,"mean_commits":42.5,"dds":0.0117647058823529,"last_synced_commit":"e7ff1468a1f0651e7b8ec8319e0b1405bc280f47"},"previous_names":[],"tags_count":24,"template":false,"template_full_name":null,"purl":"pkg:github/pgvector/pgvector-python","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pgvector%2Fpgvector-python","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pgvector%2Fpgvector-python/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pgvector%2Fpgvector-python/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pgvector%2Fpgvector-python/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/pgvector","download_url":"https://codeload.github.com/pgvector/pgvector-python/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pgvector%2Fpgvector-python/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":260927982,"owners_count":23084131,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-08-03T01:02:08.311Z","updated_at":"2025-06-20T10:40:13.739Z","avatar_url":"https://github.com/pgvector.png","language":"Python","funding_links":[],"categories":["Python","Sdks \u0026 Libraries"],"sub_categories":[],"readme":"# pgvector-python\n\n[pgvector](https://github.com/pgvector/pgvector) support for Python\n\nSupports [Django](https://github.com/django/django), [SQLAlchemy](https://github.com/sqlalchemy/sqlalchemy), [SQLModel](https://github.com/tiangolo/sqlmodel), [Psycopg 3](https://github.com/psycopg/psycopg), [Psycopg 2](https://github.com/psycopg/psycopg2), [asyncpg](https://github.com/MagicStack/asyncpg), [pg8000](https://github.com/tlocke/pg8000), and [Peewee](https://github.com/coleifer/peewee)\n\n[![Build Status](https://github.com/pgvector/pgvector-python/actions/workflows/build.yml/badge.svg)](https://github.com/pgvector/pgvector-python/actions)\n\n## Installation\n\nRun:\n\n```sh\npip install pgvector\n```\n\nAnd follow the instructions for your database library:\n\n- [Django](#django)\n- [SQLAlchemy](#sqlalchemy)\n- [SQLModel](#sqlmodel)\n- [Psycopg 3](#psycopg-3)\n- [Psycopg 2](#psycopg-2)\n- [asyncpg](#asyncpg)\n- [pg8000](#pg8000)\n- [Peewee](#peewee)\n\nOr check out some examples:\n\n- [Retrieval-augmented generation](https://github.com/pgvector/pgvector-python/blob/master/examples/rag/example.py) with Ollama\n- [Embeddings](https://github.com/pgvector/pgvector-python/blob/master/examples/openai/example.py) with OpenAI\n- [Binary embeddings](https://github.com/pgvector/pgvector-python/blob/master/examples/cohere/example.py) with Cohere\n- [Sentence embeddings](https://github.com/pgvector/pgvector-python/blob/master/examples/sentence_transformers/example.py) with SentenceTransformers\n- [Hybrid search](https://github.com/pgvector/pgvector-python/blob/master/examples/hybrid_search/rrf.py) with SentenceTransformers (Reciprocal Rank Fusion)\n- [Hybrid search](https://github.com/pgvector/pgvector-python/blob/master/examples/hybrid_search/cross_encoder.py) with SentenceTransformers (cross-encoder)\n- [Sparse search](https://github.com/pgvector/pgvector-python/blob/master/examples/sparse_search/example.py) with Transformers\n- [Late interaction search](https://github.com/pgvector/pgvector-python/blob/master/examples/colbert/exact.py) with ColBERT\n- [Visual document retrieval](https://github.com/pgvector/pgvector-python/blob/master/examples/colpali/exact.py) with ColPali\n- [Image search](https://github.com/pgvector/pgvector-python/blob/master/examples/image_search/example.py) with PyTorch\n- [Image search](https://github.com/pgvector/pgvector-python/blob/master/examples/imagehash/example.py) with perceptual hashing\n- [Morgan fingerprints](https://github.com/pgvector/pgvector-python/blob/master/examples/rdkit/example.py) with RDKit\n- [Topic modeling](https://github.com/pgvector/pgvector-python/blob/master/examples/gensim/example.py) with Gensim\n- [Implicit feedback recommendations](https://github.com/pgvector/pgvector-python/blob/master/examples/implicit/example.py) with Implicit\n- [Explicit feedback recommendations](https://github.com/pgvector/pgvector-python/blob/master/examples/surprise/example.py) with Surprise\n- [Recommendations](https://github.com/pgvector/pgvector-python/blob/master/examples/lightfm/example.py) with LightFM\n- [Horizontal scaling](https://github.com/pgvector/pgvector-python/blob/master/examples/citus/example.py) with Citus\n- [Bulk loading](https://github.com/pgvector/pgvector-python/blob/master/examples/loading/example.py) with `COPY`\n\n## Django\n\nCreate a migration to enable the extension\n\n```python\nfrom pgvector.django import VectorExtension\n\nclass Migration(migrations.Migration):\n    operations = [\n        VectorExtension()\n    ]\n```\n\nAdd a vector field to your model\n\n```python\nfrom pgvector.django import VectorField\n\nclass Item(models.Model):\n    embedding = VectorField(dimensions=3)\n```\n\nAlso supports `HalfVectorField`, `BitField`, and `SparseVectorField`\n\nInsert a vector\n\n```python\nitem = Item(embedding=[1, 2, 3])\nitem.save()\n```\n\nGet the nearest neighbors to a vector\n\n```python\nfrom pgvector.django import L2Distance\n\nItem.objects.order_by(L2Distance('embedding', [3, 1, 2]))[:5]\n```\n\nAlso supports `MaxInnerProduct`, `CosineDistance`, `L1Distance`, `HammingDistance`, and `JaccardDistance`\n\nGet the distance\n\n```python\nItem.objects.annotate(distance=L2Distance('embedding', [3, 1, 2]))\n```\n\nGet items within a certain distance\n\n```python\nItem.objects.alias(distance=L2Distance('embedding', [3, 1, 2])).filter(distance__lt=5)\n```\n\nAverage vectors\n\n```python\nfrom django.db.models import Avg\n\nItem.objects.aggregate(Avg('embedding'))\n```\n\nAlso supports `Sum`\n\nAdd an approximate index\n\n```python\nfrom pgvector.django import HnswIndex, IvfflatIndex\n\nclass Item(models.Model):\n    class Meta:\n        indexes = [\n            HnswIndex(\n                name='my_index',\n                fields=['embedding'],\n                m=16,\n                ef_construction=64,\n                opclasses=['vector_l2_ops']\n            ),\n            # or\n            IvfflatIndex(\n                name='my_index',\n                fields=['embedding'],\n                lists=100,\n                opclasses=['vector_l2_ops']\n            )\n        ]\n```\n\nUse `vector_ip_ops` for inner product and `vector_cosine_ops` for cosine distance\n\n#### Half-Precision Indexing\n\nIndex vectors at half-precision\n\n```python\nfrom django.contrib.postgres.indexes import OpClass\nfrom django.db.models.functions import Cast\nfrom pgvector.django import HnswIndex, HalfVectorField\n\nclass Item(models.Model):\n    class Meta:\n        indexes = [\n            HnswIndex(\n                OpClass(Cast('embedding', HalfVectorField(dimensions=3)), name='halfvec_l2_ops'),\n                name='my_index',\n                m=16,\n                ef_construction=64\n            )\n        ]\n```\n\nNote: Add `'django.contrib.postgres'` to `INSTALLED_APPS` to use `OpClass`\n\nGet the nearest neighbors\n\n```python\ndistance = L2Distance(Cast('embedding', HalfVectorField(dimensions=3)), [3, 1, 2])\nItem.objects.order_by(distance)[:5]\n```\n\n## SQLAlchemy\n\nEnable the extension\n\n```python\nsession.execute(text('CREATE EXTENSION IF NOT EXISTS vector'))\n```\n\nAdd a vector column\n\n```python\nfrom pgvector.sqlalchemy import Vector\n\nclass Item(Base):\n    embedding = mapped_column(Vector(3))\n```\n\nAlso supports `HALFVEC`, `BIT`, and `SPARSEVEC`\n\nInsert a vector\n\n```python\nitem = Item(embedding=[1, 2, 3])\nsession.add(item)\nsession.commit()\n```\n\nGet the nearest neighbors to a vector\n\n```python\nsession.scalars(select(Item).order_by(Item.embedding.l2_distance([3, 1, 2])).limit(5))\n```\n\nAlso supports `max_inner_product`, `cosine_distance`, `l1_distance`, `hamming_distance`, and `jaccard_distance`\n\nGet the distance\n\n```python\nsession.scalars(select(Item.embedding.l2_distance([3, 1, 2])))\n```\n\nGet items within a certain distance\n\n```python\nsession.scalars(select(Item).filter(Item.embedding.l2_distance([3, 1, 2]) \u003c 5))\n```\n\nAverage vectors\n\n```python\nfrom pgvector.sqlalchemy import avg\n\nsession.scalars(select(avg(Item.embedding))).first()\n```\n\nAlso supports `sum`\n\nAdd an approximate index\n\n```python\nindex = Index(\n    'my_index',\n    Item.embedding,\n    postgresql_using='hnsw',\n    postgresql_with={'m': 16, 'ef_construction': 64},\n    postgresql_ops={'embedding': 'vector_l2_ops'}\n)\n# or\nindex = Index(\n    'my_index',\n    Item.embedding,\n    postgresql_using='ivfflat',\n    postgresql_with={'lists': 100},\n    postgresql_ops={'embedding': 'vector_l2_ops'}\n)\n\nindex.create(engine)\n```\n\nUse `vector_ip_ops` for inner product and `vector_cosine_ops` for cosine distance\n\n#### Half-Precision Indexing\n\nIndex vectors at half-precision\n\n```python\nfrom pgvector.sqlalchemy import HALFVEC\nfrom sqlalchemy.sql import func\n\nindex = Index(\n    'my_index',\n    func.cast(Item.embedding, HALFVEC(3)).label('embedding'),\n    postgresql_using='hnsw',\n    postgresql_with={'m': 16, 'ef_construction': 64},\n    postgresql_ops={'embedding': 'halfvec_l2_ops'}\n)\n```\n\nGet the nearest neighbors\n\n```python\norder = func.cast(Item.embedding, HALFVEC(3)).l2_distance([3, 1, 2])\nsession.scalars(select(Item).order_by(order).limit(5))\n```\n\n#### Arrays\n\nAdd an array column\n\n```python\nfrom pgvector.sqlalchemy import Vector\nfrom sqlalchemy import ARRAY\n\nclass Item(Base):\n    embeddings = mapped_column(ARRAY(Vector(3)))\n```\n\nAnd register the types with the underlying driver\n\nFor Psycopg 3, use\n\n```python\nfrom pgvector.psycopg import register_vector\nfrom sqlalchemy import event\n\n@event.listens_for(engine, \"connect\")\ndef connect(dbapi_connection, connection_record):\n    register_vector(dbapi_connection)\n```\n\nFor [async connections](https://docs.sqlalchemy.org/en/20/orm/extensions/asyncio.html) with Psycopg 3, use\n\n```python\nfrom pgvector.psycopg import register_vector_async\nfrom sqlalchemy import event\n\n@event.listens_for(engine.sync_engine, \"connect\")\ndef connect(dbapi_connection, connection_record):\n    dbapi_connection.run_async(register_vector_async)\n```\n\nFor Psycopg 2, use\n\n```python\nfrom pgvector.psycopg2 import register_vector\nfrom sqlalchemy import event\n\n@event.listens_for(engine, \"connect\")\ndef connect(dbapi_connection, connection_record):\n    register_vector(dbapi_connection, arrays=True)\n```\n\n## SQLModel\n\nEnable the extension\n\n```python\nsession.exec(text('CREATE EXTENSION IF NOT EXISTS vector'))\n```\n\nAdd a vector column\n\n```python\nfrom pgvector.sqlalchemy import Vector\n\nclass Item(SQLModel, table=True):\n    embedding: Any = Field(sa_type=Vector(3))\n```\n\nAlso supports `HALFVEC`, `BIT`, and `SPARSEVEC`\n\nInsert a vector\n\n```python\nitem = Item(embedding=[1, 2, 3])\nsession.add(item)\nsession.commit()\n```\n\nGet the nearest neighbors to a vector\n\n```python\nsession.exec(select(Item).order_by(Item.embedding.l2_distance([3, 1, 2])).limit(5))\n```\n\nAlso supports `max_inner_product`, `cosine_distance`, `l1_distance`, `hamming_distance`, and `jaccard_distance`\n\nGet the distance\n\n```python\nsession.exec(select(Item.embedding.l2_distance([3, 1, 2])))\n```\n\nGet items within a certain distance\n\n```python\nsession.exec(select(Item).filter(Item.embedding.l2_distance([3, 1, 2]) \u003c 5))\n```\n\nAverage vectors\n\n```python\nfrom pgvector.sqlalchemy import avg\n\nsession.exec(select(avg(Item.embedding))).first()\n```\n\nAlso supports `sum`\n\nAdd an approximate index\n\n```python\nfrom sqlmodel import Index\n\nindex = Index(\n    'my_index',\n    Item.embedding,\n    postgresql_using='hnsw',\n    postgresql_with={'m': 16, 'ef_construction': 64},\n    postgresql_ops={'embedding': 'vector_l2_ops'}\n)\n# or\nindex = Index(\n    'my_index',\n    Item.embedding,\n    postgresql_using='ivfflat',\n    postgresql_with={'lists': 100},\n    postgresql_ops={'embedding': 'vector_l2_ops'}\n)\n\nindex.create(engine)\n```\n\nUse `vector_ip_ops` for inner product and `vector_cosine_ops` for cosine distance\n\n## Psycopg 3\n\nEnable the extension\n\n```python\nconn.execute('CREATE EXTENSION IF NOT EXISTS vector')\n```\n\nRegister the vector type with your connection\n\n```python\nfrom pgvector.psycopg import register_vector\n\nregister_vector(conn)\n```\n\nFor [connection pools](https://www.psycopg.org/psycopg3/docs/advanced/pool.html), use\n\n```python\ndef configure(conn):\n    register_vector(conn)\n\npool = ConnectionPool(..., configure=configure)\n```\n\nFor [async connections](https://www.psycopg.org/psycopg3/docs/advanced/async.html), use\n\n```python\nfrom pgvector.psycopg import register_vector_async\n\nawait register_vector_async(conn)\n```\n\nCreate a table\n\n```python\nconn.execute('CREATE TABLE items (id bigserial PRIMARY KEY, embedding vector(3))')\n```\n\nInsert a vector\n\n```python\nembedding = np.array([1, 2, 3])\nconn.execute('INSERT INTO items (embedding) VALUES (%s)', (embedding,))\n```\n\nGet the nearest neighbors to a vector\n\n```python\nconn.execute('SELECT * FROM items ORDER BY embedding \u003c-\u003e %s LIMIT 5', (embedding,)).fetchall()\n```\n\nAdd an approximate index\n\n```python\nconn.execute('CREATE INDEX ON items USING hnsw (embedding vector_l2_ops)')\n# or\nconn.execute('CREATE INDEX ON items USING ivfflat (embedding vector_l2_ops) WITH (lists = 100)')\n```\n\nUse `vector_ip_ops` for inner product and `vector_cosine_ops` for cosine distance\n\n## Psycopg 2\n\nEnable the extension\n\n```python\ncur = conn.cursor()\ncur.execute('CREATE EXTENSION IF NOT EXISTS vector')\n```\n\nRegister the vector type with your connection or cursor\n\n```python\nfrom pgvector.psycopg2 import register_vector\n\nregister_vector(conn)\n```\n\nCreate a table\n\n```python\ncur.execute('CREATE TABLE items (id bigserial PRIMARY KEY, embedding vector(3))')\n```\n\nInsert a vector\n\n```python\nembedding = np.array([1, 2, 3])\ncur.execute('INSERT INTO items (embedding) VALUES (%s)', (embedding,))\n```\n\nGet the nearest neighbors to a vector\n\n```python\ncur.execute('SELECT * FROM items ORDER BY embedding \u003c-\u003e %s LIMIT 5', (embedding,))\ncur.fetchall()\n```\n\nAdd an approximate index\n\n```python\ncur.execute('CREATE INDEX ON items USING hnsw (embedding vector_l2_ops)')\n# or\ncur.execute('CREATE INDEX ON items USING ivfflat (embedding vector_l2_ops) WITH (lists = 100)')\n```\n\nUse `vector_ip_ops` for inner product and `vector_cosine_ops` for cosine distance\n\n## asyncpg\n\nEnable the extension\n\n```python\nawait conn.execute('CREATE EXTENSION IF NOT EXISTS vector')\n```\n\nRegister the vector type with your connection\n\n```python\nfrom pgvector.asyncpg import register_vector\n\nawait register_vector(conn)\n```\n\nor your pool\n\n```python\nasync def init(conn):\n    await register_vector(conn)\n\npool = await asyncpg.create_pool(..., init=init)\n```\n\nCreate a table\n\n```python\nawait conn.execute('CREATE TABLE items (id bigserial PRIMARY KEY, embedding vector(3))')\n```\n\nInsert a vector\n\n```python\nembedding = np.array([1, 2, 3])\nawait conn.execute('INSERT INTO items (embedding) VALUES ($1)', embedding)\n```\n\nGet the nearest neighbors to a vector\n\n```python\nawait conn.fetch('SELECT * FROM items ORDER BY embedding \u003c-\u003e $1 LIMIT 5', embedding)\n```\n\nAdd an approximate index\n\n```python\nawait conn.execute('CREATE INDEX ON items USING hnsw (embedding vector_l2_ops)')\n# or\nawait conn.execute('CREATE INDEX ON items USING ivfflat (embedding vector_l2_ops) WITH (lists = 100)')\n```\n\nUse `vector_ip_ops` for inner product and `vector_cosine_ops` for cosine distance\n\n## pg8000\n\nEnable the extension\n\n```python\nconn.run('CREATE EXTENSION IF NOT EXISTS vector')\n```\n\nRegister the vector type with your connection\n\n```python\nfrom pgvector.pg8000 import register_vector\n\nregister_vector(conn)\n```\n\nCreate a table\n\n```python\nconn.run('CREATE TABLE items (id bigserial PRIMARY KEY, embedding vector(3))')\n```\n\nInsert a vector\n\n```python\nembedding = np.array([1, 2, 3])\nconn.run('INSERT INTO items (embedding) VALUES (:embedding)', embedding=embedding)\n```\n\nGet the nearest neighbors to a vector\n\n```python\nconn.run('SELECT * FROM items ORDER BY embedding \u003c-\u003e :embedding LIMIT 5', embedding=embedding)\n```\n\nAdd an approximate index\n\n```python\nconn.run('CREATE INDEX ON items USING hnsw (embedding vector_l2_ops)')\n# or\nconn.run('CREATE INDEX ON items USING ivfflat (embedding vector_l2_ops) WITH (lists = 100)')\n```\n\nUse `vector_ip_ops` for inner product and `vector_cosine_ops` for cosine distance\n\n## Peewee\n\nAdd a vector column\n\n```python\nfrom pgvector.peewee import VectorField\n\nclass Item(BaseModel):\n    embedding = VectorField(dimensions=3)\n```\n\nAlso supports `HalfVectorField`, `FixedBitField`, and `SparseVectorField`\n\nInsert a vector\n\n```python\nitem = Item.create(embedding=[1, 2, 3])\n```\n\nGet the nearest neighbors to a vector\n\n```python\nItem.select().order_by(Item.embedding.l2_distance([3, 1, 2])).limit(5)\n```\n\nAlso supports `max_inner_product`, `cosine_distance`, `l1_distance`, `hamming_distance`, and `jaccard_distance`\n\nGet the distance\n\n```python\nItem.select(Item.embedding.l2_distance([3, 1, 2]).alias('distance'))\n```\n\nGet items within a certain distance\n\n```python\nItem.select().where(Item.embedding.l2_distance([3, 1, 2]) \u003c 5)\n```\n\nAverage vectors\n\n```python\nfrom peewee import fn\n\nItem.select(fn.avg(Item.embedding).coerce(True)).scalar()\n```\n\nAlso supports `sum`\n\nAdd an approximate index\n\n```python\nItem.add_index('embedding vector_l2_ops', using='hnsw')\n```\n\nUse `vector_ip_ops` for inner product and `vector_cosine_ops` for cosine distance\n\n## Reference\n\n### Half Vectors\n\nCreate a half vector from a list\n\n```python\nvec = HalfVector([1, 2, 3])\n```\n\nOr a NumPy array\n\n```python\nvec = HalfVector(np.array([1, 2, 3]))\n```\n\nGet a list\n\n```python\nlst = vec.to_list()\n```\n\nGet a NumPy array\n\n```python\narr = vec.to_numpy()\n```\n\n### Sparse Vectors\n\nCreate a sparse vector from a list\n\n```python\nvec = SparseVector([1, 0, 2, 0, 3, 0])\n```\n\nOr a NumPy array\n\n```python\nvec = SparseVector(np.array([1, 0, 2, 0, 3, 0]))\n```\n\nOr a SciPy sparse array\n\n```python\narr = coo_array(([1, 2, 3], ([0, 2, 4],)), shape=(6,))\nvec = SparseVector(arr)\n```\n\nOr a dictionary of non-zero elements\n\n```python\nvec = SparseVector({0: 1, 2: 2, 4: 3}, 6)\n```\n\nNote: Indices start at 0\n\nGet the number of dimensions\n\n```python\ndim = vec.dimensions()\n```\n\nGet the indices of non-zero elements\n\n```python\nindices = vec.indices()\n```\n\nGet the values of non-zero elements\n\n```python\nvalues = vec.values()\n```\n\nGet a list\n\n```python\nlst = vec.to_list()\n```\n\nGet a NumPy array\n\n```python\narr = vec.to_numpy()\n```\n\nGet a SciPy sparse array\n\n```python\narr = vec.to_coo()\n```\n\n## History\n\nView the [changelog](https://github.com/pgvector/pgvector-python/blob/master/CHANGELOG.md)\n\n## Contributing\n\nEveryone is encouraged to help improve this project. Here are a few ways you can help:\n\n- [Report bugs](https://github.com/pgvector/pgvector-python/issues)\n- Fix bugs and [submit pull requests](https://github.com/pgvector/pgvector-python/pulls)\n- Write, clarify, or fix documentation\n- Suggest or add new features\n\nTo get started with development:\n\n```sh\ngit clone https://github.com/pgvector/pgvector-python.git\ncd pgvector-python\npip install -r requirements.txt\ncreatedb pgvector_python_test\npytest\n```\n\nTo run an example:\n\n```sh\ncd examples/loading\npip install -r requirements.txt\ncreatedb pgvector_example\npython3 example.py\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpgvector%2Fpgvector-python","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fpgvector%2Fpgvector-python","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpgvector%2Fpgvector-python/lists"}