langchain-ai / langchain-postgres

LangChain abstractions backed by Postgres Backend
MIT License
134 stars 48 forks source link

upgrading from 0.0.6 -> 0.0.9, getting _async_engine not found #100

Closed codekiln closed 2 months ago

codekiln commented 3 months ago

image

Log signature: _async_engine not found

error emerges from langchain_postgres.vectorstores.PGVector.acreate_vector_extension

I'm trying to call invoke(), so I don't really understand why it's trying to use the async version


In [3]: print_sys_info()

System Information
------------------
> OS:  Darwin
> OS Version:  Darwin Kernel Version 23.6.0: Fri Jul  5 17:53:24 PDT 2024; root:xnu-10063.141.1~2/RELEASE_ARM64_T6020
> Python Version:  3.11.9 (main, May 16 2024, 15:36:38) [Clang 15.0.0 (clang-1500.3.9.4)]

Package Information
-------------------
> langchain_core: 0.2.28
> langchain: 0.2.12
> langchain_community: 0.2.11
> langsmith: 0.1.96
> langchain_anthropic: 0.1.22
> langchain_aws: 0.1.15
> langchain_cli: 0.0.28
> langchain_openai: 0.1.20
> langchain_postgres: 0.0.9
> langchain_text_splitters: 0.2.2
> langchainhub: 0.1.20
> langgraph: 0.1.19
> langserve: 0.2.2

I'm going to downgrade back to 0.0.6 for now.

How I'm instantiating PGVector -

PGVector(
        embeddings=embeddings,
        collection_name=collection_name,
        connection=conn_string,
        use_jsonb=True,
        pre_delete_collection=pre_delete_collection,
    )

I tried updating the connection string so it used postgresql+asyncpg:// instead of postgresql+psycopg:// but got a bunch of downstream errors related to module not found, then tried adding these dependencies to pyproject.toml:

asyncpg = "^0.29.0"
greenlet = "^3.0.3"

But at this point, when using langserve I'm not totally certain how to make it instantiate the async version.

Expected Behavior

Actual Behavior

Simon-Stone commented 3 months ago

Ran into the same issue when trying to deploy a chain containing a PGVector vectorstore using LangServe. Downgrading to 0.0.6 helped.

Benjaminrivard commented 3 months ago

Hi,

If you actually want to use the async methods with latest version (0.0.9), you could use the following snippet, which uses create_async_engine (I got it from PR https://github.com/langchain-ai/langchain-postgres/pull/64)

from langchain_postgres import PGVector
from sqlalchemy.ext.asyncio import create_async_engine

connection_str = "postgresql+psycopg://[...]"
[...]
engine = create_async_engine(connection)

vectorstore = PGVector(
    embeddings=embeddings,
    collection_name=collection_name,
    connection=engine,
    use_jsonb=True,
)

Best, Benjamin

eyurtsev commented 2 months ago

LangServe is async by default. So if you're using langserve you should be creating an async engine. This is not a bug in the library -- just bad documentation