Skip to main content

Create programs that think, using LLMs.

Project description

Think

Think is a Python package for creating thinking programs.

It provides simple but powerful primitives for robust integration of Large Language Models (LLMs) into your Python programs.

Examples

Using AI as an ordinary function:

from think.llm.openai import ChatGPT
from think.ai import ai

@ai
def haiku(topic: str) -> str:
    """
    Write a haiku about {{ topic }}
    """

llm = ChatGPT()

print(haiku(llm, topic="computers"))

Allowing AI to use tools:

from datetime import date

from think.llm.openai import ChatGPT
from think.chat import Chat
from think.tool import tool

@tool
def current_date() -> str:
    """
    Get the current date.

    :returns: current date in YYYY-MM-DD format
    """
    return date.today().isoformat()


llm = ChatGPT()
chat = Chat("You are a helpful assistant.")
chat.user("How old are you (in days since your knowledge cutoff)?")

print(llm(chat, tools=[current_date]))

Parsing AI output:

import json
from pydantic import BaseModel
from think.llm.openai import ChatGPT
from think.chat import Chat
from think.parser import JSONParser


class CityInfo(BaseModel):
    name: str
    country: str
    population: int
    latitude: float
    longitude: float


llm = ChatGPT()
parser = JSONParser(spec=CityInfo)
chat = Chat(
    "You are a hepful assistant. Your task is to answer questions about cities, "
    "to the best of your knowledge. Your output must be a valid JSON conforming to "
    "this JSON schema:\n" + json.dumps(parser.schema)
).user(city)

answer = llm(chat, parser=parser)

print(f"{answer.name} is a city in {answer.country} with {answer.population} inhabitants.")
print(f"It is located at {answer.latitude} latitude and {answer.longitude} longitude.")

Quickstart

Install via pip:

pip install think-llm

Note that the package name is think-llm, not think.

Set up your LLM credentials (OpenAI or Anthropic, depending on the LLM you want to use):

export OPENAI_API_KEY=<your-openai-key>
export ANTHROPIC_API_KEY=<your-anthropic-key>

And you're ready to go:

from think.llm.openai import ChatGPT
from think.chat import Chat

llm = ChatGPT()
chat = Chat("You are a helpful assistant.").user("Tell me a funny joke.")
print(llm(chat))

Explore the examples directory for more usage examples, and the source code for documentation on how to use the library (until we build proper docs! if you want to help out with that, please see below).

Roadmap

Features and capabilities that are planned for the near future:

  • documentation
  • full support for Anthropic (tools, parsers, AI functions)
  • support for other LLM APIs via LiteLLM or similar
  • support for local LLMs via HuggingFace
  • more examples

If you want to help with any of these, please look at the open issues, join the conversation and submit a PR. Please read the Contributing section below.

Contributing

Contributions are welcome!

To ensure that your contribution is accepted, please follow these guidelines:

  • open an issue to discuss your idea before you start working on it, or if there's already an issue for your idea, join the conversation there and explain how you plan to implement it
  • make sure that your code is well documented (docstrings, type annotations, comments, etc.) and tested (test coverage should only go up)
  • make sure that your code is formatted and type-checked with ruff (default settings)

Copyright

Copyright (C) 2023-2024. Senko Rasic and Think contributors. You may use and/or distribute this project under the terms of MIT license. See the LICENSE file for more details.

Project details


Download files

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

Source Distribution

think_llm-0.0.5.tar.gz (13.0 kB view details)

Uploaded Source

Built Distribution

think_llm-0.0.5-py3-none-any.whl (13.9 kB view details)

Uploaded Python 3

File details

Details for the file think_llm-0.0.5.tar.gz.

File metadata

  • Download URL: think_llm-0.0.5.tar.gz
  • Upload date:
  • Size: 13.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.7.1 CPython/3.11.2 Linux/6.1.0-11-amd64

File hashes

Hashes for think_llm-0.0.5.tar.gz
Algorithm Hash digest
SHA256 84c2a9b070d2fd8fb2ba8c6bbc5d4ee379b417c6cddb26c5edf61269a1fc88b5
MD5 1ca4707022e696d46e9770ee1eadd47f
BLAKE2b-256 08fe69c9c58ab4200e9caf7fc2ad28e0823e03cbeb6b5dc4c4a69cebaccb8202

See more details on using hashes here.

File details

Details for the file think_llm-0.0.5-py3-none-any.whl.

File metadata

  • Download URL: think_llm-0.0.5-py3-none-any.whl
  • Upload date:
  • Size: 13.9 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.7.1 CPython/3.11.2 Linux/6.1.0-11-amd64

File hashes

Hashes for think_llm-0.0.5-py3-none-any.whl
Algorithm Hash digest
SHA256 6e5e54cefb5570dd92766097960c5f7b037a32614c68b6cf68a65eee6735909f
MD5 831752d65649bd6cd613819fa04849aa
BLAKE2b-256 0e2bf24e9b2233ee9872fb4931aec69c40c8bea6c81cf5af31daf4b255ef8db8

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