Spaces:
Running
Running
File size: 5,326 Bytes
3fde113 9aab6a2 030bcf4 9aab6a2 4083e28 9aab6a2 3fde113 4083e28 3fde113 57d1004 3fde113 57d1004 3fde113 9aab6a2 82f5dd5 9aab6a2 ed4a174 57d1004 ed4a174 9aab6a2 0cece18 9aab6a2 c630f6a 76e8490 4083e28 f87fc7c 4083e28 f87fc7c 4083e28 f87fc7c 4083e28 3bf57af 9aab6a2 4083e28 9aab6a2 4083e28 f87fc7c 4083e28 de3ab4f 9aab6a2 de3ab4f 6392ddf de3ab4f 3fde113 9aab6a2 f87fc7c 9aab6a2 4083e28 9aab6a2 76e8490 9aab6a2 76e8490 4083e28 9aab6a2 f87fc7c 4083e28 14138ac 4083e28 f41a82a 33a475f f41a82a 3fde113 f41a82a 3fde113 f41a82a |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 |
import gradio as gr
from transformers import pipeline, AutoModelForCausalLM, AutoTokenizer
import torch
import os
import sys
sys.path.append('../..')
#langchain
from langchain.text_splitter import RecursiveCharacterTextSplitter, CharacterTextSplitter
from langchain.embeddings import HuggingFaceEmbeddings
from langchain.prompts import PromptTemplate
from langchain.chains import RetrievalQA
from langchain.prompts import ChatPromptTemplate
from langchain.schema import StrOutputParser
from langchain.schema.runnable import Runnable
from langchain.schema.runnable.config import RunnableConfig
from langchain.chains import (
LLMChain, ConversationalRetrievalChain)
from langchain.vectorstores import Chroma
from langchain.memory import ConversationBufferMemory
from langchain.chains import LLMChain
from langchain.prompts.prompt import PromptTemplate
from langchain.prompts.chat import ChatPromptTemplate, SystemMessagePromptTemplate
from langchain.prompts import SystemMessagePromptTemplate, HumanMessagePromptTemplate, ChatPromptTemplate, MessagesPlaceholder
from langchain.document_loaders import PyPDFDirectoryLoader
from pydantic import BaseModel, Field
from langchain.output_parsers import PydanticOutputParser
from langchain_community.llms import HuggingFaceHub
from pydantic import BaseModel
import shutil
# Cell 1: Image Classification Model
image_pipeline = pipeline(task="image-classification", model="microsoft/resnet-50")
def predict_image(input_img):
predictions = image_pipeline(input_img)
return input_img, {p["label"]: p["score"] for p in predictions}
image_gradio_app = gr.Interface(
fn=predict_image,
inputs=gr.Image(label="Select waste candidate", sources=['upload', 'webcam'], type="pil"),
outputs=[gr.Image(label="Processed Image"), gr.Label(label="Result", num_top_classes=2)],
title="What kind of waste do you have?",
)
# Cell 2: Chatbot Model
loader = PyPDFDirectoryLoader('pdfs')
data=loader.load()
# split documents
text_splitter = RecursiveCharacterTextSplitter(
chunk_size=500,
chunk_overlap=70,
length_function=len
)
docs = text_splitter.split_documents(data)
# define embedding
embeddings = HuggingFaceEmbeddings(model_name='thenlper/gte-small')
# create vector database from data
persist_directory = 'docs/chroma/'
# Remove old database files if any
shutil.rmtree(persist_directory, ignore_errors=True)
vectordb = Chroma.from_documents(
documents=docs,
embedding=embeddings,
persist_directory=persist_directory
)
# define retriever
retriever = vectordb.as_retriever(search_kwargs={"k": 1}, search_type="mmr")
class FinalAnswer(BaseModel):
question: str = Field(description="the original question")
answer: str = Field(description="the extracted answer")
# Assuming you have a parser for the FinalAnswer class
parser = PydanticOutputParser(pydantic_object=FinalAnswer)
template = """
Your name is AngryGreta and you are a recycling chatbot with the objective to anwer questions from user in English or Spanish /
Use the following pieces of context to answer the question /
Answer in the same language of the question /
Context: {context}
Chat history: {chat_history}
User: {question}
{format_instructions}
"""
# Create the chat prompt templates
sys_prompt = SystemMessagePromptTemplate.from_template(template)
qa_prompt = ChatPromptTemplate(
messages=[
sys_prompt,
MessagesPlaceholder(variable_name="chat_history"),
HumanMessagePromptTemplate.from_template("{question}")],
partial_variables={"format_instructions": parser.get_format_instructions()}
)
llm = HuggingFaceHub(
repo_id="mistralai/Mixtral-8x7B-Instruct-v0.1",
task="text-generation",
model_kwargs={
"max_new_tokens": 1024,
"top_k": 30,
"temperature": 0.1,
"repetition_penalty": 1.03,
},
)
memory = ConversationBufferMemory(llm=llm, memory_key="chat_history", input_key='question', output_key='output', return_messages=True)
qa_chain = ConversationalRetrievalChain.from_llm(
llm = llm,
condense_question_prompt = qa_prompt,
memory = memory,
retriever = retriever,
verbose = True,
combine_docs_chain_kwargs={'prompt': qa_prompt},
get_chat_history = lambda h : h,
rephrase_question = True,
output_key = 'output',
)
def chat_interface(question,history):
result = qa_chain.invoke({'question': question})
output_string = result['output']
# Find the index of the last occurrence of "answer": in the string
answer_index = output_string.rfind('"answer":')
# Extract the substring starting from the "answer": index
answer_part = output_string[answer_index + len('"answer":'):].strip()
# Find the next occurrence of a double quote to get the start of the answer value
quote_index = answer_part.find('"')
# Extract the answer value between double quotes
answer_value = answer_part[quote_index + 1:answer_part.find('"', quote_index + 1)]
return answer_value
chatbot_gradio_app = gr.ChatInterface(
fn=chat_interface,
title='Our doubts are traitors, And make us lose the good we oft might win, By fearing to attempt.'
)
# Combine both interfaces into a single app
app=gr.TabbedInterface(
[image_gradio_app, chatbot_gradio_app],
tab_names=["image","chatbot"]
)
app.queue()
app.launch() |