Skip to main content

Flexibly instruct and prompt LLMs in Python

Project description

langworks

Flexibly instruct and prompt LLMs in Python

| Documentation |

About

Langworks is an open-source framework build on top of Pypeworks to flexibly instruct and prompt LLMs in Python. It offers the following features:

  • Chained prompting with conditional pathways
  • Templatable prompts and responses using Jinja
  • Guided generation constrained by regex and context-free grammar
  • Mixing and matching of LLMs and LLM servers (with support for llama.cpp and vLLM)
  • Distributed inference with autoscaling support
  • Fine-tuning of sampling parameters per prompt

Install

Langworks is available through the PyPI repository and can be installed using pip:

pip install langworks

Quickstart

A Langwork represents a specialised pipework consisting of Query and Node objects. A Query object encapsulates a templatable prompt that may be passed to a LLM, as well as any guidance on how that LLM may process that prompt. Nodes serve as processing units, to be used to prepare input for Query objects, or to process output received from these objects.

Assuming a vLLM-backend running Llama-3 is available, a Langwork may be instantiated as follows:

from langworks import (
    Connection,
    Langwork,
    Query
)

from pypeworks import (
    Node
)

from langworks.middleware.vllm import (
    SamplingParams,
    vLLM
)

langwork = Langwork(

    # Configuration
    middleware = vLLM(
        url          = "http://127.0.0.1:4000/v1",
        model        = "meta-llama/Meta-Llama-3-8B-Instruct",
        params       = SamplingParams(temperature = 0.3)
    ),

    system_msg = [
        {
            "role": "system",
            "content": (
                "You are a helpful assistant knowledgable about popular trivia."
            )
        }
    ],

    # Logic
    query = Query(

        query = (
            """
            Who or what is more popular: {{ input[0] }} or {{ input[1] }}? Think step-by-step \\
            before stating your final answer, either '{{ input[0] }}' or '{{ input[1] }}', \\
            delimited by triple asterisks (i.e. ***{{ input[0] }}*** or ***{{ input[1] }}***).
            """
        ),

        guidance = (
            """
            Let's think step-by-step\\
            {% gen params = Params(stop = ["***"], include_stop = True) %}\\
            {% choice input, var = "hit" %, params = Params(temperature = 0)}\\
            ***
            """
        )

    ),

    extract = Node(
        lambda context, history: context.get("hit", None)
    ),

    # Connections
    connections = [

        Connection("enter"   , "query"),
        Connection("query"   , "extract"),
        Connection("extract" , "exit")
        
    ]

)

for result in langwork(
    iter([("cats", "dogs"), ("werewolves", "vampires"), ("rock", "pop")])
):
    
    print(result)

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

langworks-0.3.1.tar.gz (51.4 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

langworks-0.3.1-py3-none-any.whl (77.7 kB view details)

Uploaded Python 3

File details

Details for the file langworks-0.3.1.tar.gz.

File metadata

  • Download URL: langworks-0.3.1.tar.gz
  • Upload date:
  • Size: 51.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.12.0

File hashes

Hashes for langworks-0.3.1.tar.gz
Algorithm Hash digest
SHA256 ecf9586777cefd6068842eadfb3c492f79d26db0a23e253ed4a87ed8c5789b41
MD5 c9b4ef0056a6671107bc410fb9a7945b
BLAKE2b-256 b09aeb8920c88751a4d7b5aa1983ca3eed4dd8094419285a5632ff868e2f1fcb

See more details on using hashes here.

File details

Details for the file langworks-0.3.1-py3-none-any.whl.

File metadata

  • Download URL: langworks-0.3.1-py3-none-any.whl
  • Upload date:
  • Size: 77.7 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.12.0

File hashes

Hashes for langworks-0.3.1-py3-none-any.whl
Algorithm Hash digest
SHA256 734d844308a9f87decf6bd3ea5208bb979ef9831049dfb17e60324164eaae0e6
MD5 ff051d473e57231ba216fa2471a8d298
BLAKE2b-256 f3c795073918ec66dc231ed5d00acc3b0c9f56186aab61a1606d3672b35ee4ac

See more details on using hashes here.

Supported by

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