OpenAI API クライアント#

はじめに

Tensorflow サービング API と KServe API フロントエンドに加えて、モデルサーバーには、REST 入力のデシリアライズと出力のシリアライズを MediaPipe グラフに委任するオプションが追加されました。カスタム計算機は、サーバーから送信されたイベントに基づくストリーミングを含む、あらゆる形式の REST API を実装できます。

このようにして、OpenAI 互換のエンドポイント・チャット/補完のプレビューを導入します。実装にはさらに多くのエンドポイントが計画されています。

Python クライアント#

Python ベースのクライアント・アプリケーションを作成する場合、OpenAI クライアント・ライブラリー (openai) を使用できます。

あるいは、curl コマンドまたは requests python ライブラリーのみを使用することもできます。

プロンプトとともに、チャット補完エンドポイントについてはここで説明されているパラメーター、補完エンドポイントについてはここで説明されているパラメーターを送信できます。

注意: OpenAI Python クライアントは、限られたパラメーターのリストをサポートします。OpenVINO モデルサーバーでネイティブであるものは、汎用コンテナ・パラメーター extra_body 内で渡すことができます。以下は top_k 値をカプセル化する例です。

response = client.chat.completions.create( 
    model=model, 
    messages=[{"role": "user", "content": "hello"}], 
    max_tokens=100, 
    extra_body={"top_k" : 1}, 
    stream=False 
)

パッケージのインストール#

pip3 install openai 
pip3 install requests

単項呼び出しによるチャット補完のリクエスト#

from openai import OpenAI 
client = OpenAI(base_url="http://localhost:8000/v3", api_key="unused") 
response = client.chat.completions.create( 
    model="meta-llama/Llama-2-7b-chat-hf", 
    messages=[{"role": "user", "content": "Say this is a test"}], 
    stream=False, 
) 

print(response.choices[0].message)
import requests 
payload = {"model": "meta-llama/Llama-2-7b-chat-hf", "messages": [ {"role": "user","content": "Say this is a test" }]} 
headers = {"Content-Type": "application/json", "Authorization": "not used"} 
response = requests.post("http://localhost:8000/v3/chat/completions", json=payload, headers=headers) 
print(response.text)
curl http://localhost:8000/v3/chat/completions \ 
    -H "Content-Type: application/json" \ 
    -d '{"model": "meta-llama/Llama-2-7b-chat-hf", "messages": [ {"role": "user","content": "Say this is a test" }]}'

単項呼び出しによる補完のリクエスト#

from openai import OpenAI 
client = OpenAI(base_url="http://localhost:8000/v3", api_key="unused") 
response = client.completions.create( 
    model="meta-llama/Llama-2-7b", prompt="Say this is a test", 
    stream=False, 
) 

print(response.choices[0].text)
import requests 
payload = {"model": "meta-llama/Llama-2-7b", "prompt": "Say this is a test"} 
headers = {"Content-Type": "application/json", "Authorization": "not used"} 
response = requests.post("http://localhost:8000/v3/completions", json=payload, headers=headers) 
print(response.text)
curl http://localhost:8000/v3/completions \ 
    -H "Content-Type: application/json" \ 
    -d '{"model": "meta-llama/Llama-2-7b", "prompt": "Say this is a test"}'

ストリーミングによるチャット補完のリクエスト#

from openai import OpenAI 
client = OpenAI( 
    base_url="http://localhost:8000/v3", 
    api_key="unused" 
) 

stream = client.chat.completions.create( 
    model="meta-llama/Llama-2-7b-chat-hf", 
    messages=[{"role": "user", "content": "Say this is a test"}], 
    stream=True, 
) 
for chunk in stream: 
    if chunk.choices[0].delta.content is not None: 
        print(chunk.choices[0].delta.content, end="")

ストリーミングによる補完のリクエスト#

from openai import OpenAI 
client = OpenAI( 
    base_url="http://localhost:8000/v3", 
    api_key="unused" 
) 

stream = client.completions.create( 
    model="meta-llama/Llama-2-7b", 
    prompt="Say this is a test", 
    stream=True, 
) 
for chunk in stream: 
    if chunk.choices[0].text is not None: 
        print(chunk.choices[0].text, end="")