https://github.com/NagariaHussain/doppio_bot
AI ChatBot Template, built into Frappe's admin/desk Interface
https://github.com/NagariaHussain/doppio_bot
chakra-ui frappe frappe-framework openai reactjs template
Last synced: 4 months ago
JSON representation
AI ChatBot Template, built into Frappe's admin/desk Interface
- Host: GitHub
- URL: https://github.com/NagariaHussain/doppio_bot
- Owner: NagariaHussain
- License: mit
- Created: 2023-04-09T07:34:47.000Z (about 2 years ago)
- Default Branch: main
- Last Pushed: 2023-06-21T07:42:58.000Z (almost 2 years ago)
- Last Synced: 2024-12-16T09:04:59.408Z (5 months ago)
- Topics: chakra-ui, frappe, frappe-framework, openai, reactjs, template
- Language: JavaScript
- Homepage: https://frappe.io/blog/engineering/introducing-doppiobot-template
- Size: 165 KB
- Stars: 55
- Watchers: 6
- Forks: 40
- Open Issues: 4
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
- awesome-frappe - Doppio Bot - AI ChatBot Template, built into Frappe's Desk Interface. (Uncategorized / Uncategorized)
README
# DoppioBot
Use. Play. Extend. ChatGPT experience, built right into Frappe's desk interface.
## Announcement Blog Post
You can read more on how DoppioBot is built, how to use it and how to extend it for your own applications in [this](https://frappe.io/blog/engineering/introducing-doppiobot-template) blog post.
## Tech Stack
- [Frappe Framework](https://frappeframework.com)
- Python & JavaScript
- MariaDB
- Redis
- [LangChain](https://python.langchain.com/en/latest/)
- [OpenAI API](https://openai.com/blog/openai-api)
- [ReactJS](https://reactjs.org)
- [ChakraUI](https://chakra-ui.com)## Installation & Usage
Just like any other Frappe app, if you have bench installed, you can execute the following commands to install the **DoppioBot** app on your Frappe site:
```bash
bench get-app NagariaHussain/doppio_bot
bench --site install-app doppio_bot
```Then add your OpenAI API key to the `site_config.json` (of the site you have installed the app on):
```json
"openai_api_key": "sk-your-secret-api-key"
```Then navigate to your site, use the awesome bar for **Ask DoppioBot**, and enjoy!
### Chat Interface

The Chat page is built using Frappe's Custom Pages feature, React, and ChakraUI.
## Features

- Session Chat history management with Redis
- Formatting of markdown responses including tables and lists
- Code block responses are syntax-highlighted and have a click to copy button!
- A sleek loading skeleton is shown while the message is being fetched
- The prompt can be submitted through mouse as well as keyboard (`Cmd + Enter`)### API

The API that powers the chat page is built using the LangChain Python package.
## Advanced Example: Agent with Custom Tool
Here is an example of an conversational agent that uses a custom tool that creates a ToDo document in the Frappe backend:
```python
from langchain import OpenAI
from langchain.agents import tool
from langchain.agents import AgentType
from langchain.memory import ConversationBufferMemory
from langchain.agents import initialize_agentllm = OpenAI(temperature=0)
memory = ConversationBufferMemory(memory_key="chat_history")
tools = [create_todo]agent_chain = initialize_agent(
tools,
llm,
agent=AgentType.CONVERSATIONAL_REACT_DESCRIPTION,
verbose=True,
memory=memory,
)# Will call the tool with proper JSON and voila, magic!
agent.run("I have to create a college report before May 17, 2023, can you set a task for me?")
```The tool that creates new `ToDo` documents in Frappe:
```python
@tool
def create_todo(todo: str) -> str:
"""
Create a new ToDo document, can be used when you need to store a note or todo or task for the user.
It takes a json string as input and requires at least the `description`. Returns "done" if the
todo was created and "failed" if the creation failed. Optionally it could contain a `date`
field (in the JSON) which is the due date or reminder date for the task or todo. The `date` must follow
the "YYYY-MM-DD" format. You don't need to add timezone to the date.
"""
try:
data = frappe.parse_json(todo)
todo = frappe.new_doc("ToDo")
todo.update(data)
todo.save()
return "done"
except Exception:
return "failed"
```Learn more about creating custom tools [here](https://python.langchain.com/en/latest/modules/agents/tools/custom_tools.html).
#### License
MIT