Chatbot / README1.md
yashAI007's picture
update README.md with claud
6b470db
---
title: Chatbot
emoji: ๐Ÿ’ป
colorFrom: yellow
colorTo: green
sdk: gradio
sdk_version: 6.6.0
app_file: app.py
pinned: false
short_description: Chatbot
---
Check out the configuration reference at https://huggingface.co/docs/hub/spaces-config-reference
# Multi-User Memory Chatbot with LangChain, Tools, and Gradio
A conversational AI chatbot built with **LangChain**, **Gradio**, and multiple custom tools.
This project supports:
- **multi-user chat sessions**
- **multiple threads per user**
- **memory-aware conversations**
- **tool calling**
- optional **tool activity display in the UI**
It is useful for experimenting with AI agents that can search, calculate, scrape websites, fetch weather, read files, and more.
---
## Features
- ๐Ÿ‘ค **Multiple users**
- ๐Ÿงต **Multiple chat threads per user**
- ๐Ÿง  **Conversation memory using `thread_id` and `user_id`**
- ๐Ÿ›  **Tool-enabled chatbot**
- ๐ŸŒ **Web search using Tavily**
- ๐Ÿ“š **Wikipedia search**
- โ˜๏ธ **Weather lookup**
- ๐Ÿงฎ **Calculator**
- ๐Ÿ **Python code execution**
- ๐Ÿ“„ **Read local files**
- ๐Ÿ”Ž **Scrape webpage text**
- ๐Ÿงพ **Pretty-print JSON**
- ๐Ÿ’พ **Save user preferences**
- ๐Ÿ–ฅ **System info tool**
- ๐ŸŽจ **Gradio web interface**
- โœ… Optional **tool activity panel** to show which tools were called
---
## Project Structure
A recommended project structure:
```text
project/
โ”‚
โ”œโ”€โ”€ tools.py # All tool definitions
โ”œโ”€โ”€ memory_chatbot.py # Chatbot / LangChain agent backend
โ”œโ”€โ”€ app.py # Gradio UI
โ”œโ”€โ”€ .env # Environment variables
โ”œโ”€โ”€ requirements.txt # Python dependencies
โ””โ”€โ”€ README.md
```
> **Important:**
> If your UI file imports `chatbot` like this:
```python
from memory_chatbot import chatbot
```
then your UI file should **not** also be named `memory_chatbot.py`, otherwise you may get a **circular import error**.
Use a separate file name such as `app.py` for the Gradio interface.
---
## Tools Included
The project currently includes the following tools:
### 1. `time_date`
Returns todayโ€™s date in `yyyy-mm-dd` format.
### 2. `calculator`
Evaluates mathematical expressions.
### 3. `python_exec`
Executes Python code and returns local variables.
### 4. `get_weather`
Fetches current weather for a city using `wttr.in`.
### 5. `wikipedia_search`
Searches Wikipedia and returns a short summary.
### 6. `scrape_website`
Extracts text content from a webpage.
### 7. `read_file`
Reads the contents of a local file.
### 8. `format_json`
Formats and prettifies a JSON string.
### 9. `generate_sql`
Converts natural language into a placeholder SQL query.
### 10. `system_info`
Returns system/platform information.
### 11. `save_user_preference`
Stores user preference text (currently mocked).
### 12. `tool_tavily`
Performs web search using Tavily.
---
## Installation
## 1. Clone the repository
```bash
git clone https://github.com/your-username/your-repo-name.git
cd your-repo-name
```
## 2. Create a virtual environment
### Windows
```bash
python -m venv venv
venv\Scripts\activate
```
### macOS / Linux
```bash
python3 -m venv venv
source venv/bin/activate
```
## 3. Install dependencies
```bash
pip install -r requirements.txt
```
If you do not already have a `requirements.txt`, you can use something like this:
```txt
gradio
langchain
langchain-core
langchain-tavily
python-dotenv
requests
wikipedia
beautifulsoup4
```
Depending on your chatbot backend, you may also need your model provider package, such as:
- `langchain-openai`
- `langchain-google-genai`
- `langchain-groq`
- or another LLM integration
---
## Environment Variables
Create a `.env` file in the root directory.
Example:
```env
TAVILY_API_KEY=your_tavily_api_key
OPENAI_API_KEY=your_openai_api_key
```
If you are using another model provider, replace `OPENAI_API_KEY` with the correct key for your setup.
---
## Running the App
Start the Gradio interface with:
```bash
python app.py
```
Then open the local Gradio URL shown in the terminal, usually:
```text
http://127.0.0.1:7860
```
---
## How It Works
### User and Thread Management
Each conversation is identified using:
- `user_id`
- `thread_id`
This allows the chatbot to maintain separate memory for:
- different users
- different chat sessions for the same user
### Chat Flow
When the user sends a message:
1. the message is wrapped as a `HumanMessage`
2. the chatbot is invoked with `thread_id` and `user_id`
3. the agent may call one or more tools
4. the final AI response is displayed in the chat UI
5. the conversation is stored under that user/thread pair
---
## Gradio UI Features
The Gradio app includes:
- **User selector**
- **New user button**
- **Thread selector**
- **New chat button**
- **Chat area**
- **Message input box**
This makes it easy to simulate multiple users and sessions in one interface.
---
## Showing Tool Calls in the UI
Yes โ€” this project can be extended to show:
- which tool was called
- tool arguments
- tool output
For example, if the chatbot uses `get_weather("Delhi")`, the UI can display something like:
```text
Calling tool: get_weather
Arguments: {"city": "Delhi"}
Output: Delhi: +34ยฐC, Sunny
```
This is useful for:
- debugging
- understanding agent behavior
- teaching/demo purposes
A good way to display this is by adding a `gr.Markdown()` or `gr.Textbox()` panel in the UI and parsing:
- `AIMessage.tool_calls`
- `ToolMessage.content`
---
## Example Use Cases
- Ask todayโ€™s date
- Calculate expressions like `25 * 12`
- Execute small Python snippets
- Look up weather in a city
- Search Wikipedia topics
- Scrape a webpage summary
- Read a local file
- Format JSON data
- Save user preferences
---
## Example Prompts
Try asking:
```text
What is today's date?
```
```text
Calculate 125 * 48
```
```text
What is the weather in London?
```
```text
Search Wikipedia for Artificial Intelligence
```
```text
Read the contents of sample.txt
```
```text
Format this JSON: {"name":"John","age":25}
```
---
## Security Warning
This project includes some tools that are **unsafe for public deployment** without restrictions.
### Risky tools
- `calculator` uses `eval()`
- `python_exec` uses `exec()`
- `read_file` can access local files
- `scrape_website` can fetch arbitrary URLs
### Why this matters
If exposed publicly, users may be able to:
- run arbitrary Python code
- read sensitive local files
- access internal resources
- misuse the server
### Recommendation
Use this project:
- for **local development**
- for **learning**
- for **internal testing only**
Before deploying publicly, you should:
- remove `eval()` and `exec()`
- restrict file access
- validate URLs
- sandbox execution
- add authentication and rate limiting
Tiny chatbot, big chaos potential. Better to keep the chaos leashed.
---
## Known Notes
### 1. Circular Import Risk
If your UI file is named `memory_chatbot.py` and also contains:
```python
from memory_chatbot import chatbot
```
you will likely get an import issue.
### Fix
Rename the Gradio UI file to something like:
```text
app.py
```
and keep the chatbot backend in:
```text
memory_chatbot.py
```
---
### 2. Tool Results May Differ
Some tools depend on external services:
- `wttr.in`
- `Wikipedia`
- `Tavily`
- websites being scraped
If those services are unavailable, the tool may fail or return unexpected results.
---
## Future Improvements
Possible enhancements for this project:
- real memory store integration
- persistent database for chat history
- streaming responses
- live tool-call updates in the UI
- better error handling
- authentication
- safer code execution sandbox
- SQL generation using LLM
- file upload support
- improved styling for the chat interface
---
## Sample `tools.py`
This file contains all your custom tools used by the chatbot agent.
It includes tools for:
- date/time
- calculator
- Python execution
- weather
- Wikipedia
- web scraping
- file reading
- JSON formatting
- SQL generation
- system information
- user preference saving
- Tavily search
---
## Sample Workflow
1. Start app
2. Select or create a user
3. Create a new thread
4. Ask a question
5. Agent decides whether to use tools
6. Tool result is returned
7. Final AI answer is shown
8. Conversation history is stored per user/thread
---
## Requirements Summary
Main libraries used:
- `gradio`
- `langchain`
- `langchain-core`
- `langchain-tavily`
- `requests`
- `wikipedia`
- `beautifulsoup4`
- `python-dotenv`
---
## License
This project is for educational and development use.
Add your preferred license here, for example:
```text
MIT License
```
---
## Author
Built with LangChain, Gradio, and a healthy amount of agent curiosity.
If you want, you can customize this section with your name, GitHub profile, or portfolio link.
---
## Contributing
Contributions are welcome.
You can improve this project by:
- adding safer tool implementations
- improving UI design
- adding persistent memory
- improving tool logging
- integrating streaming
- adding tests
---
## Final Notes
This project is a great starting point if you want to learn:
- LangChain tools
- agent-based workflows
- memory-aware chat apps
- multi-thread chat management
- Gradio interfaces
If you are planning to deploy it publicly, please review the security concerns carefully before doing so.