MultiRetrievalQAChain requires ChatModel... but should it?

### System Info

![Screen Shot 2023-05-29 at 9 33 50 AM](https://github.com/hwchase17/langchain/assets/36281899/25d386c4-1769-486c-a664-baf235068b97)
![Screen Shot 2023-05-29 at 9 33 25 AM](https://github.com/hwchase17/langchain/assets/36281899/1750f2be-a049-4b7b-a555-0505ecfcfb51)
![Screen Shot 2023-05-29 at 9 33 00 AM](https://github.com/hwchase17/langchain/assets/36281899/ede64632-7098-4c87-aeca-43463cc2a40a)

python 3.10. Langchain 0.0.184


Seems that MultiRetrievalQAChain is requiring a chat model to run, but feels like this shouldn't be required. Other QA pipelines don't require a chat model, and I don't see why they should. I'm guessing this is just a symptom of some parts of the system being upgraded to use chatmodels, since OpenAI is used for a lot of little things under the hood with langchain, like deciding which vectorDB to use based on the retriever_infos dict. However, if you are trying to use another LLM aside from openAI, you cannot use MultiRetrievalQA.

Further, I've run into some issues with this sort of thing across otherQA pipelines when using huggingface LLMs. Generally, better support for huggingface is important to me, and I think would be important to many others in the near future as the  open source model ecosystem continues to grow.

### Who can help?

_No response_

### Information

- [ ] The official example notebooks/scripts
- [ ] My own modified scripts

### Related Components

- [X] LLMs/Chat Models
- [X] Embedding Models
- [ ] Prompts / Prompt Templates / Prompt Selectors
- [ ] Output Parsers
- [ ] Document Loaders
- [X] Vector Stores / Retrievers
- [ ] Memory
- [ ] Agents / Agent Executors
- [ ] Tools / Toolkits
- [ ] Chains
- [ ] Callbacks/Tracing
- [ ] Async

### Reproduction

import langchain
from langchain.llms import HuggingFacePipeline, HuggingFaceHub
from langchain.embeddings import HuggingFaceEmbeddings
from langchain.schema import Document
from langchain.document_loaders import DirectoryLoader, TextLoader
from langchain.indexes import VectorstoreIndexCreator
from langchain.vectorstores import Chroma
from langchain.text_splitter import CharacterTextSplitter
from langchain.chains import RetrievalQA
from langchain.chains.router import MultiRetrievalQAChain
from transformers import pipeline, AutoTokenizer, AutoModelForCausalLM, GPTJForCausalLM, AutoModelForQuestionAnswering, GPTJForQuestionAnswering
from abc import ABC, abstractmethod
from typing import List, Dict, Optional
import os
import requests
import shutil


#device object
device = torch.device('cuda') if torch.cuda.is_available() else torch.device('cpu')

# hf embeddings model
embeddings = HuggingFaceEmbeddings(model_name="sentence-transformers/all-mpnet-base-v2")

# Cerebras GPT2.7B
model = AutoModelForCausalLM.from_pretrained(
    "cerebras/Cerebras-GPT-2.7B",
    torch_dtype=torch.float16,
).to(device)

tokenizer = AutoTokenizer.from_pretrained("cerebras/Cerebras-GPT-2.7B")

# hf pipeline
gen_pipe = pipeline(
    "text-generation",
    model=model,
    tokenizer=tokenizer,
    max_new_tokens=200, 
    early_stopping=True, 
    no_repeat_ngram_size=2,
    device=0
)

# define llm
gen_llm = HuggingFacePipeline(pipeline=gen_pipe)

# load documents and create retrievers
docs1 = TextLoader('docs/dir1/mydoc1.txt').load_and_split()
retreiver1 = Chroma.from_documents(docs1, embeddings).as_retriever()

docs2 = TextLoader('docs/dir2/mydoc2.txt').load_and_split()
retriever2 = Chroma.from_documents(docs2, embeddings).as_retriever()

retriever_infos = [
    {
        "name": "space-knowledge",
        "description": "Good for answering general questions about outer space.",
        "retriever": retriever1
    },
    {
        "name": "earth-knowledge",
        "description": "Good for answer questions about planet earth",
        "retriever": retriever2
    }
]

chain = MultiRetrievalQAChain.from_retrievers(llm=gen_llm, retriever_infos=retriever_infos, verbose=True)


### Expected behavior

I expect this to work the same way it does when using an openAI model. i.e., the model chooses the vectorDB to use based on the question, searches, and returns a response.