Skip to content

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

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Closed
codekiln opened this issue Aug 6, 2024 · 4 comments
Closed

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

codekiln opened this issue Aug 6, 2024 · 4 comments

Comments

@codekiln
Copy link

codekiln commented Aug 6, 2024

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

  • Upgrading patch versions doesn't change synchronous behavior in a backwards-incompatible way
  • Calling the ainvoke and other methods use the async postgres connection, calling invoke uses the sync postgres connection
  • Breaking changes are accompanied by docs in the README
  • There is way to use synchronous behavior without asynchronous behavior that is documented in the README

Actual Behavior

  • Upgrading patch versions are not backwards compatible
  • The mention of "async" in the README after 0.0.6 doesn't offer adequate context on how to configure the project for async (or not)
  • Project appears to be async by default and it's not clear if it's still possible to use it without configuring async drivers
@Simon-Stone
Copy link

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

@Benjaminrivard
Copy link

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 #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
Copy link
Collaborator

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

@eyurtsev eyurtsev closed this as not planned Won't fix, can't repro, duplicate, stale Sep 12, 2024
@zeusari
Copy link

zeusari commented Apr 25, 2025

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 #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

While running this in Windows I encountered this exception.

raise e.InterfaceError(
sqlalchemy.exc.InterfaceError: (psycopg.InterfaceError) Psycopg cannot use the 'ProactorEventLoop' to run in async mode. Please use a compatible event loop, for instance by setting 'asyncio.set_event_loop_policy(WindowsSelectorEventLoopPolicy())'

Adding the correct EventLoopPolicy help resolving this. If it helps other below is the code snippet.

if sys.platform == "win32":
    asyncio.set_event_loop_policy(asyncio.WindowsSelectorEventLoopPolicy()) 

Found the solution here:
here

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

5 participants