Skip to content
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

Could not import faiss-node (NextJS) when loading from python #4027

Closed
Simbaclaws opened this issue Jan 15, 2024 · 23 comments · Fixed by #4036
Closed

Could not import faiss-node (NextJS) when loading from python #4027

Simbaclaws opened this issue Jan 15, 2024 · 23 comments · Fixed by #4036
Labels
auto:bug Related to a bug, vulnerability, unexpected error with an existing feature

Comments

@Simbaclaws
Copy link

Simbaclaws commented Jan 15, 2024

Hi, I know this is a duplicate of:

#2107

However, in that issue it says that this has been resolved. While I'm on the latest release:
0.1.2

Which should have the fix for this available here:
#2178

My issue is the following:
#2107 (comment)

For reference, I'll post it below:

Hi there,

I'm getting the same type of error message in my console when I try to:

const vectorstore = await FaissStore.loadFromPython("./knowledge", new OpenAIEmbeddings({
            modelName: "text-embedding-ada-002"
}));

knowledge is a folder in the root folder that includes 2 files:

index.pkl
index.faiss

I am using the following to see whether my API route in nextjs can reach the files:

const knowledge = path.resolve('./knowledge');
const filenames = fs.readdirSync(knowledge);
console.log(filenames);

this logs the actual filenames, so I know they're there...

I'm getting the following error message in my console:

 Error: Could not import faiss-node. Please install faiss-node as a dependency with, e.g. `npm install -S faiss-node`.

Error: Cannot read properties of undefined (reading 'indexOf')
    at FaissStore.importFaiss (webpack-internal:///(rsc)/./node_modules/@langchain/community/dist/vectorstores/faiss.js:363:19)
    at process.processTicksAndRejections (node:internal/process/task_queues:95:5)
    at async readIndex (webpack-internal:///(rsc)/./node_modules/@langchain/community/dist/vectorstores/faiss.js:292:37)   
    at async Promise.all (index 1)
    at async FaissStore.loadFromPython (webpack-internal:///(rsc)/./node_modules/@langchain/community/dist/vectorstores/faiss.js:295:32)
    at async POST (webpack-internal:///(rsc)/./app/api/chat/route.ts:56:29)
    at async D:\Development\Persoonlijk\gpt-creator\node_modules\next\dist\compiled\next-server\app-route.runtime.dev.js:6:63251

I'm running this on windows with npm run dev
I've already tried installing the package, but I have no clue why my nextjs isn't importing the files...

My node version is 20.10.0

Is there anything I can do to get this issue sorted?

It says read properties of undefined (reading 'indexOf')
This to me indicates it can not read the ./knowledge folder with files for some reason. But I haven't been able to figure out why yet. I could be totally wrong here though.

Copy link

dosubot bot commented Jan 15, 2024

🤖

Hello @Simbaclaws! 🚀 Nice to meet you, I'm Dosu, a bot designed to help you with troubleshooting, answering questions, and guiding you on how to be a contributor. I'm here to lend a hand while a human maintainer becomes available. I'm currently looking over the issue you've posted and will get back to you with a comprehensive answer shortly. Hold tight! 🛸

@dosubot dosubot bot added the auto:bug Related to a bug, vulnerability, unexpected error with an existing feature label Jan 15, 2024
@jacoblee93
Copy link
Collaborator

CC @ewfian could be a Windows issue?

@Simbaclaws
Copy link
Author

Simbaclaws commented Jan 15, 2024

I'll test this on a ubuntu server soon, I'll also test it on mac os if need be...

I'll give updated info tomorrow.

EDIT: Same issue on ubuntu 23.04

@ewfian
Copy link
Contributor

ewfian commented Jan 16, 2024

The loadFromPython method does indeed have issues. I saved index using the latest version of the Python package and encountered an error when trying to load it with the following code.

langchain                  0.1.0
langchain-community        0.0.12
langchain-core             0.1.10
from langchain_community.embeddings import FakeEmbeddings

from langchain.text_splitter import CharacterTextSplitter
from langchain_community.vectorstores import FAISS
from langchain_community.document_loaders import TextLoader

loader = TextLoader("state_of_the_union.txt")
documents = loader.load()
text_splitter = CharacterTextSplitter(chunk_size=1000, chunk_overlap=0)
docs = text_splitter.split_documents(documents)

embeddings = FakeEmbeddings(size=4)

db = FAISS.from_documents(docs, embeddings)

query = "What did the president say about Ketanji Brown Jackson"
docs = db.similarity_search(query)

db.save_local("faiss_index")

image

This is because the namespace of InMemoryDocstore was changed on the Python side. Consequently, the newly saved .pkl file cannot be imported. I will fix this next.

image

@Simbaclaws However, I did not encounter the same error as you did. Please try the example code below without loadFromPython. This way, I can confirm whether it is an issue with importing the package or with loadFromPython.

async function run() {
    const vectorStore = await FaissStore.fromTexts(
        ["Hello world", "Bye bye", "hello nice world"],
        [{ id: 2 }, { id: 1 }, { id: 3 }],
        new FakeEmbeddings()
      );
    
      const resultOne = await vectorStore.similaritySearch("hello world", 1);
      console.log(resultOne);
}

@Simbaclaws
Copy link
Author

@ewfian

Where do I import FakeEmbeddings from?

The suggested packages by my IDE seem to all fail:

Module not found: Package path ./dist/utils/testing is not exported from package /home/simbaclaws/Projects/Personal/my-gpt/node_modules/@langchain/community (see exports field in /home/simbaclaws/Projects/Personal/my-gpt/node_modules/@langchain/community/package.json)
Module not found: Package path ./dist/embeddings/fake is not exported from package /home/simbaclaws/Projects/Personal/my-gpt/node_modules/langchain (see exports field in /home/simbaclaws/Projects/Personal/my-gpt/node_modules/langchain/package.json

@ewfian
Copy link
Contributor

ewfian commented Jan 16, 2024

@ewfian

Where do I import FakeEmbeddings from?

The suggested packages by my IDE seem to all fail:

Module not found: Package path ./dist/utils/testing is not exported from package /home/simbaclaws/Projects/Personal/my-gpt/node_modules/@langchain/community (see exports field in /home/simbaclaws/Projects/Personal/my-gpt/node_modules/@langchain/community/package.json)
Module not found: Package path ./dist/embeddings/fake is not exported from package /home/simbaclaws/Projects/Personal/my-gpt/node_modules/langchain (see exports field in /home/simbaclaws/Projects/Personal/my-gpt/node_modules/langchain/package.json

Please try this:
"langchain/embeddings/fake"

or you can also use OpenAIEmbeddings

new OpenAIEmbeddings({
            modelName: "text-embedding-ada-002"
})

@Simbaclaws
Copy link
Author

Simbaclaws commented Jan 16, 2024

Same error message sadly:

Error: Could not import faiss-node. Please install faiss-node as a dependency with, e.g. `npm install -S faiss-node`.

Error: Cannot read properties of undefined (reading 'indexOf')
    at FaissStore.importFaiss (webpack-internal:///(rsc)/./node_modules/.pnpm/@langchain+community@0.0.17_faiss-node@0.5.1/node_modules/@langchain/community/dist/vectorstores/faiss.js:363:19)
    at async FaissStore.addVectors (webpack-internal:///(rsc)/./node_modules/.pnpm/@langchain+community@0.0.17_faiss-node@0.5.1/node_modules/@langchain/community/dist/vectorstores/faiss.js:91:37)
    at async FaissStore.fromDocuments (webpack-internal:///(rsc)/./node_modules/.pnpm/@langchain+community@0.0.17_faiss-node@0.5.1/node_modules/@langchain/community/dist/vectorstores/faiss.js:337:9)
    at async run (webpack-internal:///(rsc)/./app/api/chat/route.ts:25:25)
    at async POST (webpack-internal:///(rsc)/./app/api/chat/route.ts:70:9)
    at async /home/simbaclaws/Projects/Personal/vero-gpt/node_modules/.pnpm/next@14.0.4_react-dom@18.2.0_react@18.2.0/node_modules/next/dist/compiled/next-server/app-route.runtime.dev.js:6:63251

I am using this inside a nextjs 14 api route by the way.

@ewfian
Copy link
Contributor

ewfian commented Jan 16, 2024

@Simbaclaws I just created a Next.js project and reproduced your issue using the App Router pattern. From the error, I noticed that faiss-node is being bundled by webpack, which is incorrect since faiss-node is a native module.

image
https://js.langchain.com/docs/integrations/vectorstores/faiss

I found a configuration in the documentation that exempts faiss-node from bundling.
https://nextjs.org/docs/app/api-reference/next-config-js/serverComponentsExternalPackages

After adding this config for faiss-node, it should work correctly. Please give it a try.
image

@Simbaclaws
Copy link
Author

Simbaclaws commented Jan 16, 2024

That works!! Thank you so much!

I did not know that I had to use a experimental feature in nextjs to put the faiss-node package outside of the webpack bundler.

I did see the same thing in the docs, but couldn't figure out I had to use this feature.

You are my hero 💯

@Simbaclaws
Copy link
Author

Simbaclaws commented Jan 16, 2024

When I put loadFromPython back in it says:

 TypeError: NameRegistry is not a constructor
    at readStore (webpack-internal:///(rsc)/./node_modules/.pnpm/@langchain+community@0.0.17_faiss-node@0.5.1/node_modules/@langchain/community/dist/vectorstores/faiss.js:280:30)
    at async Promise.all (index 0)
    at async FaissStore.loadFromPython (webpack-internal:///(rsc)/./node_modules/.pnpm/@langchain+community@0.0.17_faiss-node@0.5.1/node_modules/@langchain/community/dist/vectorstores/faiss.js:295:32)
    at async POST (webpack-internal:///(rsc)/./app/api/chat/route.ts:86:29)
    at async /home/simbaclaws/Projects/Personal/vero-gpt/node_modules/.pnpm/next@14.0.4_react-dom@18.2.0_react@18.2.0/node_modules/next/dist/compiled/next-server/app-route.runtime.dev.js:6:63251

perhaps I'm still doing something wrong?

The only other thing I'm putting in is modelName, perhaps it's complaining about that name?

const vectorstore = await FaissStore.loadFromPython("./knowledge", new OpenAIEmbeddings({
            modelName: "text-embedding-ada-002"
        }))

EDIT: Also without the modelName it's doing that...

@ewfian
Copy link
Contributor

ewfian commented Jan 16, 2024

@Simbaclaws It seems that pickleparser has not been imported correctly. To read a .pkl file saved in Python, the pickleparser is needed. Please try a few basic cases with pickleparser to see if it works.

import { NameRegistry } from 'pickleparser'
console.log(NameRegistry.getFullyQualifiedName("testmodule", "testname"))  // testmodule.testname
const registry = new NameRegistry();
registry.register("testmodule", "testname", () => 123)
const func = registry.resolve("testmodule", "testname") as any
console.log(func()) // 123

@Simbaclaws
Copy link
Author

Simbaclaws commented Jan 16, 2024

I'm sorry I'm quite new to all of faiss, langchain, and openai.

In the case of loading a folder with a pkl file, what exactly would I have to do with the NameRegistry? It confuses me a little.

In python it looks like I can just say:

VectorStore = FAISS.load_local('knowledge', OpenAIEmbeddings(model='text-embedding-ada-002', openai_api_key=OPENAI_API_KEY))

And it would work in importing the knowledge folder with the pkl. I don't have to do anything with any sort of NameRegistry in python.

I assumed this worked the same way in javascript.

What exactly is this NameRegistry and how do I use it in a similar fashion according to my example:

const vectorstore = await FaissStore.loadFromPython("./knowledge", new OpenAIEmbeddings({
            modelName: "text-embedding-ada-002"
}))

I'll use your example code to test whether it'll work, but I'm just a bit confused what the extra steps would be to read from a knowledge folder that is local.

EDIT:
Now I'm getting this error message:

 TypeError: rawStore.toInMemoryDocstore is not a function
    at readStore (webpack-internal:///(rsc)/./node_modules/.pnpm/@langchain+community@0.0.17_faiss-node@0.5.1_pickleparser@0.2.1/node_modules/@langchain/community/dist/vectorstores/faiss.js:285:36)
    at async Promise.all (index 0)
    at async FaissStore.loadFromPython (webpack-internal:///(rsc)/./node_modules/.pnpm/@langchain+community@0.0.17_faiss-node@0.5.1_pickleparser@0.2.1/node_modules/@langchain/community/dist/vectorstores/faiss.js:295:32)
    at async POST (webpack-internal:///(rsc)/./app/api/chat/route.ts:88:29)
    at async /home/simbaclaws/Projects/Personal/vero-gpt/node_modules/.pnpm/next@14.0.4_react-dom@18.2.0_react@18.2.0/node_modules/next/dist/compiled/next-server/app-route.runtime.dev.js:6:63251

I think this comes down to your original problem here: #4027 (comment)

EDIT 2: I think I understand now that I just needed the pickleparser package to get further I guess... Wouldn't it be wise by the maintainers of faiss-node to make the pickleparser a dependency of the faiss-node package? Or is this something that should be excluded by default? If you have code in your package that makes use of another package, it would be useful to include that package in the dependencies IMO...

Thank you so much for taking the time to help solve my issue on top of trying to help solve the issue mentioned in your comment. You are awesome 👍

@ewfian
Copy link
Contributor

ewfian commented Jan 16, 2024

@Simbaclaws Python will export two files: index.pkl and index.faiss. index.faiss contains internal data for faiss and can be directly read by faiss-node. On the other hand, index.pkl is used to record mapping relationships and metadata. The structure of this file is in Python's pickle format, which is a binary file and JavaScript cannot directly read this file, so we need to use pickleparser to read it.

When pickleparser reads a .pkl file, it needs to handle the mapping relationships between Python identifiers such as modules and class names, and the data structures in JavaScript. These mappings are managed through NameRegistry.

const registry = new NameRegistry()
  .register("langchain.docstore.in_memory", "InMemoryDocstore", PyInMemoryDocstore)
  .register("langchain_community.docstore.in_memory", "InMemoryDocstore", PyInMemoryDocstore)
  .register("langchain.schema", "Document", PyDocument)
  .register("langchain.docstore.document", "Document", PyDocument)
  .register("langchain.schema.document", "Document", PyDocument)
  .register("langchain_core.documents.base", "Document", PyDocument)
  .register("pathlib", "WindowsPath", (...args) => args.join("\\"))
  .register("pathlib", "PosixPath", (...args) => args.join("/"));

For example, .register("langchain.docstore.in_memory", "InMemoryDocstore", PyInMemoryDocstore);
In Python, the class name is InMemoryDocstore, located in langchain.docstore.in_memory, while in JavaScript, it is PyInMemoryDocstore.

The error you are currently encountering is a bug.

TypeError: rawStore.toInMemoryDocstore is not a function

Please refer to the comments above; I will file a pull request to fix this later. In the meantime, you can make a simple edit in node_modules@langchain\community\dist\vectorstores\faiss.js. Add the following two lines of code to make it work.

image

@ewfian
Copy link
Contributor

ewfian commented Jan 16, 2024

EDIT 2: I think I understand now that I just needed the pickleparser package to get further I guess... Wouldn't it be wise by the maintainers of faiss-node to make the pickleparser a dependency of the faiss-node package? Or is this something that should be excluded by default? If you have code in your package that makes use of another package, it would be useful to include that package in the dependencies IMO...

In fact, there is no relationship between the faiss-node and pickleparser. they are simply used together in loadFromPython of langchian. This is explicitly mentioned in the Langchain documentation as well: https://js.langchain.com/docs/integrations/vectorstores/faiss
image

@Simbaclaws
Copy link
Author

Simbaclaws commented Jan 16, 2024

Oh wow, I must've overlooked that.

Thank you so much for everything, I'm currently checking whether the solution works.

I'll report back!

EDIT:

I have this right now in faiss.js:

            const registry = new NameRegistry()
                .register("langchain.docstore.in_memory", "InMemoryDocstore", PyInMemoryDocstore)
                .register("langchain_community.docstore.in_memory", "InMemoryDocstore", PyInMemoryDocstore)
                .register("langchain.schema", "Document", PyDocument)
                .register("langchain.docstore.document", "Document", PyDocument)
                .register("langchain.schema.document", "Document", PyDocument)
                .register("langchain_core.documents.base", "Document", PyDocument)
                .register("pathlib", "WindowsPath", (...args) => args.join("\\"))
                .register("pathlib", "PosixPath", (...args) => args.join("/"));

However, it is still complaining about:

 TypeError: rawStore.toInMemoryDocstore is not a function
    at readStore (webpack-internal:///(rsc)/./node_modules/.pnpm/@langchain+community@0.0.17_faiss-node@0.5.1_pickleparser@0.2.1/node_modules/@langchain/community/dist/vectorstores/faiss.js:285:36)
    at async Promise.all (index 0)
    at async FaissStore.loadFromPython (webpack-internal:///(rsc)/./node_modules/.pnpm/@langchain+community@0.0.17_faiss-node@0.5.1_pickleparser@0.2.1/node_modules/@langchain/community/dist/vectorstores/faiss.js:295:32)
    at async POST (webpack-internal:///(rsc)/./app/api/chat/route.ts:88:29)
    at async /home/simbaclaws/Projects/Personal/vero-gpt/node_modules/.pnpm/next@14.0.4_react-dom@18.2.0_react@18.2.0/node_modules/next/dist/compiled/next-server/app-route.runtime.dev.js:6:63251

I've checked the .pnpm correct faiss.js and it's the same as the faiss.js in my node_modules.

Doesn't it have to be toInMemoryDocstore in here instead of: InMemoryDocstore?

                .register("langchain.docstore.in_memory", "InMemoryDocstore", PyInMemoryDocstore)
                .register("langchain_community.docstore.in_memory", "InMemoryDocstore", PyInMemoryDocstore)

@ewfian
Copy link
Contributor

ewfian commented Jan 16, 2024

@Simbaclaws Please try deleting the .next directory to invalidate the build cache.

@Simbaclaws
Copy link
Author

Simbaclaws commented Jan 16, 2024

Seems like the error dissapeared, but a new one popped up for me.

I'm sorry if I'm being a nuisance...

Currently I'm using the following code:

const vectorstore = await FaissStore.loadFromPython("./knowledge", new OpenAIEmbeddings({
            modelName: "text-embedding-ada-002"
        }))

        const vectorStoreRetriever = vectorstore.asRetriever();
        // Create a system & human prompt for the chat model
        const SYSTEM_TEMPLATE = `
        This is some prompt I'm giving to my gpt
        ==========
        {question}
        ==========

       Answer:
       Source:`;

        const templateMessages = [
            SystemMessagePromptTemplate.fromTemplate(SYSTEM_TEMPLATE),
            HumanMessagePromptTemplate.fromTemplate("{question}"),
        ];
        const docs = await vectorstore.similaritySearch(messages.content, 1);
        const prompt = ChatPromptTemplate.fromMessages(templateMessages);

        const chain = RunnableSequence.from([
            {
                // Extract the "question" field from the input object and pass it to the retriever as a string
                sourceDocuments: RunnableSequence.from([
                    (input) => input.question,
                    vectorStoreRetriever,
                ]),
                question: (input) => input.question,
            },
            {
                // Pass the source documents through unchanged so that we can return them directly in the final result
                sourceDocuments: (previousStepResult) => previousStepResult.sourceDocuments,
                question: (previousStepResult) => previousStepResult.question,
                context: (previousStepResult) =>
                    formatDocumentsAsString(previousStepResult.sourceDocuments),
            },
            {
                result: prompt.pipe(model).pipe(new StringOutputParser()),
                sourceDocuments: (previousStepResult) => previousStepResult.sourceDocuments,
            },
        ]);

        const response = await chain.invoke({
            question: messages.content,
            input_documents: docs
        })

        console.log(response)
        return new NextResponse(response.result, {status: 200})

It's now responding with:

 TypeError: Cannot read properties of undefined (reading 'replace')
    at OpenAIEmbeddings.embedQuery (webpack-internal:///(rsc)/./node_modules/.pnpm/@langchain+openai@0.0.11/node_modules/@langchain/openai/dist/embeddings.js:183:46)
    at FaissStore.similaritySearch (webpack-internal:///(rsc)/./node_modules/.pnpm/@langchain+core@0.1.13/node_modules/@langchain/core/dist/vectorstores.js:117:90)
    at POST (webpack-internal:///(rsc)/./app/api/chat/route.ts:112:40)
    at async /home/simbaclaws/Projects/Personal/vero-gpt/node_modules/.pnpm/next@14.0.4_react-dom@18.2.0_react@18.2.0/node_modules/next/dist/compiled/next-server/app-route.runtime.dev.js:6:63251

Am I using the similaritysearch wrong?

I'll check the docs if I'm missing another package somewhere...

@ewfian
Copy link
Contributor

ewfian commented Jan 16, 2024

@Simbaclaws It seems that loadFromPython has now passed. Based on the error "OpenAIEmbeddings.embedQuery," after a quick review of the code, I suspect that the replace below may be causing a Null Reference Exception (NRE).

image

Please confirm the content of messages.content.

const docs = await vectorstore.similaritySearch(messages.content, 1);

@Simbaclaws
Copy link
Author

Simbaclaws commented Jan 16, 2024

Awesome! I was indeed messing up the messages content.

It's working as intended...

I have a last question that I want to ask:

In python there is a function called:

load_qa_with_sources_chain()

This is a function that loads a question and answer, and returns the answer + a source to the url it got the information from. I think the url is provided in the documents...

I'm trying to accomplish the same thing by doing this part:

const chain = RunnableSequence.from([
            {
                // Extract the "question" field from the input object and pass it to the retriever as a string
                sourceDocuments: RunnableSequence.from([
                    (input) => input.question,
                    vectorStoreRetriever,
                ]),
                question: (input) => input.question,
            },
            {
                // Pass the source documents through unchanged so that we can return them directly in the final result
                sourceDocuments: (previousStepResult) => previousStepResult.sourceDocuments,
                question: (previousStepResult) => previousStepResult.question,
                context: (previousStepResult) =>
                    formatDocumentsAsString(previousStepResult.sourceDocuments),
            },
            {
                result: prompt.pipe(model).pipe(new StringOutputParser()),
                sourceDocuments: (previousStepResult) => previousStepResult.sourceDocuments,
            },
        ]);

But instead of returning just the source url in the answer, it is giving me all of the documents it has searched and not give me back a url to where it got the answer from...

Do you perhaps know of a way to put the url from the source documents into the response?

It also seems that my input documents aren't working... For some reason it's not using the data I provided, just the last document is being used..

ewfian added a commit to ewfian/langchainjs that referenced this issue Jan 16, 2024

Verified

This commit was signed with the committer’s verified signature. The key has expired.
ewfian Fan
@ewfian
Copy link
Contributor

ewfian commented Jan 16, 2024

Awesome! I was indeed messing up the messages content.

It's working as intended...

I have a last question that I want to ask:

In python there is a function called:

load_qa_with_sources_chain()

This is a function that loads a question and answer, and returns the answer + a source to the url it got the information from. I think the url is provided in the documents...

I'm trying to accomplish the same thing by doing this part:

const chain = RunnableSequence.from([
            {
                // Extract the "question" field from the input object and pass it to the retriever as a string
                sourceDocuments: RunnableSequence.from([
                    (input) => input.question,
                    vectorStoreRetriever,
                ]),
                question: (input) => input.question,
            },
            {
                // Pass the source documents through unchanged so that we can return them directly in the final result
                sourceDocuments: (previousStepResult) => previousStepResult.sourceDocuments,
                question: (previousStepResult) => previousStepResult.question,
                context: (previousStepResult) =>
                    formatDocumentsAsString(previousStepResult.sourceDocuments),
            },
            {
                result: prompt.pipe(model).pipe(new StringOutputParser()),
                sourceDocuments: (previousStepResult) => previousStepResult.sourceDocuments,
            },
        ]);

But instead of returning just the source url in the answer, it is giving me all of the documents it has searched and not give me back a url to where it got the answer from...

Do you perhaps know of a way to put the url from the source documents into the response?

It also seems that my input documents aren't working... For some reason it's not using the data I provided, just the last document is being used..

@Simbaclaws Sorry, I'm not familiar with this question. perhaps you can ask @jacoblee93 for help or create a new discussion.
image

@Simbaclaws
Copy link
Author

Simbaclaws commented Jan 16, 2024

Sorry, I'm not familiar with this question. perhaps you can ask @jacoblee93 for help or create a new discussions. image

I'll do that, thank you for everything so far! I'm really happy with the progress that was made.

EDIT: I created a discussion here: #4037

@Simbaclaws
Copy link
Author

When your PR has been merged (for the actual fix), I'll close this github issue as solved.

@Simbaclaws
Copy link
Author

Simbaclaws commented Jan 16, 2024

I've figured out the source code for getting my load qa chains with sources to work.

jacoblee93 pushed a commit that referenced this issue Jan 17, 2024

Verified

This commit was created on GitHub.com and signed with GitHub’s verified signature.
* fix #4027

* update fixture

* update int test
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
auto:bug Related to a bug, vulnerability, unexpected error with an existing feature
Projects
None yet
Development

Successfully merging a pull request may close this issue.

3 participants