Skip to main content

Framework to procedurally query LLMs

Project description

Langworks

Langworks is an open-source framework build on top of Pypeworks to procedurally query LLM's 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 LLM's and LLM servers
  • 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.1.2.tar.gz (33.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.1.2-py3-none-any.whl (41.5 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: langworks-0.1.2.tar.gz
  • Upload date:
  • Size: 33.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.1.2.tar.gz
Algorithm Hash digest
SHA256 1f019204c1bd6c2e6d6492a6d17ffe5bdc81680909d9f3fe8c11310dc7f60704
MD5 89ff239ae21bff43257b3bfc0e0dbb66
BLAKE2b-256 a8d6d62cb32d1cf1a78a960ac0aa9c2fb5fb297d84d75a0cd9eb78bf2b950564

See more details on using hashes here.

File details

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

File metadata

  • Download URL: langworks-0.1.2-py3-none-any.whl
  • Upload date:
  • Size: 41.5 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.1.2-py3-none-any.whl
Algorithm Hash digest
SHA256 8dc4ba728116a99795c1efb7a89261a9d26f9b847be0a088f3bf2fb163e6867a
MD5 7e25113fb21fcf20f3d02fc463bd2548
BLAKE2b-256 2ab6d2bde02538c1d45d81d36b2fd2a9e52e7f348b110f204b2de716601cabdc

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