Bump version to 0.1.42 refactor BaseLLM

pull/7/head
Saryev Rustam 12 months ago
parent 136c09c971
commit 01aef1c449

16
poetry.lock generated

@ -1013,21 +1013,21 @@ tenacity = ">=8.1.0,<9.0.0"
[[package]]
name = "llama-cpp-python"
version = "0.1.67"
version = "0.1.68"
description = "A Python wrapper for llama.cpp"
optional = false
python-versions = ">=3.7"
files = [
{file = "llama_cpp_python-0.1.67.tar.gz", hash = "sha256:33bdcd42b30df3c21d56ce094132e1cdc0da0f8a27109f8eaf698addad02fd20"},
{file = "llama_cpp_python-0.1.68.tar.gz", hash = "sha256:619ca317d771fc0c30ceba68c29c318287cd1cae2eaa14661aec675190295f19"},
]
[package.dependencies]
diskcache = ">=5.6.1,<6.0.0"
numpy = ">=1.24.4,<2.0.0"
typing-extensions = ">=4.6.3,<5.0.0"
typing-extensions = ">=4.7.1,<5.0.0"
[package.extras]
server = ["fastapi (>=0.98.0,<0.99.0)", "sse-starlette (>=1.6.1,<2.0.0)", "uvicorn (>=0.22.0,<0.23.0)"]
server = ["fastapi (>=0.99.1,<0.100.0)", "sse-starlette (>=1.6.1,<2.0.0)", "uvicorn (>=0.22.0,<0.23.0)"]
[[package]]
name = "log-symbols"
@ -2751,13 +2751,13 @@ vision = ["Pillow"]
[[package]]
name = "typing-extensions"
version = "4.6.3"
version = "4.7.1"
description = "Backported and Experimental Type Hints for Python 3.7+"
optional = false
python-versions = ">=3.7"
files = [
{file = "typing_extensions-4.6.3-py3-none-any.whl", hash = "sha256:88a4153d8505aabbb4e13aacb7c486c2b4a33ca3b3f807914a9b4c844c471c26"},
{file = "typing_extensions-4.6.3.tar.gz", hash = "sha256:d91d5919357fe7f681a9f2b5b4cb2a5f1ef0a1e9f59c4d8ff0d3491e05c0ffd5"},
{file = "typing_extensions-4.7.1-py3-none-any.whl", hash = "sha256:440d5dd3af93b060174bf433bccd69b0babc3b15b1a8dca43789fd7f61514b36"},
{file = "typing_extensions-4.7.1.tar.gz", hash = "sha256:b75ddc264f0ba5615db7ba217daeb99701ad295353c45f9e95963337ceeeffb2"},
]
[[package]]
@ -3036,4 +3036,4 @@ testing = ["big-O", "flake8 (<5)", "jaraco.functools", "jaraco.itertools", "more
[metadata]
lock-version = "2.0"
python-versions = ">=3.8.1,<4.0"
content-hash = "746d76164cdfcacca19ad7d311ac16f6cf444918cb5cb79d2dcb4e3a8cf4ff63"
content-hash = "5f25c676904a5e553326d05032e4a9625b67418ea49ae78714789a71252a5aa9"

@ -1,6 +1,6 @@
[tool.poetry]
name = "talk-codebase"
version = "0.1.41"
version = "0.1.42"
description = "talk-codebase is a powerful tool for querying and analyzing codebases."
authors = ["Saryev Rustam <rustam1997@gmail.com>"]
readme = "README.md"
@ -21,8 +21,7 @@ sentence-transformers = "^2.2.2"
unstructured = "^0.6.10"
gpt4all = "^1.0.1"
langchain = "^0.0.223"
llama-cpp-python = "^0.1.67"
llama-cpp-python = "0.1.68"
[tool.poetry.group.dev.dependencies]
setuptools = "^68.0.0"

@ -27,6 +27,7 @@ DEFAULT_CONFIG = {
"openai_model_name": DEFAULT_OPENAI_MODEL,
"local_model_name": DEFAULT_LOCAL_MODEL,
"model_path": DEFAULT_MODEL_DIRECTORY,
"n_batch": "8",
}
LOADER_MAPPING = {

@ -5,12 +5,11 @@ import gpt4all
import questionary
from halo import Halo
from langchain import FAISS
from langchain import PromptTemplate, LLMChain
from langchain.callbacks.manager import CallbackManager
from langchain.chains import RetrievalQA
from langchain.chat_models import ChatOpenAI
from langchain.embeddings import HuggingFaceEmbeddings, OpenAIEmbeddings
from langchain.llms import LlamaCpp
from langchain.schema import HumanMessage, SystemMessage
from langchain.text_splitter import RecursiveCharacterTextSplitter
from talk_codebase.consts import MODEL_TYPES
@ -35,10 +34,11 @@ class BaseLLM:
return self.vector_store.search(query, k=k, search_type="similarity")
def _create_vector_store(self, embeddings, index, root_dir):
k = int(self.config.get("k"))
index_path = os.path.join(root_dir, f"vector_store/{index}")
new_db = get_local_vector_store(embeddings, index_path)
if new_db is not None:
return new_db
return new_db.as_retriever(search_kwargs={"k": k})
docs = load_files(root_dir)
if len(docs) == 0:
@ -64,7 +64,19 @@ class BaseLLM:
db.add_documents(texts)
db.save_local(index_path)
spinners.succeed(f"Created vector store")
return db
return db.as_retriever(search_kwargs={"k": k})
def send_query(self, query):
retriever = self._create_store(self.root_dir)
qa = RetrievalQA.from_chain_type(
llm=self.llm,
chain_type="stuff",
retriever=retriever,
return_source_documents=True
)
docs = qa(query)
file_paths = [os.path.abspath(s.metadata["source"]) for s in docs['source_documents']]
print('\n'.join([f'📄 {file_path}:' for file_path in file_paths]))
class LocalLLM(BaseLLM):
@ -77,37 +89,13 @@ class LocalLLM(BaseLLM):
os.makedirs(self.config.get("model_path"), exist_ok=True)
gpt4all.GPT4All.retrieve_model(model_name=self.config.get("local_model_name"),
model_path=self.config.get("model_path"))
llm = LlamaCpp(
model_path=os.path.join(self.config.get("model_path"), self.config.get("local_model_name")),
n_ctx=int(self.config.get("max_tokens")),
callback_manager=CallbackManager([StreamStdOut()]),
temp=float(self.config.get("temperature")),
streaming=True,
allow_download=True)
model_path = os.path.join(self.config.get("model_path"), self.config.get("local_model_name"))
model_n_ctx = int(self.config.get("max_tokens"))
model_n_batch = int(self.config.get("n_batch"))
callbacks = CallbackManager([StreamStdOut()])
llm = LlamaCpp(model_path=model_path, n_ctx=model_n_ctx, n_batch=model_n_batch, callbacks=callbacks, verbose=False)
return llm
def send_query(self, query):
k = self.config.get("k")
docs = self.embedding_search(query, k=int(k))
content = "\n".join([f"content: \n```{s.page_content}```" for s in docs])
template = """
### System:
Given the following content, your task is to answer the question. {content}
### User:
{question}
### Response:
"""
prompt = PromptTemplate(template=template, input_variables=["content", "question"]).partial(content=content)
llm_chain = LLMChain(prompt=prompt, llm=self.llm)
llm_chain.run(query)
file_paths = [os.path.abspath(s.metadata["source"]) for s in docs]
print('\n'.join([f'📄 {file_path}:' for file_path in file_paths]))
class OpenAILLM(BaseLLM):
def _create_store(self, root_dir: str) -> Optional[FAISS]:
@ -122,23 +110,6 @@ class OpenAILLM(BaseLLM):
callback_manager=CallbackManager([StreamStdOut()]),
temperature=float(self.config.get("temperature")))
def send_query(self, query):
k = self.config.get("k")
docs = self.embedding_search(query, k=int(k))
content = "\n".join([f"content: \n```{s.page_content}```" for s in docs])
prompt = f"Given the following content, your task is to answer the question. \n{content}"
messages = [
SystemMessage(content=prompt),
HumanMessage(content=query),
]
self.llm(messages)
file_paths = [os.path.abspath(s.metadata["source"]) for s in docs]
print('\n'.join([f'📄 {file_path}:' for file_path in file_paths]))
def factory_llm(root_dir, config):
if config.get("model_type") == "openai":

Loading…
Cancel
Save