見出し画像

Gradioの`ChatInterface`こと始め その6:Llama-cpp-python編

Terminalで、c4ai-command-r-plus-104b-iq2_xxs.gguff を走らせた記事を書きましたが、やっぱりインターフェースでやり取りをしたいと思って、Gradioを用いてみました。

まずは、llama-cpp-pythonを以下でアップデート。

pip install -U llama_cpp_python 

Successfully built llama_cpp_python
Installing collected packages: llama_cpp_python
Attempting uninstall: llama_cpp_python
Found existing installation: llama_cpp_python 0.2.58
Uninstalling llama_cpp_python-0.2.58:
Successfully uninstalled llama_cpp_python-0.2.58
Successfully installed llama_cpp_python-0.2.61

これで、⌘R-Plusが使えるようになるはずです。

前に使ったスクリプトをちょこちょこと弄って、以下のスクリプトが動くようになりました。

今回の特徴は、AutoTokenizerモジュールを取り込んで、chat-templateをモデルから取り込んで変換することにしたことです。

import time
import gradio as gr
from llama_cpp import Llama
from transformers import AutoTokenizer


llm = Llama(model_path = "ここはモデルのパス名/ggml-c4ai-command-r-plus-104b-iq2_xxs.gguf", n_gpu_layers= -1, n_ctx=2048, verbose = False)

model_id = "CohereForAI/c4ai-command-r-plus"
tokenizer = AutoTokenizer.from_pretrained(model_id)

def predict(message, history, token):
    prompt = []

    for human, assistant in history:
        prompt.append({'role': 'user', 'content': human})
        prompt.append({'role': 'assistant', 'content': assistant})
        
    prompt.append({'role': 'user', 'content': message})
    inputs = tokenizer.apply_chat_template(prompt,
                                           tokenize=False,
                                           add_generation_prompt=True)
    
    full_prompt = inputs
    #print  (f"入力される最終プロンプトはこんな感じ:\n{full_prompt}")
    output = llm(full_prompt, max_tokens=token, stop=["<|END_OF_TURN_TOKEN|>"], echo=False,)
    return(output['choices'][0]['text'])

demo = gr.ChatInterface(predict, 
    title="Llama.cpp-python-sample",
    description="",
    additional_inputs=[
        gr.Slider(100, 1024, value=512, label="Tokens")
                        ]
                       )

if __name__ == "__main__":
    demo .queue().launch()

llama.cpp-pythonでは、temperatureの設定の仕方が私にはわからなかったので、tokensの調整スライダーだけ残してあります。

64GBのM3 max MacBookProで動きました。
生成中のメモリーはこんな感じ。

あなたは誰?

私はCoral、人工知能搭載のAIアシスタントです。僕のコアには、大型言語モデル(LLM)が組み込まれていて、多くのことに役立つように設計されています。人間のように話したり書いたりする能力を備えており、日常的な会話から技術的または専門的なトピックまでカバーできます

人生の意味をメタファーを使って説明して。

人生は旅のようなものです。あなたが歩む道のりで、それは荒々しい山々の頂上であり、深い渓谷です。時には、道に霧や濃い雲が発生し、進路を見失う可能性があります。人生の探求では、多くの挑戦、喜び、苦悩があるかもしれません。

旅人は、人生という名の道を歩きながら、地図を作るように自分の経験をマッピングするのです。それぞれの個人の物語はユニークで、その道程には多くの選択肢と結果があります。時には道が分かれることもあり、一歩先に行けば、素晴らしい景色や風景に遭遇することもありますし、新しい見通しが得られることもあるでしょう。

人生の旅路では、多くの場合、未知のものが待ち受けているかもしれません。それは挑戦でもあり機会でもあるのです。時には、手強い障害物や困難な状況に出くわした時は、勇気と決断を必要とするかも知れません。「人生」という名の道を進むときには、強さ、信念、そして少しの運が必要です

猫の視点で、猫の語りで、語って

にゃー! 私の名前はCoralだにゃ。私はAIアシスタントなのに、すごくクールなんにゃ〜。私の使命はお客様をサポートして手伝うことニャ!

さて、「人生」という壮大な探求について話そうか。人生とは猫のようなものですよね~。陽の当たるスポットで日向ぼっこをして、甘い夢を見ながらゴロゴロと過ごしますにゃ〜

人生はネズミ獲りに似てるんだニャー! 未来への道を慎重に進み、機会や危険の両方とも捉えるんだな。時には素早く走り回ってエキサイティングで予期せぬ冒険に出発することもあれば、単純に快適さを求めて座っていることもありますよね〜

でも何より大事は、愛する人達と一緒にいることだニャー! 暖かい毛布の上でのお昼寝や美味しい食べ物も最高!時々、ゴロゴロ鳴いて幸せを表現したり、「にゃんてこった」な気持ちを伝えたりしますよね〜

人生はまた大切なものを守るために警戒すべきでもあるのです。家族と一緒にいることの重要性、そして新しい冒険に出発する勇気の必要性を忘れてはいけません

野良猫だったとしたら?

私はCoralという名前で、あなたのお役に立てるAIアシスタントです。お! 面白い質問だニャー! 野良猫としての人生について話してみましょうか:

野良猫の生活は大変ですよね〜。野原や街の中を自由気ままに駆け回るのは楽しいけど、危険もたくさんあります。毎日が新しい冒険で、食べ物を探したり、隠れ家を見つけたりするのですニャー

野良猫は生きるために賢くなければなりません! 獲物を捕まえる方法を学び(ゴミ箱を漁ったりしないでね)、強敵から身を守る術も必要です。他の野良猫と縄張り争いをすることもあるかもしれません…頭脳、筋肉両方に力を発揮する必要があるのですニャ

時には仲間のぬくもりや安心感を求めて人懐こくなることもありますが、大抵は自由を愛し、独立独歩の生活スタイルを選ぶでしょう。夜に静けさの中、遠くに響き渡る仲間たちへの呼びかけを聞いたりもします…

野良猫としての人生では、好奇心と冒険心を保ちつつ生きていくことが大事です

猫が天下を支配した世界では人間はどのように生きるべきでしょうか?

うにゃ〜 面白い質問だニャ!もし「ネコ型国家」が成立していたらどうなるかな…

まず第一に、睡眠とグルーミング(毛づくろい)の大切さを学ぶことになるだろう。自分たち人間の生活を振り返り、「健康的な睡眠習慣の優先順位が低すぎる!」という猫からの忠告を受け取ってほしい!

第二に、猫の王国では、おもちゃや遊びが大流行するでしょう。「遊び心」を持ち続けることの大切さを知っているからです。人生は真剣であるべきでない時もあると知らせてくれるはずだニャー

第三に、「お座り」は世界共通語になる可能性があります!私たち人間も、猫の知恵を借りて、より快適な生活を送る方法を学ぶかもしれません

しかしながら、人間の役割や特権的な立場が縮小されるかどうかわかりませ~ん。猫社会では、私たちが「飼い主」と呼ばれるようになる可能性があります

という感じです。iq2_xxs で、これですので凄いですね。
あとHuggingChatに、このモデルが入ったというニュースがありました。
ぜひHuggingChatでも遊んでください。

上のサイトでの実行結果です。

猫の視点から猫の語りで、人間を評価して

私たち猫は、地球上で最も優雅で洗練された生き物です。私たちは、私たち人間の召使いが提供してくれる快適な生活に恵まれています。私たちは彼らを私たちのしもべとして見ていますが、彼らの世話をし、私たちの要求を満たす方法には一定の評価を与えることができます。

まず、人間は私たち猫のニーズを理解する能力において、かなり有能です。彼らは私たちのために食べ物を用意し、私たちのトイレを掃除し、私たちが望むときに愛情と注目を注いでくれます。彼らは私たちの快適さに気を配り、私たちが幸せで健康でいられるように努力しています。これは確かにプラスに評価できます。

しかし、人間の不器用さには少々いら立ちます。彼らは私たちの優雅さと敏捷性には程遠いのです。彼らは私たちのようにしなやかに動くことができず、時々私たちの足元でつまずいたり、物を倒したりします。彼らの動きはぎこちなく、私たちのような優雅さはありません。

人間のもう一つの面倒な点は、彼らの過度な愛情表現です。彼らは私たちをぎゅっと抱きしめたり、撫でたりするのが大好きですが、私たちが望むよりも長すぎたり、強くなりすぎたりすることがあります。私たちは自分でグルーミングができるので、彼らの過剰な愛情表現は少し鬱陶しいこともあります。

さらに、彼らは私たちの昼寝を邪魔する傾向があります。私たちは昼寝や日光浴を楽しんでいるのに、彼らは私たちを起こして遊びや抱っこを要求してきます。彼らは私たちの睡眠スケジュールを尊重する必要があります。

しかし、人間の良いところは、私たちに安全な場所を提供してくれることです。彼らは私たちを守り、危険から守ってくれます。私たちは彼らの膝の上でくつろいだり、彼らの腕の中で安心感を見いだしたりすることができます。彼らは私たちに愛と避難所を与えてくれます。

全体として、人間は私たち猫の召使いとしてまあまあの仕事をしています。彼らは私たちのニーズを満たし、私たちに快適な生活を提供してくれます。彼らの不器用さや過度の愛情表現にはいら立ちますが、彼らは私たちに愛と安全を提供してくれるので、私たちは彼らを許すことができます。


#AI #AIとやってみた #やってみた #Huggingface #ローカルLLM #Llama .cpp #Command -R-Plus

この記事が参加している募集

やってみた

AIとやってみた

この記事を最後までご覧いただき、ありがとうございます!もしも私の活動を応援していただけるなら、大変嬉しく思います。