Skip to content

Commit

Permalink
add docs for templates (#12346)
Browse files Browse the repository at this point in the history
  • Loading branch information
hwchase17 authored Oct 26, 2023
1 parent 28c3950 commit 8ec7aad
Show file tree
Hide file tree
Showing 4 changed files with 69 additions and 44 deletions.
2 changes: 1 addition & 1 deletion libs/cli/pyproject.toml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
[tool.poetry]
name = "langchain-cli"
version = "0.0.1rc2"
version = "0.0.3"
description = "CLI for interacting with LangChain"
authors = ["Erick Friis <erick@langchain.dev>"]
readme = "README.md"
Expand Down
18 changes: 18 additions & 0 deletions templates/CONTRIBUTING.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
# Contributing

To add a new project:

Make sure you have `langchain-cli` installed.

```shell
pip install -U langchain-cli
```

Create a new package

```shell
langchain hub new $PROJECT_NAME
```

This will set up the skeleton of a package.
You can then edit the contents of the package as you desire.
4 changes: 4 additions & 0 deletions templates/INDEX.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,11 @@
A list of all template repos

⭐Retrieval Augmented Generation Chatbot: Build a chatbot over your data. Uses OpenAI and Pinecone.

⭐Extraction with OpenAI Functions: Do extraction of structured data from unstructured data. Uses OpenAI function calling.

⭐Local Retrieval Augmented Generation: Build a chatbot over your data. Uses only local tooling: Ollama, GPT4all, Chroma.

⭐OpenAI Functions Agent: Build a chatbot that can take actions. Uses OpenAI function calling and Tavily.

⭐XML Agent: Build a chatbot that can take actions. Uses Anthropic and You.com.
89 changes: 46 additions & 43 deletions templates/README.md
Original file line number Diff line number Diff line change
@@ -1,71 +1,74 @@
# LangServe Hub
# LangServe Templates

Packages that can be easily hosted by LangServe using the `langserve` cli.
Templates for a fully functioning app that can be hosted by LangServe.

## Using LangServe Hub
## Usage

You can install the `langservehub` CLI and use it as follows:
```bash
# install langservehub CLI
pip install --upgrade langservehub
To use, first install the LangChain CLI.

langservehub new my-app
cd my-app
```shell
pip install -U langchain-cli
```

poetry install
Then, install `langserve`:

# if you have problems with poe, use `poetry run poe ...` instead
```shell
pip install "langserve[all]"
```

# add the simple-pirate package
poe add --repo=pingpong-templates/hub simple-pirate
Next, create a new LangChain project:

# adding other GitHub repo packages, defaults to repo root
poe add --repo=hwchase17/chain-of-verification
```shell
langchain serve new my-app
```

# with a custom api mount point (defaults to `/{package_name}`)
poe add --repo=pingpong-templates/hub simple-translator --api_path=/my/custom/path/translator
This will create a new directory called `my-app` with two folders:

poe list
- `app`: This is where LangServe code will live
- `packages`: This is where your chains or agents will live

poe start
^C
To pull in an existing template as a package, you first need to go into your new project:

# remove packages by their api path:
poe remove my/custom/path/translator
```shell
cd my-app
```

## Creating New Packages
And you can the add a template as a project

You can also create new packages with the `langservehub package new` command

```bash
# starting from this directory in langserve-hub
langservehub package new simple-newpackage
```shell
langchain serve add $PROJECT_NAME
```

Now you can edit the chain in `simple-newpackage/simple_newpackage/chain.py` and put up a PR!

Your package will be usable as `poe add --repo=pingpong-templates/hub simple-newpackage` when it's merged in.
This will pull in the specified template into `packages/$PROJECT_NAME`

## Data Format
You then need to install this package so you can use it in the langserve app:

What makes these packages work?
```shell
pip install -e packages/$PROJECT_NAME
```

- Poetry
- pyproject.toml files
We install it with `-e` so that if we modify the template at all (which we likely will) the changes are updated.

### Installable Packages
In order to have LangServe use this project, you then need to modify `app/server.py`.
Specifically, you should add something like:

Everything is a Poetry package currently. This allows poetry to manage our dependencies for us :).
```python
from fastapi import FastAPI
from langserve import add_routes
# This depends on the structure of the package you install
from my_project import chain

In addition to normal keys in the `pyproject.toml` file, you'll notice an additional `tool.langserve` key ([link](https://github.com/langchain-ai/langserve-hub/blob/main/simple/pirate/pyproject.toml#L13-L15)).
app = FastAPI()

This allows us to identify which module and attribute to import as the chain/runnable for the langserve `add_routes` call.
add_routes(app, chain)
```

### Apps (with installed langserve packages)
You can then spin up production-ready endpoints, along with a playground, by running:

Let's say you add the pirate package with `poe add --repo=pingpong-templates/hub simple-pirate`.
```shell
python app/server.py
```

First this downloads the simple-pirate package to pirate
## Adding a template

Then this adds a `poetry` path dependency, which gets picked up from `add_package_routes`.
See [here](CONTRIBUTING.md)

0 comments on commit 8ec7aad

Please sign in to comment.