bespoken
██████╗ ███████╗███████╗██████╗ ██████╗ ██╗ ██╗███████╗███╗ ██╗
██╔══██╗██╔════╝██╔════╝██╔══██╗██╔═══██╗██║ ██╔╝██╔════╝████╗ ██║
██████╔╝█████╗ ███████╗██████╔╝██║ ██║█████╔╝ █████╗ ██╔██╗ ██║
██╔══██╗██╔══╝ ╚════██║██╔═══╝ ██║ ██║██╔═██╗ ██╔══╝ ██║╚██╗██║
██████╔╝███████╗███████║██║ ╚██████╔╝██║ ██╗███████╗██║ ╚████║
╚═════╝ ╚══════╝╚══════╝╚═╝ ╚═════╝ ╚═╝ ╚═╝╚══════╝╚═╝ ╚═══╝
A terminal chat experience that you can configure yourself.
Installation
Basic installation:
uv pip install bespoken
Usage
This library uses llm under the hood to provide you with building blocks to make LLM chat interfaces from the commandline. Here's an example:
This interface was defined via below:
from bespoken import chat
from bespoken.tools import FileTool, TodoTools, PlaywrightTool
chat(
model_name="anthropic/claude-3-5-sonnet-20240620",
tools=[FileTool("edit.py")],
system_prompt="You are a coding assistant that can make edits to a single file.",
debug=True,
)
Features
Autocomplete
Tab completion for commands and file paths. Use @file.py to get file path suggestions, "/" + TAB> to autocomplete commands or use arrow keys for command history.
Custom slash commands
Define your own /commands that either send text to the LLM or trigger interactive functions:
def save_conversation():
"""Save conversation to file"""
filename = ui.input("Filename: ")
return f"Saved to {filename}"
chat(
...,
slash_commands={
"/save": save_conversation,
"/formal": "Please respond in a formal manner.",
}
)
Why?
The goal is to host a bunch of tools that you can pass to the LLM, but the main idea here is that you can also make it easy to constrain the chat. The FileTool, for example, only allows the LLM to make edits to a single file declared upfront. This significantly reduces any injection risks and still covers a lot of use-cases. It is also a nice exercise to make tools like claude code feel less magical, and you can also swap out the LLM with any other one as you see fit.
This project is in early days at the moment, but it feels exciting to work on!
Metadata
Release files for bespoken 0.2.2
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| bespoken-0.2.2.tar.gz | 26.8 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| bespoken-0.2.2-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 50.8 kB
Release files / bespoken-0.2.2.tar.gz
| Download URL | bespoken-0.2.2.tar.gz |
|---|---|
| Size | 26.8 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
c8533f91aeeaa6638a5762a74a46f8b5df82e0df476746fe88cce1247f17e14e
|
|
BLAKE2b-256 checksum How to use checksums |
a3816e9b6238104e8e5b8ed8969736ea415c8efa6d7c4e95610bb392f0d057d3
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.6.6
|
Release files / bespoken-0.2.2-py3-none-any.whl
| Download URL | bespoken-0.2.2-py3-none-any.whl |
|---|---|
| Size | 24.0 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
21340c09ffc2031c29335a4ec3870b54158867c26095934ee6a2576e1d0c9981
|
|
BLAKE2b-256 checksum How to use checksums |
2e12b3124c82d42d7afa04f15ed08b3e691ac6a0611f1c9d69220ecb280d1117
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.6.6
|