-
Notifications
You must be signed in to change notification settings - Fork 14.7k
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
core[minor]: Adds an in-memory implementation of RecordManager #13200
core[minor]: Adds an in-memory implementation of RecordManager #13200
Conversation
The latest updates on your projects. Learn more about Vercel for Git ↗︎ 1 Ignored Deployment
|
e3814f2
to
d6b1611
Compare
- [Add a Wrapper vectorstore, compatible with SelfQueryRetriever](langchain-ai/langchain#13190) - [Adds an in-memory implementation of RecordStore](langchain-ai/langchain#13200) - [Add SQLDocStore](langchain-ai/langchain#13181)
cf2d422
to
a9e342a
Compare
c041b27
to
b069a09
Compare
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
this is good, but the async methods aren't actually async right?
No. All is async, because all method works in memories. Without IO. |
@hwchase17 |
b069a09
to
f667410
Compare
libs/community/langchain_community/indexes/memory_recordmanager.py
Outdated
Show resolved
Hide resolved
libs/community/langchain_community/indexes/memory_recordmanager.py
Outdated
Show resolved
Hide resolved
libs/community/langchain_community/indexes/memory_recordmanager.py
Outdated
Show resolved
Hide resolved
@eyurtsev with
|
@eyurtsev
It has nothing to do with my patch |
@pprados please review I reused the existing implementation of the in memory record manager from unit tests.
It's moved to base.py together with the abstract interface. We can move it into a separate module as well (doesn't really matter), we just need it to be a non private module for it to appear in the API Reference documentation. The typical name for memory implementations is "InMemory" |
@eyurtsev |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Fixed
…22065) # package community: Fix SQLChatMessageHistory ## Description Here is a rewrite of `SQLChatMessageHistory` to properly implement the asynchronous approach. The code circumvents [issue 22021](#22021) by accepting a synchronous call to `def add_messages()` in an asynchronous scenario. This bypasses the bug. For the same reasons as in [PR 22](langchain-ai/langchain-postgres#32) of `langchain-postgres`, we use a lazy strategy for table creation. Indeed, the promise of the constructor cannot be fulfilled without this. It is not possible to invoke a synchronous call in a constructor. We compensate for this by waiting for the next asynchronous method call to create the table. The goal of the `PostgresChatMessageHistory` class (in `langchain-postgres`) is, among other things, to be able to recycle database connections. The implementation of the class is problematic, as we have demonstrated in [issue 22021](#22021). Our new implementation of `SQLChatMessageHistory` achieves this by using a singleton of type (`Async`)`Engine` for the database connection. The connection pool is managed by this singleton, and the code is then reentrant. We also accept the type `str` (optionally complemented by `async_mode`. I know you don't like this much, but it's the only way to allow an asynchronous connection string). In order to unify the different classes handling database connections, we have renamed `connection_string` to `connection`, and `Session` to `session_maker`. Now, a single transaction is used to add a list of messages. Thus, a crash during this write operation will not leave the database in an unstable state with a partially added message list. This makes the code resilient. We believe that the `PostgresChatMessageHistory` class is no longer necessary and can be replaced by: ``` PostgresChatMessageHistory = SQLChatMessageHistory ``` This also fixes the bug. ## Issue - [issue 22021](#22021) - Bug in _exit_history() - Bugs in PostgresChatMessageHistory and sync usage - Bugs in PostgresChatMessageHistory and async usage - [issue 36](langchain-ai/langchain-postgres#36) ## Twitter handle: pprados ## Tests - libs/community/tests/unit_tests/chat_message_histories/test_sql.py (add async test) @baskaryan, @eyurtsev or @hwchase17 can you check this PR ? And, I've been waiting a long time for validation from other PRs. Can you take a look? - [PR 32](langchain-ai/langchain-postgres#32) - [PR 15575](#15575) - [PR 13200](#13200) --------- Co-authored-by: Eugene Yurtsev <eyurtsev@gmail.com>
**Description:** langchain offers three technologies to save data: - [vectorstore](https://python.langchain.com/docs/modules/data_connection/vectorstores/) - [docstore](https://js.langchain.com/docs/api/schema/classes/Docstore) - [record manager](https://python.langchain.com/docs/modules/data_connection/indexing) If you want to combine these technologies in a sample persistence stategy you need a common implementation for each. `DocStore` propose `InMemoryDocstore`. We propose the class `MemoryRecordManager` to complete the system. This is the prelude to another full-request, which needs a consistent combination of persistence components. **Tag maintainer:** @baskaryan **Twitter handle:** @pprados --------- Co-authored-by: Eugene Yurtsev <eyurtsev@gmail.com>
Description:
langchain offers three technologies to save data:
If you want to combine these technologies in a sample persistence stategy you need a common implementation for each.
DocStore
proposeInMemoryDocstore
.We propose the class
MemoryRecordManager
to complete the system.This is the prelude to another full-request, which needs a consistent combination of persistence components.
Tag maintainer:
@baskaryan
Twitter handle:
@pprados