https://github.com/mermade/bingchain
Capable Langchain/AutoGPT alternative in ~350 lines of core code
https://github.com/mermade/bingchain
ai chatgpt llm
Last synced: 12 months ago
JSON representation
Capable Langchain/AutoGPT alternative in ~350 lines of core code
- Host: GitHub
- URL: https://github.com/mermade/bingchain
- Owner: Mermade
- License: mit
- Created: 2023-10-01T01:44:32.000Z (almost 3 years ago)
- Default Branch: main
- Last Pushed: 2024-01-08T16:33:51.000Z (over 2 years ago)
- Last Synced: 2024-04-14T23:16:41.025Z (about 2 years ago)
- Topics: ai, chatgpt, llm
- Language: JavaScript
- Homepage: https://mermade.org.uk/
- Size: 4.85 MB
- Stars: 2
- Watchers: 2
- Forks: 0
- Open Issues: 5
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# 🕵️🔗 BingChain
This is an evolution of [langchain-mini](https://github.com/ColinEberhardt/langchain-mini), a very simple re-implementation of [LangChain](https://github.com/hwchase17/langchain), in ~350 lines of core code. In essence, it is a multi-model LLM-powered chat application that is able to use tools (Microsoft **Bing** search, URL retrieval, API plugin installation, API calls, a Javascript sandbox, JsFiddle creation, image and video preview, and a scientific calculator, as well as meta-tools such as `list`, `disable`, `reset` and `debug`) in order to build a **chain** of thought to hold conversations and answer questions.
Here's an example:
~~~
Q: What is the world record for solving a rubiks cube?
The world record for solving a Rubik's Cube is 4.69 seconds, held by Yiheng Wang (China).
Q: Can a robot solve it faster?
The fastest time a robot has solved a Rubik's Cube is 0.637 seconds.
Q: Who made this robot?
Infineon created the robot that solved a Rubik's Cube in 0.637 seconds.
Q: What time would an average human expect for solving?
It takes the average person about three hours to solve a Rubik's cube for the first time.
~~~
This is not intended to be a replacement for LangChain, which has many alternative and composable building blocks, instead it was built to demonstrate the power of assembling a set of tools (such as API calling and Javascript execution). If you're interested in how LangChain, and similar tools work, this is a very good starting point.
## Running / developing
Install dependencies, and run (with node >= v18):
~~~
% npm install
~~~
To display videos in the terminal, you will need to install `ffmpeg`.
You'll need to have an OpenAI API key, and optionally a Bing Search API key. These can be supplied to the application via a `.env` file:
```shell
OPENAI_API_KEY="..."
BING_API_KEY="..."
MODEL=gpt-4
TOKEN_LIMIT=32768
TEMPERATURE=0.25
RESPONSE_LIMIT=512
PORT=1337
GUI=1
#LANG=Ukrainian
#DEBUG=2
#SEED_QUERIES=1
#PROMPT_OVERRIDE=Riddle me this! ${question}
```
You can also set `PROVIDER=anthropic` (with a relevant `ANTHROPIC_API_KEY`, `MODEL` and `TOKEN_LIMIT`) to use an alternative LLM/API provider.
Set the token limit to the advertised limit of the model you are using, so 32768 for `gpt-4`, 4096 for `text-davinci-003` and 2048 for `text-curie-001`.
The clever part is the default initial prompt, which is held in [`prompt.txt`](https://raw.githubusercontent.com/postman-open-technologies/bingchain/main/prompt.txt), unless overridden by the `PROMPT_OVERRIDE` environment variable.
Example prompts and responses to show how the various built-in tools work can be found in the [`examples`](https://github.com/postman-open-technologies/bingchain/tree/main/examples) directory. The tools themselves are defined in [`lib/tools.mjs`](https://github.com/postman-open-technologies/bingchain/tree/main/lib/tools.mjs), including the `description` properties which act as further prompts to the LLM to suggest when and how the tools should be used.
There are a few Javascript and CSS files scattered about from [jsfiddle.net](https://jsfiddle.net/) to make the `savetext`, `savehtml` and `savecode` tools work locally.
**Note**: to enable the Javascript sandbox, you must pass the option `--experimental-vm-modules` to Node.js. The included `go.sh` script sets the Node.js recommended options.
## Start-up
The application will display the built-in tools as it initialises them. Tool names followed by [1] are disabled by default for security reasons (i.e. they may access files on your local filesystem or your environment variables). You can enable them by typing `enable [toolname]` at the prompt. Tool names followed by [2] are disabled becuase you do not have the requisite API key in your environment or your version of Node.js does not support the required features.
## Example dialogue
You can now run the chain:
```repl
% ./go.sh
How can I help? > what was the name of the first woman in space?
```
* I need to search for the name of the first woman in space.
* *Action*: `search`
* *Action Input*: `first woman in space name`
Calling `search` with `first woman in space name`
1. **Valentina Tereshkova - First Woman in Space - Biography**
2. **Valentina Tereshkova: First Woman in Space | Space**
3. **The First Woman in Space: Valentina Tereshkova - ThoughtCo**
* *Thought*: I now know the final answer.
* *Final Answer*: The name of the first woman in space is Valentina Tereshkova.
* **The name of the first woman in space is Valentina Tereshkova.**
### Exiting the chain / vi mode
* You can use `vi`/`vim`-like commands to exit, such as `:q` or you can Ctrl-C twice to exit.
* You can use `:set` to query all environment variables or `:set [variable]=[value]` to temporarily amend the current environment.
## Authors
* [Mike Ralphson](https://github.com/MikeRalphson)
* [Gbadeyboh Bello](https://github.com/Gbahdeyboh)
* [Colin Eberhardt](https://github.com/ColinEberhardt)
## Future work planned
* Ideas and PRs gratefully received.