deepaksarika01's picture
Upload 5 files
7cf68b3
raw
history blame
3.83 kB
from langchain.llms import HuggingFacePipeline
from langchain.embeddings import HuggingFaceInstructEmbeddings
from langchain.chains import RetrievalQA
from transformers import (
AutoTokenizer,
AutoModelForSeq2SeqLM,
pipeline,
GenerationConfig
)
class lamini:
def __init__(self):
pass
def load_model(self, task="text2text-generation", **kwargs) -> HuggingFacePipeline:
"""Returns a pipeline for the model
- model: MBZUAI/LaMini-Flan-T5-248M
Returns:
_type_: _description_
"""
model_id = "MBZUAI/LaMini-Flan-T5-248M"
tokenizer = AutoTokenizer.from_pretrained(model_id)
model = AutoModelForSeq2SeqLM.from_pretrained(model_id)
gen_config = GenerationConfig.from_pretrained(model_id)
max_length = kwargs.get("max_length", 512)
temperature = kwargs.get("temperature", 0)
top_p = kwargs.get("top_p", 0.95)
repetition_penalty = kwargs.get("repetition_penalty", 1.15)
pipe = pipeline(
"text2text-generation",
model=model,
tokenizer=tokenizer,
generation_config=gen_config,
max_length=max_length,
top_p=top_p,
temperature=temperature,
repetition_penalty=repetition_penalty,
)
llm = HuggingFacePipeline(pipeline=pipe)
return llm
class templates:
def __init__(self, llm: HuggingFacePipeline):
self.llm = llm
def summarize(self, text, **kwargs):
"""Summarize text
Args:
text (str): text to summarize
Returns:
str: summarized text
"""
instruction = "summarize for better understanding: "
text = instruction + text
return self.llm(text, **kwargs)
def generate_tile(self, text, **kwargs):
"""Generate a title for text
Args:
text (str): text to generate title for
Returns:
str: title
"""
instruction = "generate a title for this text: "
text = instruction + text
return self.llm(text, **kwargs)
class qa_template:
def __init__(self, llm):
from langchain.chains.retrieval_qa.base import BaseRetrievalQA
self.llm = llm
self.qa_inf: BaseRetrievalQA
def load(self, knowledge_base):
"""Load knowledge base
Args:
knowledge_base (str): knowledge base to load
Returns:
BaseRetrievalQA: (optional to use) returns QA interface
"""
from utils import LangChainChunker
from langchain.vectorstores import Chroma
from langchain.chains import RetrievalQA
embeds = HuggingFaceInstructEmbeddings(model_name="hkunlp/instructor-large")
chunker = LangChainChunker(knowledge_base)
chunks = chunker.chunker(size=512)
db = Chroma.from_texts(chunks, embeds)
retriever = db.as_retriever()
qa_inf = RetrievalQA.from_chain_type(
llm=self.llm, chain_type="stuff", retriever=retriever
)
self.qa_inf = qa_inf
return qa_inf
def start_gradio(self, title: str):
"""Start gradio interface
Returns:
_type_: _description_
"""
import gradio as gr
def interface(msg, history):
res = self.qa_inf.run(msg)
return str(res)
ui = gr.ChatInterface(
fn=interface,
examples=["What is the video about?", "key points of the video"],
title=f"Question Mode - {title}",
)
ui.launch()