diff --git a/docs/examples/poe_bot.mdx b/docs/examples/poe_bot.mdx index e8cb830a..66137a6f 100644 --- a/docs/examples/poe_bot.mdx +++ b/docs/examples/poe_bot.mdx @@ -7,42 +7,43 @@ title: '🔮 Poe Bot' 1. Install embedchain python package: ```bash -pip install embedchain[poe] +pip install "embedchain[poe]" ``` 2. Create a free account on [Poe](https://www.poe.com?utm_source=embedchain). -3. Click "Create Bot" button on top left +3. Click "Create Bot" button on top left. 4. Give it a handle and an optional description. 5. Select `Use API`. 6. Under `API URL` enter your server or ngrok address. You can use your machine's public IP or DNS. Otherwise, employ a proxy server like [ngrok](https://ngrok.com/) to make your local bot accessible. 7. Copy your api key and paste it in `.env` as `POE_API_KEY`. -8. Start the bot. +8. Now create your bot using the following code snippet ```bash -python -m embedchain.bots.poe +from embedchain import PoeBot + +poe_bot = PoeBot() + +# add as many data sources as you want +poe_bot.add("https://en.wikipedia.org/wiki/Adam_D%27Angelo") +poe_bot.add("https://www.youtube.com/watch?v=pJQVAqmKua8") + +# start the bot +# this start the poe bot server on port 8080 by default +poe_bot.start() ``` -If you want to run the bot on another port, you can pass `--port option` like +9. You can refer the [Supported Data formats](https://docs.embedchain.ai/advanced/data_types) section to refer the supported data types in embedchain. -```bash -python -m embedchain.bots.poe --port 5000 -``` - -9. Click `Run check` to make sure your machine can be reached. -10. Make sure your bot is private if that's what you want. -11. Click `Create bot` at the bottom to finally create the bot -12. Now you bot is created. +10. Click `Run check` to make sure your machine can be reached. +11. Make sure your bot is private if that's what you want. +12. Click `Create bot` at the bottom to finally create the bot +13. Now you bot is created. ### 💬 How to use -- To include data sources, use this command: -```text -/add -``` - -- You can refer the [Supported Data formats](https://docs.embedchain.ai/advanced/data_types) section to refer the supported data types in embedchain. - -- To ask the bot questions, just type your query: +- To ask the bot questions, just type your query in the Poe interface: ```text ``` + +- If you wish to add more data source to the bot, simply update your script and add as many `.add` as you like. You need to restart the server. diff --git a/embedchain/bots/__init__.py b/embedchain/bots/__init__.py index e69de29b..b7f4d5a0 100644 --- a/embedchain/bots/__init__.py +++ b/embedchain/bots/__init__.py @@ -0,0 +1,4 @@ +from embedchain.bots.poe import PoeBot +from embedchain.bots.whatsapp import WhatsAppBot +# TODO: fix discord import +# from embedchain.bots.discord import DiscordBot \ No newline at end of file diff --git a/embedchain/bots/poe.py b/embedchain/bots/poe.py index 69b5b914..99bb5321 100644 --- a/embedchain/bots/poe.py +++ b/embedchain/bots/poe.py @@ -11,8 +11,27 @@ from embedchain.helper_classes.json_serializable import register_deserializable from .base import BaseBot +def start_command(): + parser = argparse.ArgumentParser(description="EmbedChain PoeBot command line interface") + # parser.add_argument("--host", default="0.0.0.0", help="Host IP to bind") + parser.add_argument("--port", default=8080, type=int, help="Port to bind") + parser.add_argument("--api-key", type=str, help="Poe API key") + # parser.add_argument( + # "--history-length", + # default=5, + # type=int, + # help="Set the max size of the chat history. Multiplies cost, but improves conversation awareness.", + # ) + args = parser.parse_args() + + # FIXME: Arguments are automatically loaded by Poebot's ArgumentParser which causes it to fail. + # the port argument here is also just for show, it actually works because poe has the same argument. + + run(PoeBot(), api_key=args.api_key or os.environ.get("POE_API_KEY")) + + @register_deserializable -class EcPoeBot(BaseBot, PoeBot): +class PoeBot(BaseBot, PoeBot): def __init__(self): self.history_length = 5 super().__init__() @@ -38,15 +57,15 @@ class EcPoeBot(BaseBot, PoeBot): response = self.ask_bot(message, history) return response - def add_data(self, message): - data = message.split(" ")[-1] - try: - self.add(data) - response = f"Added data from: {data}" - except Exception: - logging.exception(f"Failed to add data {data}.") - response = "Some error occurred while adding data." - return response + # def add_data(self, message): + # data = message.split(" ")[-1] + # try: + # self.add(data) + # response = f"Added data from: {data}" + # except Exception: + # logging.exception(f"Failed to add data {data}.") + # response = "Some error occurred while adding data." + # return response def ask_bot(self, message, history: List[str]): try: @@ -57,24 +76,8 @@ class EcPoeBot(BaseBot, PoeBot): response = "An error occurred. Please try again!" return response - -def start_command(): - parser = argparse.ArgumentParser(description="EmbedChain PoeBot command line interface") - # parser.add_argument("--host", default="0.0.0.0", help="Host IP to bind") - parser.add_argument("--port", default=8080, type=int, help="Port to bind") - parser.add_argument("--api-key", type=str, help="Poe API key") - # parser.add_argument( - # "--history-length", - # default=5, - # type=int, - # help="Set the max size of the chat history. Multiplies cost, but improves conversation awareness.", - # ) - args = parser.parse_args() - - # FIXME: Arguments are automatically loaded by Poebot's ArgumentParser which causes it to fail. - # the port argument here is also just for show, it actually works because poe has the same argument. - - run(EcPoeBot(), api_key=args.api_key or os.environ.get("POE_API_KEY")) + def start(self): + start_command() if __name__ == "__main__": diff --git a/embedchain/bots/whatsapp.py b/embedchain/bots/whatsapp.py index 2d241183..cd9d1eaf 100644 --- a/embedchain/bots/whatsapp.py +++ b/embedchain/bots/whatsapp.py @@ -3,9 +3,6 @@ import logging import signal import sys -from flask import Flask, request -from twilio.twiml.messaging_response import MessagingResponse - from embedchain.helper_classes.json_serializable import register_deserializable from .base import BaseBot @@ -14,6 +11,8 @@ from .base import BaseBot @register_deserializable class WhatsAppBot(BaseBot): def __init__(self): + from flask import Flask, request + from twilio.twiml.messaging_response import MessagingResponse super().__init__() def handle_message(self, message):