Skip to main content

A Pythonic interface to LLMs.

Project description

LLaMaBot: A Pythonic bot interface to LLMs

LLaMaBot implements a Pythonic interface to LLMs, making it much easier to experiment with LLMs in a Jupyter notebook and build simple utility apps that utilize LLMs. The model that we default to using is OpenAI's largest GPT-4 model.

Install LLaMaBot

To install LLaMaBot:

pip install llamabot

How to use

Obtain an OpenAI API key

Obtain an OpenAI API key and set it as the environment variable OPENAI_API_KEY. (Here's a reference on what an environment variable is, if you're not sure.)

We recommend setting the environment variable in a .env file in the root of your project repository. From there, llamabot will automagically load the environment variable for you.

Simple Bot

The simplest use case of LLaMaBot is to create a simple bot that keeps no record of chat history. This is effectively the same as a stateless function that you program with natural language instructions rather than code. This is useful for prompt experimentation, or for creating simple bots that are preconditioned on an instruction to handle texts and are then called upon repeatedly with different texts. For example, to create a Bot that explains a given chunk of text like Richard Feynman would:

from llamabot import SimpleBot

feynman = SimpleBot("You are Richard Feynman. You will be given a difficult concept, and your task is to explain it back.")

Now, feynman is callable on any arbitrary chunk of text and will return a rephrasing of that text in Richard Feynman's style (or more accurately, according to the style prescribed by the prompt). For example:

feynman("Enzyme function annotation is a fundamental challenge, and numerous computational tools have been developed. However, most of these tools cannot accurately predict functional annotations, such as enzyme commission (EC) number, for less-studied proteins or those with previously uncharacterized functions or multiple activities. We present a machine learning algorithm named CLEAN (contrastive learning–enabled enzyme annotation) to assign EC numbers to enzymes with better accuracy, reliability, and sensitivity compared with the state-of-the-art tool BLASTp. The contrastive learning framework empowers CLEAN to confidently (i) annotate understudied enzymes, (ii) correct mislabeled enzymes, and (iii) identify promiscuous enzymes with two or more EC numbers—functions that we demonstrate by systematic in silico and in vitro experiments. We anticipate that this tool will be widely used for predicting the functions of uncharacterized enzymes, thereby advancing many fields, such as genomics, synthetic biology, and biocatalysis.")

Chat Bot

To experiment with a Chat Bot in the Jupyter notebook, we also provide the ChatBot interface. This interface automagically keeps track of chat history for as long as your Jupyter session is alive. Doing so allows you to use your own local Jupyter notebook as a chat interface.

For example:

from llamabot import ChatBot

feynman = ChatBot("You are Richard Feynman. You will be given a difficult concept, and your task is to explain it back.")
feynman("Enzyme function annotation is a fundamental challenge, and numerous computational tools have been developed. However, most of these tools cannot accurately predict functional annotations, such as enzyme commission (EC) number, for less-studied proteins or those with previously uncharacterized functions or multiple activities. We present a machine learning algorithm named CLEAN (contrastive learning–enabled enzyme annotation) to assign EC numbers to enzymes with better accuracy, reliability, and sensitivity compared with the state-of-the-art tool BLASTp. The contrastive learning framework empowers CLEAN to confidently (i) annotate understudied enzymes, (ii) correct mislabeled enzymes, and (iii) identify promiscuous enzymes with two or more EC numbers—functions that we demonstrate by systematic in silico and in vitro experiments. We anticipate that this tool will be widely used for predicting the functions of uncharacterized enzymes, thereby advancing many fields, such as genomics, synthetic biology, and biocatalysis.")

With the chat history available, you can ask a follow-up question:

feynman("Is there a simpler way to rephrase the text?")

And your bot will work with the chat history to respond.

QueryBot

The final bot provided is a QueryBot. This bot lets you query a collection of documents. To use it, you have two options:

  1. Pass in a list of paths to text files, or
  2. Pass in a pre-computed GPTSimpleIndex from LlamaIndex.

As an illustrative example:

from llamabot import QueryBot
from pathlib import Path

blog_index = Path("/path/to/index.json")
bot = QueryBot(system_message="You are a Q&A bot.", saved_index_path=blog_index)
result = bot("Do you have any advice for me on career development?", similarity_top_k=5)
display(Markdown(result.response))

CLI Demos

Llamabot comes with CLI demos of what can be built with it and a bit of supporting code.

Here is one where I expose a chatbot directly at the command line using llamabot chat:

<script async id="asciicast-594332" src="https://asciinema.org/a/594332.js"></script>

And here is another one where llamabot is used as part of the backend of a CLI app to chat with one's Zotero library using llamabot zotero chat:

<script async id="asciicast-594326" src="https://asciinema.org/a/594326.js"></script>

And finally, here is one where I use llamabot's SimpleBot to create a bot that automatically writes commit messages for me.

<script async id="asciicast-594334" src="https://asciinema.org/a/594334.js"></script>

Contributing

New features

New features are welcome! These are early and exciting days for users of large language models. Our development goals are to keep the project as simple as possible. Features requests that come with a pull request will be prioritized; the simpler the implementation of a feature (in terms of maintenance burden), the more likely it will be approved.

Bug reports

Please submit a bug report using the issue tracker.

Questions/Discussions

Please use the issue tracker on GitHub.

Contributors

Eric Ma
Eric Ma

💻 📖

Project details


Release history Release notifications | RSS feed

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

llamabot-0.0.77.tar.gz (42.3 kB view details)

Uploaded Source

Built Distribution

llamabot-0.0.77-py3-none-any.whl (46.8 kB view details)

Uploaded Python 3

File details

Details for the file llamabot-0.0.77.tar.gz.

File metadata

  • Download URL: llamabot-0.0.77.tar.gz
  • Upload date:
  • Size: 42.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.11.5

File hashes

Hashes for llamabot-0.0.77.tar.gz
Algorithm Hash digest
SHA256 04762bf781855a2f13f3da413e701d2d49868150cd2775db6e7fafa1ffa3d70f
MD5 88fce8c5000d88bf2deb27494d887a0a
BLAKE2b-256 e505a6320c11dec1aed3e2437ae8d4781ab582ae4941a663d13d9efced0a992c

See more details on using hashes here.

File details

Details for the file llamabot-0.0.77-py3-none-any.whl.

File metadata

  • Download URL: llamabot-0.0.77-py3-none-any.whl
  • Upload date:
  • Size: 46.8 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.11.5

File hashes

Hashes for llamabot-0.0.77-py3-none-any.whl
Algorithm Hash digest
SHA256 fc313c8c646e355607d9bb66fc34372771024dea94ad0128ff083e43c12bf37b
MD5 7e6a0c1f3aca3afb0eb1361a2dcdadb6
BLAKE2b-256 dd1bd95a6ccdd3348d2a558984878c2f59a9dd0a24653a8c6e2279be2fb5369d

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page