fence-llm


Namefence-llm JSON
Version 0.0.7 PyPI version JSON
download
home_pagehttps://github.com/WouterDurnez/fence
SummaryKeep the bloat out! - A lightweight LLM interaction library
upload_time2024-09-23 19:25:20
maintainerNone
docs_urlNone
authorwouter.durnez
requires_python<4.0,>=3.12
licenseMIT
keywords openai llm gpt ai nlp language model api anthropic claude wrapper fence
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            <img src="docs/logo.png" alt="tests" height="200"/>

[![python](https://img.shields.io/badge/Python-3.12-3776AB.svg?style=flat&logo=python&logoColor=white)](https://www.python.org)
[![pre-commit](https://img.shields.io/badge/pre--commit-enabled-brightgreen?logo=pre-commit&logoColor=white)](https://github.com/pre-commit/pre-commit)
[![black](https://img.shields.io/badge/code%20style-black-000000.svg)
](https://github.com/psf/black)
[![license: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
[![Contributor Covenant](https://img.shields.io/badge/Contributor%20Covenant-2.1-4baaaa.svg)](code_of_conduct.md)

# 🀺 Fence

No, not that kind of fence. The once with the interlinked pieces of metal. Like a chain fence?

`Fence` is a simple, lightweight library for LLM communication. A lot of the functionality was inspired by/derived of LangChain (the OG LLM package) basics, since that's how the package was born - as a stripped down version of LangChain functionality, with cooler names.

## πŸ€” Raison d'Γͺtre

### Why does this exist?

The simple answer: by accident. The slightly longer answer: LangChain used to be (is?) a pretty big package with a ton of dependencies. The upside is that it's powerful for PoC purposes, because it has it all.

The downsides:

- It's **_big_**. It takes up a lot of space (which can be an issue in some environments/runtimes), often for functionality that isn't needed.
- It's fairly **_complex_**. It's a big package with a lot of functionality, which can be overwhelming for new users.
- It **_wasn't exactly dependable_** in an industrial setting before. Version jumps were common, and the package was often broken after a new release.

As a result, many developers (particularly those working in large production environments) have advocated for more lightweight, custom functionality that favors stability and robustness.

### Circling back: why Fence?

Since our work was in a production environment, mostly dealing with Bedrock, we just started building some **basic components** from scratch. We needed a way to communicate with our models, which turned out to as the `Link` class (_wink wink_).
Then, some other things were added left and right, and this eventually turned into a miniature package. Not in small part because it was fun to go down this road. But mostly because it strikes the right balance between convenience and flexiblity.

Naturally, it's nowhere as powerful as, for instance, LangChain. If you want to build a quick PoC with relatively complex logic, maybe go for the OG instead. If you want to be set on your way with a simple, lightweight package that's easy to understand and extend, Fence might be the way to go.

## πŸ’ͺ Features

### What can I do with Fence?

- **Uniform interface for `LLMs`**. Since our main use case was Bedrock, we built Fence to work with Bedrock models. However, it also has openAI support, and it's easy to extend to other models (contributors welcome!)
- **Links and Chains** help you build complex pipelines with multiple models. This is a feature that's been around since LangChain, and it's still here. You can parametrize templates, and pass the output of one model to another.
- **Template classes** that handle the basics, and that work across models (e.g., a MessageTemplate can be sent to a Bedrock Claude3 model, _or_ to an openAI model - system/user/assistant formatting is handled under the hood).
- **Basic utils on board** for typical tasks like retries, parallelization, logging, output parsers, etc.

### What can't I do with Fence?

It's obviously not as powerful as some of the other packages out there, that hold tons more of features. We're also not trying to fall into the trap of building 'yet another framework' (insert [XKCD](https://xkcd.com/927/) here), so we're trying to guard our scope. If you need a lot of bells and whistles, you might want to look at any of these:

- [`LangChain`](https://www.langchain.com/)

The OG, no explanation needed.

- [`Griptape`](https://www.griptape.ai)

A more recent package, with a lot of cool features! Great for building PoCs, too. Built by ex-AWS folks, and promises to be a lot more industry-oriented.

## πŸ› οΈ How do I use it?

Fence just has a few basic components. See the [notebooks](notebooks) for examples on how to use them. Documentation is coming soon, but for now, you can check out the [source code](fence) for more details.

## πŸ“¦ Installation

You can install Fence from PyPI:

```bash
pip install fence-llm
```

## πŸ—ΊοΈ Roadmap

- [ ] Add more models
- [ ] Add more tests
- [ ] Add some basic design patterns (e.g., CoT, MapReduce)
- [ ] Add more tutorials
- [ ] Add more user-friendly auth methods (e.g., SigV4, OpenAI keys as params/config, etc.)

## 🀝 Contributing

We welcome contributions! Check out the [CONTRIBUTING.md](CONTRIBUTING.md) for more details.

## πŸ™‹πŸ»β€β™‚οΈ Open issues or obstacles

- [ ] Bedrock access depends on user logging in themselves ➑️ Can we make this more user-friendly?


            

Raw data

            {
    "_id": null,
    "home_page": "https://github.com/WouterDurnez/fence",
    "name": "fence-llm",
    "maintainer": null,
    "docs_url": null,
    "requires_python": "<4.0,>=3.12",
    "maintainer_email": null,
    "keywords": "openai, llm, gpt, ai, nlp, language, model, api, anthropic, claude, wrapper, fence",
    "author": "wouter.durnez",
    "author_email": "wouter.durnez@gmail.com",
    "download_url": "https://files.pythonhosted.org/packages/15/0d/ce4f4dc633590cb1222cd99470db9321e143758680317409bf6c13962b4e/fence_llm-0.0.7.tar.gz",
    "platform": null,
    "description": "<img src=\"docs/logo.png\" alt=\"tests\" height=\"200\"/>\n\n[![python](https://img.shields.io/badge/Python-3.12-3776AB.svg?style=flat&logo=python&logoColor=white)](https://www.python.org)\n[![pre-commit](https://img.shields.io/badge/pre--commit-enabled-brightgreen?logo=pre-commit&logoColor=white)](https://github.com/pre-commit/pre-commit)\n[![black](https://img.shields.io/badge/code%20style-black-000000.svg)\n](https://github.com/psf/black)\n[![license: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)\n[![Contributor Covenant](https://img.shields.io/badge/Contributor%20Covenant-2.1-4baaaa.svg)](code_of_conduct.md)\n\n# \ud83e\udd3a Fence\n\nNo, not that kind of fence. The once with the interlinked pieces of metal. Like a chain fence?\n\n`Fence` is a simple, lightweight library for LLM communication. A lot of the functionality was inspired by/derived of LangChain (the OG LLM package) basics, since that's how the package was born - as a stripped down version of LangChain functionality, with cooler names.\n\n## \ud83e\udd14 Raison d'\u00eatre\n\n### Why does this exist?\n\nThe simple answer: by accident. The slightly longer answer: LangChain used to be (is?) a pretty big package with a ton of dependencies. The upside is that it's powerful for PoC purposes, because it has it all.\n\nThe downsides:\n\n- It's **_big_**. It takes up a lot of space (which can be an issue in some environments/runtimes), often for functionality that isn't needed.\n- It's fairly **_complex_**. It's a big package with a lot of functionality, which can be overwhelming for new users.\n- It **_wasn't exactly dependable_** in an industrial setting before. Version jumps were common, and the package was often broken after a new release.\n\nAs a result, many developers (particularly those working in large production environments) have advocated for more lightweight, custom functionality that favors stability and robustness.\n\n### Circling back: why Fence?\n\nSince our work was in a production environment, mostly dealing with Bedrock, we just started building some **basic components** from scratch. We needed a way to communicate with our models, which turned out to as the `Link` class (_wink wink_).\nThen, some other things were added left and right, and this eventually turned into a miniature package. Not in small part because it was fun to go down this road. But mostly because it strikes the right balance between convenience and flexiblity.\n\nNaturally, it's nowhere as powerful as, for instance, LangChain. If you want to build a quick PoC with relatively complex logic, maybe go for the OG instead. If you want to be set on your way with a simple, lightweight package that's easy to understand and extend, Fence might be the way to go.\n\n## \ud83d\udcaa Features\n\n### What can I do with Fence?\n\n- **Uniform interface for `LLMs`**. Since our main use case was Bedrock, we built Fence to work with Bedrock models. However, it also has openAI support, and it's easy to extend to other models (contributors welcome!)\n- **Links and Chains** help you build complex pipelines with multiple models. This is a feature that's been around since LangChain, and it's still here. You can parametrize templates, and pass the output of one model to another.\n- **Template classes** that handle the basics, and that work across models (e.g., a MessageTemplate can be sent to a Bedrock Claude3 model, _or_ to an openAI model - system/user/assistant formatting is handled under the hood).\n- **Basic utils on board** for typical tasks like retries, parallelization, logging, output parsers, etc.\n\n### What can't I do with Fence?\n\nIt's obviously not as powerful as some of the other packages out there, that hold tons more of features. We're also not trying to fall into the trap of building 'yet another framework' (insert [XKCD](https://xkcd.com/927/) here), so we're trying to guard our scope. If you need a lot of bells and whistles, you might want to look at any of these:\n\n- [`LangChain`](https://www.langchain.com/)\n\nThe OG, no explanation needed.\n\n- [`Griptape`](https://www.griptape.ai)\n\nA more recent package, with a lot of cool features! Great for building PoCs, too. Built by ex-AWS folks, and promises to be a lot more industry-oriented.\n\n## \ud83d\udee0\ufe0f How do I use it?\n\nFence just has a few basic components. See the [notebooks](notebooks) for examples on how to use them. Documentation is coming soon, but for now, you can check out the [source code](fence) for more details.\n\n## \ud83d\udce6 Installation\n\nYou can install Fence from PyPI:\n\n```bash\npip install fence-llm\n```\n\n## \ud83d\uddfa\ufe0f Roadmap\n\n- [ ] Add more models\n- [ ] Add more tests\n- [ ] Add some basic design patterns (e.g., CoT, MapReduce)\n- [ ] Add more tutorials\n- [ ] Add more user-friendly auth methods (e.g., SigV4, OpenAI keys as params/config, etc.)\n\n## \ud83e\udd1d Contributing\n\nWe welcome contributions! Check out the [CONTRIBUTING.md](CONTRIBUTING.md) for more details.\n\n## \ud83d\ude4b\ud83c\udffb\u200d\u2642\ufe0f Open issues or obstacles\n\n- [ ] Bedrock access depends on user logging in themselves \u27a1\ufe0f Can we make this more user-friendly?\n\n",
    "bugtrack_url": null,
    "license": "MIT",
    "summary": "Keep the bloat out! - A lightweight LLM interaction library",
    "version": "0.0.7",
    "project_urls": {
        "Documentation": "https://github.com/WouterDurnez/fence",
        "Homepage": "https://github.com/WouterDurnez/fence",
        "Repository": "https://github.com/WouterDurnez/fence"
    },
    "split_keywords": [
        "openai",
        " llm",
        " gpt",
        " ai",
        " nlp",
        " language",
        " model",
        " api",
        " anthropic",
        " claude",
        " wrapper",
        " fence"
    ],
    "urls": [
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "49b58c7777fae2d57d8b0fe4ce272ad10e5eac38d57950da583deb5f2475889d",
                "md5": "4f4b6264f271d438d4b4987b5ed6ed24",
                "sha256": "9e0758f303a1013310fc45ab9810f82f48de19d29344147b4e311247be54cc3f"
            },
            "downloads": -1,
            "filename": "fence_llm-0.0.7-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "4f4b6264f271d438d4b4987b5ed6ed24",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": "<4.0,>=3.12",
            "size": 53951,
            "upload_time": "2024-09-23T19:25:18",
            "upload_time_iso_8601": "2024-09-23T19:25:18.904342Z",
            "url": "https://files.pythonhosted.org/packages/49/b5/8c7777fae2d57d8b0fe4ce272ad10e5eac38d57950da583deb5f2475889d/fence_llm-0.0.7-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "150dce4f4dc633590cb1222cd99470db9321e143758680317409bf6c13962b4e",
                "md5": "dd25ee870276a5fa0e08d166f06a5dba",
                "sha256": "e7d400ad6778d43e16ceea0b8e9bfe571892c8acbd1d71b07efb52674e98b5cd"
            },
            "downloads": -1,
            "filename": "fence_llm-0.0.7.tar.gz",
            "has_sig": false,
            "md5_digest": "dd25ee870276a5fa0e08d166f06a5dba",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": "<4.0,>=3.12",
            "size": 37109,
            "upload_time": "2024-09-23T19:25:20",
            "upload_time_iso_8601": "2024-09-23T19:25:20.328324Z",
            "url": "https://files.pythonhosted.org/packages/15/0d/ce4f4dc633590cb1222cd99470db9321e143758680317409bf6c13962b4e/fence_llm-0.0.7.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2024-09-23 19:25:20",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "WouterDurnez",
    "github_project": "fence",
    "travis_ci": false,
    "coveralls": false,
    "github_actions": true,
    "lcname": "fence-llm"
}
        
Elapsed time: 4.21683s