From fc540327e8fe5121c2c21207e63c6717e647cbab Mon Sep 17 00:00:00 2001 From: Judd Date: Tue, 26 Nov 2024 12:28:20 +0800 Subject: [PATCH] `main.nim` improved and used as default app. --- README.md | 2 +- README_ja.md | 13 ------------- README_zh.md | 2 +- bindings/main.nim | 35 +++++++++++++++++++++++++---------- docs/quick_start.md | 4 ++-- images/demo.gif | Bin 0 -> 406534 bytes 6 files changed, 29 insertions(+), 27 deletions(-) create mode 100644 images/demo.gif diff --git a/README.md b/README.md index 32e60ad..eed2b85 100644 --- a/README.md +++ b/README.md @@ -42,7 +42,7 @@ pure C++ implementation based on [@ggerganov](https://github.com/ggerganov)'s [g ## Quick Start -As simple as `python chatllm.py -i -m :model_id`. [Check it out](./docs/quick_start.md). +As simple as `main -i -m :model_id`. [Check it out](./docs/quick_start.md). ## Usage diff --git a/README_ja.md b/README_ja.md index fcb36c8..0e5d00e 100644 --- a/README_ja.md +++ b/README_ja.md @@ -10,19 +10,6 @@ | [サポートされているモデル](./docs/models.md) | [量子化モデルのダウンロード](./docs/quick_start.md#download-quantized-models) | -**新着情報:** - -* 2024-11-01: Granite, [生成ステアリング](./docs/fun.md#generation-steering) -* 2024-09-29: LlaMA 3.2 -* 2024-09-22: Qwen 2.5 -* 2024-09-13: OLMoE -* 2024-09-11: MiniCPM3 -* 2024-07-14: [ggml 更新](https://github.com/ggerganov/ggml/tree/3e7e5e26f90fecf4f7c2808df7d94454630b219c) -* 2024-06-15: [ツール呼び出し](./docs/tool_calling.md) -* 2024-05-29: [ggml](https://github.com/ggerganov/ggml) はサブモジュールではなくフォークされました -* 2024-05-14: [OpenAI API](./docs/binding.md#openai-compatible-api), CodeGemma Base & Instruct 対応 -* 2024-05-08: [レイヤーシャッフル](./docs/fun.md#layer-shuffling) - ## 特徴 * [x] int4/int8 量子化、最適化された KV キャッシュ、並列計算によるメモリ効率の高い CPU 推論の加速 diff --git a/README_zh.md b/README_zh.md index e781341..3418419 100644 --- a/README_zh.md +++ b/README_zh.md @@ -26,7 +26,7 @@ ## 快速开始 -只需要简单一行 `python chatllm.py -i -m :model_id`. 查看 [详情](./docs/quick_start.md). +只需要简单一行 `main -i -m :model_id`. 查看 [详情](./docs/quick_start.md). ## 使用方法 diff --git a/bindings/main.nim b/bindings/main.nim index 63c7cfe..36bd9a4 100644 --- a/bindings/main.nim +++ b/bindings/main.nim @@ -147,7 +147,17 @@ var storage_dir: string = "../quantized" var ht = highlighter(line_acc: "", lang: langNone) let chat = chatllm_create() +# related front end parameters are ignored by `libchatllm` +var prompt: string = "hello" +var interactive: bool = false + for i in 1 .. paramCount(): + if paramStr(i) in ["-i", "--interactive"]: + interactive = true + + if (i > 1) and (paramStr(i - 1) in ["-p", "--prompt"]): + prompt = paramStr(i) + if (i > 1) and (paramStr(i - 1) in candidates) and paramStr(i).startsWith(":"): var m = paramStr(i) m = m[1..>> chatllm_start error: ", r quit(r) -while true: - stdout.write("You > ") - let input = stdin.readLine() - if input.isEmptyOrWhitespace(): continue - - stdout.write("A.I. > ") - let r = chatllm_user_input(chat, input.cstring) - if r != 0: - echo ">>> chatllm_user_input error: ", r - break +if interactive: + while true: + stdout.write("You > ") + let input = stdin.readLine() + if input.isEmptyOrWhitespace(): continue + + stdout.write("A.I. > ") + let r = chatllm_user_input(chat, input.cstring) + if r != 0: + echo ">>> chatllm_user_input error: ", r + break +else: + discard chatllm_user_input(chat, prompt.cstring) + +chatllm_show_statistics(chat) \ No newline at end of file diff --git a/docs/quick_start.md b/docs/quick_start.md index f46192e..be12b25 100644 --- a/docs/quick_start.md +++ b/docs/quick_start.md @@ -3,8 +3,8 @@ For Windows users, the easies way is to download a release, extract it, and start chatting: ``` -python chatllm.py -i -m :qwen2:0.5b -downloading qwen2:0.5b +main -i -m :qwen2.5:0.5b +Downloading qwen2:0.5b |████████████████████████████████████████████████████████████| 100.0% ________ __ __ __ __ ___ (通义千问) / ____/ /_ ____ _/ /_/ / / / / |/ /_________ ____ diff --git a/images/demo.gif b/images/demo.gif new file mode 100644 index 0000000000000000000000000000000000000000..ccdeca4dbde8eb24c774d70f13b4f80fbd14b4d2 GIT binary patch literal 406534 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