Skip to content

Commit

Permalink
pydantic fixes and CI fix
Browse files Browse the repository at this point in the history
  • Loading branch information
Крестников Константин Николаевич authored and Крестников Константин Николаевич committed Dec 4, 2023
2 parents db2d3e5 + 798739c commit d36e4f8
Show file tree
Hide file tree
Showing 12 changed files with 756 additions and 133 deletions.
2 changes: 1 addition & 1 deletion .clabot
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
{
"contributors": ["eyurtsev", "hwchase17", "nfcampos", "efriis", "jacoblee93", "dqbd", "kreneskyp", "adarsh-jha-dev", "harris", "baskaryan", "hinthornw", "bracesproul", "jakerachleff"],
"contributors": ["eyurtsev", "hwchase17", "nfcampos", "efriis", "jacoblee93", "dqbd", "kreneskyp", "adarsh-jha-dev", "harris", "baskaryan", "hinthornw", "bracesproul", "jakerachleff", "craigsdennis", "anhi"],
"message": "Thank you for your pull request and welcome to our community. We require contributors to sign our Contributor License Agreement, and we don't seem to have the username {{usersWithoutCLA}} on file. In order for us to review and merge your code, please complete the Individual Contributor License Agreement here https://forms.gle/Ljhqvt9Gdi1N385W6 .\n\nThis process is done manually on our side, so after signing the form one of the maintainers will add you to the contributors list.\n\nFor more details about why we have a CLA and other contribution guidelines please see: https://github.com/langchain-ai/langserve/blob/main/CONTRIBUTING.md."
}
2 changes: 1 addition & 1 deletion .github/workflows/_lint.yml
Original file line number Diff line number Diff line change
Expand Up @@ -99,7 +99,7 @@ jobs:
shell: bash
working-directory: ${{ inputs.working-directory }}
run: |
poetry lock --check
poetry check --lock
- name: Install dependencies
# Also installs dev/lint/test/typing dependencies, to ensure we have
Expand Down
2 changes: 1 addition & 1 deletion Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ lint_diff format_diff: PYTHON_FILES=$(shell git diff --relative=. --name-only --

lint lint_diff:
poetry run ruff .
poetry run ruff format $(PYTHON_FILES) --check
poetry run ruff format $(PYTHON_FILES) --diff

format format_diff:
poetry run ruff format $(PYTHON_FILES)
Expand Down
70 changes: 49 additions & 21 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,18 @@
## GigaChain CLI 🛠️

Для быстрой настройки проекта GigaChain используйте актуальную версию GigaChain CLI:
* Vulnerability in Versions 0.0.13 - 0.0.15 -- playground endpoint allows accessing arbitrary files on server. [Resolved in 0.0.16](https://github.com/langchain-ai/langserve/pull/98).

## Установка

Для клиента и сервера

```bash
pip install "gigaserve[all]"
```

или `pip install "gigaserve[client]"` для установки клиента и `pip gigaserve "langserve[server]"` для установки сервера.


```sh
gigachain app new ../path/to/directory
Expand Down Expand Up @@ -89,7 +101,7 @@ prompt = ChatPromptTemplate.from_template("расскажи шутку о {topic
add_routes(
app,
prompt | model,
path="/chain",
path="/joke",
)

if __name__ == "__main__":
Expand All @@ -102,12 +114,14 @@ if __name__ == "__main__":

Сгенерированная OpenAPI-документация к серверу, развернутому с помощью предыдущего примера, доступна по адресу:

> ⚠️ If using pydantic v2, docs will not be generated for invoke/batch/stream/stream_log. See [Pydantic](#pydantic) section below for more details.
```sh
curl localhost:8000/docs
```

> [!NOTE]
> Обращение к адресу `localhost:8000` будет возвращать ошибку 404, пока вы не определите `@app.get("/")`.
> ⚠️ Обращение к адресу `localhost:8000` будет возвращать ошибку 404 **by design**, пока вы не определите `@app.get("/")`.
### Клиент

Expand All @@ -121,7 +135,7 @@ from langserve import RemoteRunnable

openai = RemoteRunnable("http://localhost:8000/openai/")
anthropic = RemoteRunnable("http://localhost:8000/anthropic/")
joke_chain = RemoteRunnable("http://localhost:8000/chain/")
joke_chain = RemoteRunnable("http://localhost:8000/joke/")

# Синхронный вызов

Expand Down Expand Up @@ -158,7 +172,7 @@ chain.batch([{ "topic": "попугаи" }, { "topic": "кошки" }])
import { RemoteRunnable } from "langchain/runnables/remote";

const chain = new RemoteRunnable({
url: `http://localhost:8000/chain/invoke/`,
url: `http://localhost:8000/joke/`,
});
const result = await chain.invoke({
topic: "кошки",
Expand All @@ -170,7 +184,7 @@ const result = await chain.invoke({
```python
import requests
response = requests.post(
"http://localhost:8000/chain/invoke/",
"http://localhost:8000/joke/invoke/",
json={'input': {'topic': 'кошки'}}
)
response.json()
Expand All @@ -179,7 +193,7 @@ response.json()
Использование cURL:

```sh
curl --location --request POST 'http://localhost:8000/chain/invoke/' \
curl --location --request POST 'http://localhost:8000/joke/invoke/' \
--header 'Content-Type: application/json' \
--data-raw '{
"input": {
Expand Down Expand Up @@ -211,33 +225,37 @@ add_routes(
- `GET /my_runnable/output_schema` - получить json-схему выходных данных runnable-интерфейса;
- `GET /my_runnable/config_schema` - получить json-схему параметров конфигурации runnable-интерфейса;

## Интерактивная страница
## Playground

Интерактивная страница доступна по адресу `/my_runnable/playground`. На ней представлен простой интерфейс, который позволяет настроить параметры runnable-интерфейса и сделать запрос к нему с потоковым выводом и демонстрацией промежуточных шагов.
Playground доступен по адресу `/my_runnable/playground`. На ней представлен простой интерфейс, который позволяет настроить параметры runnable-интерфейса и сделать запрос к нему с потоковым выводом и демонстрацией промежуточных шагов.

## Установка
Эти адреса соответствуют [LangChain Expression Language interface (LCEL)](https://python.langchain.com/docs/expression_language/interface) -- обратитесь к документации за более подробными деталями

Для одновременной установки сервера и клиента используйте команду:
<p align="center">
<img src="https://github.com/langchain-ai/langserve/assets/3205522/5ca56e29-f1bb-40f4-84b5-15916384a276" width="50%"/>
</p>

```sh
pip install "gigaserve[all]"
```
### Виджеты

Для отдельной установки сервера используйте команду:
Playground поддерживает [виджеты](#playground-widgets) и может использоваться для тестирования ваших цепочек с разными входными данными.

```sh
pip install "gigaserve[server]"
```
# In addition, for configurable runnables, the playground will allow you to configure the runnable and share a link with the configuration:
В завершении, для настраиваемых цепочек, playground позволяет настроить цепочку и поделиться ссылкой на конфигурацию:

### Sharing

<p align="center">
<img src="https://github.com/langchain-ai/langserve/assets/3205522/86ce9c59-f8e4-4d08-9fa3-62030e0f521d" width="50%"/>
</p>

Для отдельной установки клиента используйте команду:

```sh
pip install "gigaserve[client]"
```

## Работа со устаревшими цепочками
## Работа с классическими цепочками

GigaServe работает как с runnable-интерфейсами(написанным с помощью constructed via [LangChain Expression Language](https://python.langchain.com/docs/expression_language/)), так и с устаревшими цепочками (посредством наследования от `Chain`). Но следует учиывать, что некоторые входные схемы для устаревших цепочек могут быть некорректными или неполными и могут вызывать ошибки. Это можно предотвратить, если обновить аттрибут `input_schema` таких цепочек в LangChain.
GigaServe работает как с runnable-интерфейсами(написанным с помощью constructed via [LangChain Expression Language](https://python.langchain.com/docs/expression_language/)), так и с классическими цепочками (посредством наследования от `Chain`). Но следует учиывать, что некоторые входные схемы для устаревших цепочек могут быть некорректными или неполными и могут вызывать ошибки. Это можно предотвратить, если обновить аттрибут `input_schema` таких цепочек в LangChain.

## Добавление аутентификации

Expand All @@ -264,6 +282,12 @@ GigaServe поддерживает Pydantic 2 с некоторыми огран

## Дополнительные возможности

### Handling Authentication

Если вам нужна дополнительная аутентификация для вашего сервер,
пожалуйста обратитесь к документации FastAPI [security documentation](https://fastapi.tiangolo.com/tutorial/security/)
и [middleware documentation](https://fastapi.tiangolo.com/tutorial/middleware/).

### Работа с файлами

Обработка файлов это типичная задача для больших языковых моделей.
Expand Down Expand Up @@ -395,4 +419,8 @@ class FileProcessingRequest(CustomUserType):
```

> [!NOTE]
> [Подробный пример загрузки файла](https://github.com/ai-forever/gigaserve/tree/main/examples/file_processing).
> [Подробный пример загрузки файла](https://github.com/ai-forever/gigaserve/tree/main/examples/file_processing).
<p align="center">
<img src="https://github.com/langchain-ai/langserve/assets/3205522/52199e46-9464-4c2e-8be8-222250e08c3f" width="50%"/>
</p>
5 changes: 1 addition & 4 deletions examples/configurable_chain/server.py
Original file line number Diff line number Diff line change
Expand Up @@ -59,9 +59,7 @@
)
chain = prompt | model | StrOutputParser()

# Add routes requires you to specify which config keys are accepted
# specifically, you must accept `configurable` as a config key.
add_routes(app, chain, path="/configurable_temp", config_keys=["configurable"])
add_routes(app, chain, path="/configurable_temp")


###############################################################################
Expand Down Expand Up @@ -96,7 +94,6 @@ def fetch_api_key_from_header(config: Dict[str, Any], req: Request) -> Dict[str,
app,
dynamic_auth_chain,
path="/auth_from_header",
config_keys=["configurable"],
per_req_config_modifier=fetch_api_key_from_header,
)

Expand Down
Loading

0 comments on commit d36e4f8

Please sign in to comment.