Make prototyping with Claude fast and easy.
alana-utilities
What is alana-utilities?
This library is designed to make interacting with Claude fast and easy. It is primarily targetted toward people writing non-production, prototype code. It prioritizes developer ergonomics.
It speeds up lots of things that I frequently find myself doing with Claude.
- Generating a response to a user and system prompt
alana.gen(user=..., system=...)
- Creating and/or extending a list of MessageParams
alana.respond(message_content, role="user")
- Extracting content from Claude's output using Regex
alana.get_xml(tag, content)
- Generate a prompt or a Python list of few-shot examples
alana.gen_prompt
&alana.few_shot
respectively
What is alana?
I am alana :)
Motivating Examples
I tested these, and I've tried to make sure my code was idiomatic in all cases. Sorry if I messed up! Please open a GitHub issue if you catch a mistake.
Continuing a list of messages using Anthropic API (adapted from Anthropic API documentation):
import anthropic
from anthropic.types import MessageParam
messages = [
MessageParam(
role="user",
content="Hello, Claude!"
),
]
output_text = anthropic.Anthropic().messages.create(
model="claude-3-opus-20240229",
max_tokens=1024,
messages=messages
).content[0].text
messages.append(
MessageParam(
role="assistant",
content=output_text
)
)
print(messages) # [{'role': 'user', 'content': 'Hello, Claude!'}, {'role': 'assistant', 'content': "Hello! It's nice to meet you. How are you doing today?"}]
Equivalent alana
code:
import alana
messages = []
alana.gen(user="Hello, Claude!", messages=messages, model="opus", max_tokens=1024)
print(messages) # [{'role': 'user', 'content': 'Hello, Claude!'}, {'role': 'assistant', 'content': "Hello! It's nice to meet you. How are you doing today?"}]
Also, equivalent alana
code thanks to defaults:
import alana
messages = []
alana.gen(user="Hello, Claude!", messages=messages)
print(messages) # [{'role': 'user', 'content': 'Hello, Claude!'}, {'role': 'assistant', 'content': "Hello! It's nice to meet you. How are you doing today?"}]
Install Instructions
pip install alana
🎵 Note: I have been making new releases frequently. Make sure your package is up-to-date!
⚠️ Warning: This library is in active early development! No guarantees are made for backward compatibility. The library is NOT production-ready.
Usage Instructions
- Import via
import alana
or, if you're brave,from alana import *
. - Make your Anthropic API key available as an environment variable.
os.environ["ANTHROPIC_API_KEY"] = "..."
The documentation for this project is hosted at utils.alana.computer.
Philosophy
- Programming is too slow! This is doubly true when you're interacting with LLMs. By building nice utilities with sane defaults, I hope to speed up my (and maybe your) workflow.
- I make trade-offs to speed up the developer experience:
- I do not try hard to anticipate future upstream API changes. I'm also ok with breaking backward compatibility to make my functions more concise and more usable.
- Usability > Principles. While I don't relish in it, I'm ok with breaking conventions designed for large production libraries if it speeds up programmers who use
alana
. The priority is to make the library intuitive and fast. - I don't try to serve every use-case.
- Simplicity is key. This library strives to be readable and straightforward.
Features
- Easy color print:
alana.red
,alana.green
,alana.blue
,alana.yellow
,alana.cyan
. Tryalana.green("Hello!")
- Easy pretty print with Sonnet (or an Anthropic model of your choice):
alana.pretty_print
. Tryalana.pretty_print(t.arange(16, device='cpu').reshape(2,2,4))
- Make it easier to use the Anthropic API:
alana.gen
, for easy Claude generations. Tryalana.gen(user="Hello, Claude!")
. You can pass in amessages
parameter (a list of anthropic.types.MessageParams) either in place of or together with auser
parameter.alana.respond
, easily appending a user message to a list of MessageParams!alana.gen_examples
,alana.gen_examples_list
for generating few-shot examples.alana.gen_prompt
, for easy prompt generation (meta-prompt).alana.get_xml
, for using regex to get XML tag contents from model outputs. ⚠️ Regex parsing of XML may be unreliable!alana.remove_xml
to strip certain XML tag-enclosed content from a string (along with the tags). This is primarily intended to get rid of "... " strings. ⚠️ Regex parsing of XML may be unreliable!- A bunch of aliases (Try:
alana.few_shot
,alana.n_shot
, oralana.xml
)
Testing
There are simple tests written with unittest
. I am working on extending the test suite.
You may need to provide your Anthropic API key as an environment variable to run all of the unit tests. See #10.
$ python simple_tests.py
Coming Soon
- Generating alternative prompts given a prompt
- OpenAI model support
- Support for automatic "are you sure"/"are you confused" multi-turn prompting
- Automatic error checking (are there mistakes in this code, sanity checking of model outputs)
- Automatic model-switching on rate limit
- Support for quick-and-dirty unit-testing with Claude!
- Prompt test case generation and easy prompt testing