Skip to main content

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:

demo

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.

parrot

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)

Source distribution for bespoken 0.2.2
File Size Uploaded
bespoken-0.2.2.tar.gz 26.8 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for bespoken 0.2.2
File Interpreter ABI Platform
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

Release history Release notifications | RSS feed

This release

0.2.2 This release

2 release files

0.2.1

2 release files

0.2.0

2 release files

0.1.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page