Only a quickstart manual is available while the API is under development.
◆ About Tokens
Each model
tokenizes the input context using the specific dictionary.
For ordinary Japanese text, the rule of thumb is 1.5 characters per token.
Context tokens + Tokens to generate must be the model's maximum sequence length or below.
If you need to calculate how many tokens you send, Tokenizer is available [
here ].
Follow this section for using the text completion API (non-chat or freeform).
Python
php
cURL
import json, requests
auth_key = 'Your API key';
api_server_url = 'https://api.tringpt.com/'
headers = {'Authorization': 'Bearer {}'.format(auth_key)}
send_body = {
'text': "これはテストです",
'length': 15, # 出力するトークン数 出力が重いと途中で強制終了する場合があります
'temperature': 0.7, # ランダム度(0~2.5) 語彙が単調に感じる場合は上げてみてください
'top_p': 0.7, # Top Pサンプリング(0.01~1.0) 1より低いほど確率の低いトークンが除外される。極端に関係のない語彙が出ることを防ぎます
'rep_pen': 1.15, # 繰り返しペナルティ(1.0~2.0) 値が高すぎると出力が突飛になりすぎる可能性があります
'model': 'spiko', # デフォルトはsupertrin_highpresです。
# spiko / spiko_solid / spiko_max / derrida_03 / damsel_ray / supertrin_highpres / supertrin_maxpresが有効です。
#
# 'top_k': 140, # Top Kサンプリング(1~500) 上位nトークンのみを採用する
# 'top_a': 0.1, # Top Aサンプリング(0~1.0) 確率が(一番確率の高いトークン^2 * Top A)以下のトークンを除外
# 'min_p': 0.0, # Min Pサンプリング(0~1.0)
# 'tailfree': 1.0, # Tail-freeサンプリング(0.01~1.0) 1より低いほど確率の低いトークンが除外される。やみおとめのみ対応
# 'rep_pen_range': 1024, # 繰り返しペナルティを適用する範囲(0~2048)
# 'rep_pen_slope': 3.00, # 繰り返しペナルティの傾斜(0.01~10)
# 'rep_pen_pres': None, # コンテキスト中に単語が出た回数に依存する繰り返しペナルティ(0~100)
# 'typical_p': 1.0, # Typicalサンプリング(0.01~1.0)
# 'badwords': '<unk>', # 禁止ワードを設定します。<<|>>で区切ります。
# 'logit_bias': '【<<|>>_', # 個別のトークンの出現率を調整します。<<|>>で区切ります。
# 'logit_bias_values': '-2.0|-0.1', # 確率はlogit spaceに作用します。基本的には-5から+5程度が適正です。|で区切ります。設定がおかしいとエラーになります
# 'stoptokens': 'トマト<<|>>りんご', # このシーケンスが生成されると強制的に出力が打ち切られます。<<|>>で区切ります。
}
response = requests.post(api_server_url+'/api', headers=headers, json=send_body)
response_array = json.loads(response.text)
result = response_array['data'][0]
$auth_key = 'Your API key';
$api_server_url = 'https://api.tringpt.com/';
$headers = [
'Content-type: application/json',
'Authorization: Bearer '.$auth_key
];
$body = [
'text' => "これはテストです",
'length' => 15, // 出力するトークン数(1~2048) 出力が重いと途中で強制終了する場合があります
'temperature' => 0.7, // ランダム度(0~2.5) 語彙が単調に感じる場合は上げてみてください
'top_p' => 0.7, // Top Pサンプリング(0.01~1.0) 1より低いほど確率の低いトークンが除外される。極端に関係のない語彙が出ることを防ぎます
'rep_pen' => 1.15, // 繰り返しペナルティ(1.0~2.0) 値が高すぎると出力が突飛になりすぎる可能性があります
'model' => 'spiko', // デフォルトはsupertrin_highpresです
// spiko / spiko_solid / spiko_max / derrida_03 / damsel_ray / supertrin_highpres / supertrin_maxpresが有効です
//
// 'top_k' => 140, // Top Kサンプリング(1~500) 上位nトークンのみを採用する
// 'top_a' => 0.1, // Top Aサンプリング(0~1.0) 確率が(一番確率の高いトークン^2 * Top A)以下のトークンを除外
// 'min_p' => 0.0, // Min Pサンプリング(0~1.0)
// 'rep_pen_range' => 1024, // 繰り返しペナルティを適用する範囲(0~2048)
// 'rep_pen_slope' => 3.00, // 繰り返しペナルティの傾斜(0.01~10)
// 'rep_pen_pres' => null, // コンテキスト中に単語が出た回数に依存する繰り返しペナルティ(0~100)
// 'typical_p': 1.0, // Typicalサンプリング(0.01~1.0)
// 'badwords' => '<unk>', // 禁止ワードを設定します。<<|>>で区切ります。
// 'logit_bias' => '【<<|>>_', // 個別のトークンの出現率を調整します。<<|>>で区切ります。
// 'logit_bias_values' => '-2.0|-0.1', // 確率はlogit spaceに作用します。基本的には-5から+5程度が適正です。|で区切ります。設定がおかしいとエラーになります
// 'stoptokens' => 'トマト<<|>>りんご', // このシーケンスが生成されると強制的に出力が打ち切られます。<<|>>で区切ります。
];
$context = stream_context_create([
'http' => [
'method' => 'POST',
'header' => implode("\r\n", $headers),
'content' => json_encode($body),
]
]);
$json = file_get_contents($api_server_url.'/api', false, $context);
$array = json_decode($json,true);
$result = $array['data'][0];
curl -X POST 'https://api.tringpt.com/api' \
-H 'Authorization: Bearer Your API key' \
-H 'Content-Type: application/json' \
-d '{
"text": "これはテストです",
"length": 15,
"temperature": 0.7,
"top_p": 0.7,
"rep_pen": 1.15,
"model": "spiko"
}'
Follow this section for using OpenAI-compatible chat/messages API. This API can be used with any OpenAI API-compatible client.
Python
php
cURL
import json, requests
auth_key = 'Your API key';
api_server_url = 'https://api.tringpt.com/'
headers = {'Authorization': 'Bearer {}'.format(auth_key)}
messages_test = [
{'role': 'user', 'content': 'こんにちは!'},
{'role': 'assistant', 'content': '私はとりんさま!今日はどうしましたか?'},
{'role': 'user', 'content': 'どうも。最近ワーズはどうしてるの?'}
]
send_body = {
'model': 'spiko_solid', # デフォルトはsupertrin_highpresです。
'messages': messages_test,
'max_tokens': 15, # 出力するトークン数 出力が重いと途中で強制終了する場合があります
'temperature': 0.7, # ランダム度(0~2.5) 語彙が単調に感じる場合は上げてみてください
'top_p': 0.7, # Top Pサンプリング(0.01~1.0) 1より低いほど確率の低いトークンが除外される。極端に関係のない語彙が出ることを防ぎます
'repetition_penalty': 1.15, # 繰り返しペナルティ(1.0~2.0) 値が高すぎると出力が突飛になりすぎる可能性があります
# 'frequency_penalty': 0, # コンテキスト中に単語が出た回数に依存する繰り返しペナルティ(0~2)
# 'presence_penalty': 0, # コンテキスト中に単語が1回でも既出かどうかに依存する繰り返しペナルティ(0~2)
# 'top_k': 140, # Top Kサンプリング(1~500) 上位nトークンのみを採用する
# 'top_a': 0.1, # Top Aサンプリング(0~1.0) 確率が(一番確率の高いトークン^2 * Top A)以下のトークンを除外
# 'min_p': 0.0, # Min Pサンプリング(0~1.0)
# 'tailfree': 1.0, # Tail-freeサンプリング(0.01~1.0) 1より低いほど確率の低いトークンが除外される。やみおとめのみ対応
# 'typical_p': 1.0, # Typicalサンプリング(0.01~1.0)
# 'badwords': '<unk>', # 禁止ワードを設定します。<<|>>で区切ります。
# 'logit_bias': '【<<|>>_', # 個別のトークンの出現率を調整します。<<|>>で区切ります。
# 'logit_bias_values': '-2.0|-0.1', # 確率はlogit spaceに作用します。基本的には-5から+5程度が適正です。|で区切ります。設定がおかしいとエラーになります
# 'stoptokens': 'トマト<<|>>りんご', # このシーケンスが生成されると強制的に出力が打ち切られます。<<|>>で区切ります。
}
response = requests.post(api_server_url+'/api', headers=headers, json=send_body)
response_array = json.loads(response.text)
result = response_array['data'][0]
$auth_key = 'Your API key';
$api_server_url = 'https://api.tringpt.com/';
$array_messages_test[0]['role'] = "user";
$array_messages_test[0]['content'] = "こんにちは!";
$array_messages_test[1]['role'] = "assistant";
$array_messages_test[1]['content'] = "私はとりんさま!今日はどうしましたか?";
$array_messages_test[2]['role'] = "user";
$array_messages_test[2]['content'] = "で、ワーズはどうしたの?";
$headers = [
'Content-type: application/json',
'Authorization: Bearer '.$auth_key
];
$body = [
'model' => 'spiko', // デフォルトはsupertrin_highpresです
'messages' => array_messages_test,
'max_tokens' => 15, // 出力するトークン数(1~2048) 出力が重いと途中で強制終了する場合があります
'temperature' => 0.7, // ランダム度(0~2.5) 語彙が単調に感じる場合は上げてみてください
'top_p' => 0.7, // Top Pサンプリング(0.01~1.0) 1より低いほど確率の低いトークンが除外される。極端に関係のない語彙が出ることを防ぎます
'repetition_penalty' => 1.15, // 繰り返しペナルティ(1.0~2.0) 値が高すぎると出力が突飛になりすぎる可能性があります
// 'frequency_penalty' => 0, // コンテキスト中に単語が出た回数に依存する繰り返しペナルティ(0~2)
// 'presence_penalty' => 0, // コンテキスト中に単語が1回でも既出かどうかに依存する繰り返しペナルティ(0~2)
// 'top_k' => 140, // Top Kサンプリング(1~500) 上位nトークンのみを採用する
// 'top_a' => 0.1, // Top Aサンプリング(0~1.0) 確率が(一番確率の高いトークン^2 * Top A)以下のトークンを除外
// 'min_p' => 0.0, // Min Pサンプリング(0~1.0)
// 'rep_pen_range' => 1024, // 繰り返しペナルティを適用する範囲(0~2048)
// 'rep_pen_slope' => 3.00, // 繰り返しペナルティの傾斜(0.01~10)
// 'typical_p': 1.0, // Typicalサンプリング(0.01~1.0)
// 'badwords' => '<unk>', // 禁止ワードを設定します。<<|>>で区切ります。
// 'logit_bias' => '【<<|>>_', // 個別のトークンの出現率を調整します。<<|>>で区切ります。
// 'logit_bias_values' => '-2.0|-0.1', // 確率はlogit spaceに作用します。基本的には-5から+5程度が適正です。|で区切ります。設定がおかしいとエラーになります
// 'stoptokens' => 'トマト<<|>>りんご', // このシーケンスが生成されると強制的に出力が打ち切られます。<<|>>で区切ります。
];
$context = stream_context_create([
'http' => [
'method' => 'POST',
'header' => implode("\r\n", $headers),
'content' => json_encode($body),
]
]);
$json = file_get_contents($api_server_url.'/api', false, $context);
$array = json_decode($json,true);
$result = $array['data'][0];
curl -X POST 'https://api.tringpt.com/api' \
-H 'Authorization: Bearer Your API key' \
-H 'Content-Type: application/json' \
-d '{
"model": "spiko"
"messages": [{"role": "user", "content": "こんにちは!"}],
"max_tokens": 15,
"temperature": 0.7,
"top_p": 0.7,
"repetition_penalty": 1.15,
}'
Here, we explain how to use Python +
Transformers library or C++ and
SentencePiece for using the Trin tokenizer.
Python
C++
## コマンドラインで必要なライブラリのインストールを行います
pip install transformers sentencepiece
## トークナイザを読み込み、テキストのトークン数を表示
from transformers import T5Tokenizer
tokenizer = T5Tokenizer.from_pretrained('naclbit/trin_tokenizer_v3')
txt = 'これはテストです'
output = tokenizer.encode(txt, add_special_tokens=False)
num_tokens = len(output)
print(str(num_tokens) + ' tokens')
## トークンがどのように分割されているか表示する
tokens = ""
for temp in output:
tokens = tokens + '[' + tokenizer.decode(temp) + '] '
print(tokens)
## 成功すればこのように表示されます↓
## 3 tokens
## [これは] [テスト] [です]
// https://github.com/google/sentencepiece/blob/master/doc/api.md を参照
// まずローカルにTrin-Tokenizer V3のspiece.modelを設置してください
#include <sentencepiece_processor.h>
sentencepiece::SentencePieceProcessor processor;
const auto status = processor.Load("trin_tokenizer_v3/spiece.model");
if (!status.ok()) {
std::cerr << status.ToString() << std::endl;
// error
}
// テキストのトークン数を表示
std::vector<int> ids;
processor.Encode("これはテストです", &ids);
std::cout << ids.size() << " tokens" << std::endl;
// トークンがどのように分割されているか表示する
std::vector<std::string> pieces;
processor.Encode("これはテストです", &pieces);
for (const std::string &token : pieces) {
std::cout << "[" << token << "] " << std::endl;
}
Basic Use
Advanced
Think/Reasoning
## 指示文は[#ユーザー][#アシスタント]のブロックで書きます。
[#ユーザー]
りんご1個が100円のとき、りんご4個を買うといくらになりますか?
[#アシスタント]
1個あたりの価格が100円なので、4個の合計金額は4 × 100 = 400円になります。
従って、りんご4個を買うと400円になります。
## 本文を与えてから質問を投げることで、本文中の知識や前提条件に対応した答えを得ることができます。
それからしばらくして、ようやく晩御飯ができた。吾輩は二人を呼んでくるようにハチに頼んでから、テーブルの上に皿を並べ始めた。
二人ともやって来たのだが、相変わらず気まずい雰囲気が漂っている。そんな中で黙々と箸を口に運ぶさまは、まるで通夜か何かのようだった。
吾輩は前足についたご飯粒を舐め取ると、さりげなく目の前のもう一人の自分の様子をうかがった
。向こうも同じことを思ったらしく、視線がぶつかった。その瞬間、お互いに慌てて目を逸らす。
気まずい沈黙が流れた後、最初に口を開いたのは、意外にももう一人の小津の方だった。
「……あのさ、さっきはちょっと言い過ぎたよ」
なんと、向こうから謝ってきたのだ。吾輩は驚いて、彼の顔を見つめた。
「別に俺も手伝いたくないわけじゃないんだ。ただちょっと面倒くさかっただけでさ」
彼はばつが悪そうに頭を掻いた。
「でもまあ、これからはちゃんと手伝うからさ」
そう言うと、照れくさそうに笑った。吾輩は思わず感動してしまいそうになったが、何とかこらえて平静を装うことにした。
「そうか、それは助かる」
そっけなく答えると、吾輩は再び食事に戻った。見ると、もう一人の小津の方も、すっかり機嫌を直したようで、ガツガツと飯を食っている。
その様子を観察していると、不意に彼が顔を上げたので、目が合った。そして、どちらからともなく笑い出すのだった。
☆☆☆
その夜、吾輩は夢を見た。夢の中で、吾輩は大きな猫になっていた。
あたりを見回すと、そこは一面の荒野であった。空はどんよりと曇り、今にも雨が降り出しそうだ。
辺りには草一本生えておらず、荒涼としている。
時折吹きつける風は冷たく、身を切るような厳しさだ。
そんな寂しい景色の中を一匹の黒猫が歩いている。吾輩である。猫になった夢を見ているのだ。
我ながら変な夢を見るものだと思いながらも、吾輩は猫の視点で辺りの様子を観察し続けた。
[#ユーザー]
小津(吾輩)はどうして夢の中で黒猫になっていたの?
[#アシスタント]
夢の中の小津が黒猫になっていた理由は、彼の深層心理にある不安や恐れを反映したものです。
小津は自分が周りとは違う存在であることや、いつか孤独になってしまうのではないかという恐怖を抱えており、
自分自身を猫の姿に投影することで、そのような心細さから逃れようとしていたのです。
## 作品のタイトルを考えさせてみる
[#ユーザー]
この作品にタイトルをつけてください。
[#アシスタント]
『猫は箱の中で夢を見る』
## [#アシスタント]ブロックの直後に<think>を挟むことによって、reasoning/thinkingが発動します。
## 明示的に指示しなくても、場合によっては<think>が出力される場合もあります。
## 出力された内容をユーザーに表示する際は、<think>~</think>の内容を適時トリムするなどしてください。
## プロンプトの例:
[#ユーザー]
指示
[#アシスタント]
<think>