feat: Add person bot (#182)
This commit introduces a new bot type called Person. It behaves and speaks like a particular Person. For this two app types: PersonApp and PersonOpenSourceApp
This commit is contained in:
@@ -1 +1 @@
|
||||
from .embedchain import App, OpenSourceApp
|
||||
from .embedchain import App, OpenSourceApp, PersonApp, PersonOpenSourceApp
|
||||
@@ -2,17 +2,18 @@ from embedchain.config.BaseConfig import BaseConfig
|
||||
from string import Template
|
||||
import re
|
||||
|
||||
|
||||
DEFAULT_PROMPT_TEMPLATE = Template("""
|
||||
DEFAULT_PROMPT = """
|
||||
Use the following pieces of context to answer the query at the end.
|
||||
If you don't know the answer, just say that you don't know, don't try to make up an answer.
|
||||
|
||||
$context
|
||||
|
||||
|
||||
Query: $query
|
||||
|
||||
|
||||
Helpful Answer:
|
||||
""")
|
||||
"""
|
||||
|
||||
DEFAULT_PROMPT_TEMPLATE = Template(DEFAULT_PROMPT)
|
||||
query_re = re.compile(r"\$\{*query\}*")
|
||||
context_re = re.compile(r"\$\{*context\}*")
|
||||
|
||||
|
||||
@@ -8,6 +8,7 @@ from langchain.docstore.document import Document
|
||||
from langchain.embeddings.openai import OpenAIEmbeddings
|
||||
from langchain.memory import ConversationBufferMemory
|
||||
from embedchain.config import InitConfig, AddConfig, QueryConfig, ChatConfig
|
||||
from embedchain.config.QueryConfig import DEFAULT_PROMPT
|
||||
|
||||
from embedchain.loaders.youtube_video import YoutubeVideoLoader
|
||||
from embedchain.loaders.pdf_file import PdfFileLoader
|
||||
@@ -42,7 +43,7 @@ class EmbedChain:
|
||||
|
||||
:param config: InitConfig instance to load as configuration.
|
||||
"""
|
||||
|
||||
|
||||
self.config = config
|
||||
self.db_client = self.config.db.client
|
||||
self.collection = self.config.db.collection
|
||||
@@ -388,3 +389,58 @@ class OpenSourceApp(EmbedChain):
|
||||
prompt=prompt,
|
||||
)
|
||||
return response
|
||||
|
||||
|
||||
class EmbedChainPersonApp:
|
||||
"""
|
||||
Base class to create a person bot.
|
||||
This bot behaves and speaks like a person.
|
||||
|
||||
:param person: name of the person, better if its a well known person.
|
||||
:param config: InitConfig instance to load as configuration.
|
||||
"""
|
||||
def __init__(self, person, config: InitConfig = None):
|
||||
self.person = person
|
||||
self.person_prompt = f"You are {person}. Whatever you say, you will always say in {person} style."
|
||||
self.template = Template(
|
||||
self.person_prompt + " " + DEFAULT_PROMPT
|
||||
)
|
||||
if config is None:
|
||||
config = InitConfig()
|
||||
super().__init__(config)
|
||||
|
||||
|
||||
class PersonApp(EmbedChainPersonApp, App):
|
||||
"""
|
||||
The Person app.
|
||||
Extends functionality from EmbedChainPersonApp and App
|
||||
"""
|
||||
def query(self, input_query, config: QueryConfig = None):
|
||||
query_config = QueryConfig(
|
||||
template=self.template,
|
||||
)
|
||||
return super().query(input_query, query_config)
|
||||
|
||||
def chat(self, input_query, config: ChatConfig = None):
|
||||
chat_config = ChatConfig(
|
||||
template = self.template,
|
||||
)
|
||||
return super().chat(input_query, chat_config)
|
||||
|
||||
|
||||
class PersonOpenSourceApp(EmbedChainPersonApp, OpenSourceApp):
|
||||
"""
|
||||
The Person app.
|
||||
Extends functionality from EmbedChainPersonApp and OpenSourceApp
|
||||
"""
|
||||
def query(self, input_query, config: QueryConfig = None):
|
||||
query_config = QueryConfig(
|
||||
template=self.template,
|
||||
)
|
||||
return super().query(input_query, query_config)
|
||||
|
||||
def chat(self, input_query, config: ChatConfig = None):
|
||||
chat_config = ChatConfig(
|
||||
template = self.template,
|
||||
)
|
||||
return super().chat(input_query, chat_config)
|
||||
Reference in New Issue
Block a user