chatbotを動かすメモ(Mac  /  hugging face)

# 1  手元のmacで確認する方法

## 1.ollamaをダウンロードする
https://ollama.com

## 2.コマンド実行する(llama3.2:latestの3.2B/3.2億パラメーター)
```
$ ollama pull llama3.2
$ ollama run llama3.2
```

## 3.チャットを利用する

![スクリーンショット 2025-06-12 18.41.30.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/43766/ba0fa2a4-2b3d-4fe5-b02f-64120221f8fe.png)


## 4.終了する

```
$ /bye
```

## 5.他のLLMを準備して実行させてみる

Sarashinaを使う場合。GGUF形式のものが必要なので、GGUFをつけて検索を行います。
Hugging Face → Models → 検索バーに「sarashina GGUF」と入力。ここでは、sarashina2.2-3b-instruct-v0.1-ggufを利用してみる。

```
$ ollama pull hf.co/mmnga/sarashina2.2-3b-instruct-v0.1-gguf
$ ollama run hf.co/mmnga/sarashina2.2-3b-instruct-v0.1-gguf
```


```

他のLLMを準備するときの注意点。

Hugging Face Hub に公開されているモデルであれば、公式ライブラリに登録されていなくても直接ダウンロードして実行可能。
https://huggingface.co/docs/hub/ollama
ollama run hf.co/{username}/{repository}

ただ、ライブラリに存在しないものを利用する場合は自分で変換が必要。変換手順は以下。

# 1. llama.cppをクローン
git clone https://github.com/ggerganov/llama.cpp
cd llama.cpp

# 2. ビルド
make

# 3. モデルをダウンロード
git lfs install
git clone https://huggingface.co/sbintuitions/sarashina2.2-3b-instruct-v0.1

# 4. GGUF形式に変換
python convert_hf_to_gguf.py sarashina2.2-3b-instruct-v0.1/ --outdir ./converted/

# 5. 量子化（オプション、サイズを小さくしたい場合）
./llama-quantize ./converted/ggml-model-f16.gguf ./converted/ggml-model-q4_0.gguf q4_0


```


## 6.serverで動かす場合

```
$ ollama serve
```

## 7.API Callしてみる

```
curl -X POST http://localhost:11434/api/chat \
  -H "Content-Type: application/json" \
  -d '{
    "model": "llama3.2",
    "messages": [
      {
        "role": "user",
        "content": "こんにちは"
      }
    ]
  }'
```


# 2.Huggingfaceで実行する方法

## 1. New -> Spaceを選択
![スクリーンショット 2025-06-12 16.18.10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/43766/be931a9e-e4ba-4d59-b35f-4b67a7d706a6.png)

## 2.必要な部分を埋める
![スクリーンショット 2025-06-12 16.19.32.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/43766/40a4ad4e-7024-4ae4-bfe7-15d690cd1b68.png)

## 3.filesで必要なファイルを確認
![スクリーンショット 2025-06-12 16.23.53.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/43766/6940170d-9a38-4d9d-acd1-a688b0248220.png)

## 4.ファイルを編集  (app.pyとrequirements.txtを置き換える）
![スクリーンショット 2025-06-12 16.24.03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/43766/6bd75ee9-574b-41a7-bd6c-620ecc05fe0c.png)

下記コードを参照
https://github.com/oggata/huggingface-chat-demo/tree/main

## 5.Appに戻って待つ


## 6.APIから使う

アプリの一番下に、「Use Via API」のリンクがあるので開くと、Python / JavaScript などからAPIのcall方法がわかる.

注意；UseVia APIの記述だとオプション数が足りていないので、下記のように６つのオプションをつけること

また返答はGradioの仕様として
"\u3053\u3093\u306b\u3061\u306f\uff01\u4eca\u65e5\u306f\u3069\u3046\u3057\u307e\u3057\u305f\u304b\uff1f"
のように返ってくるので
Unicodeエスケープをデコードする必要がある。


```
curl -X POST https://===spacename===/gradio_api/call/chat -s -H "Content-Type: application/json" -d '{
  "data": [
							"Hello!!","","You are a friendly and knowledgeable assistant. You carefully answer users questions.",512,0.7,0.95
]}' \
  | awk -F'"' '{ print $4}'  \
  | read EVENT_ID; curl -N https://===spacename===/gradio_api/call/chat/$EVENT_ID

```

```
import json
response = '"\u3053\u3093\u306b\u3061\u306f\uff01\u4eca\u65e5\u306f\u3069\u3046\u3057\u307e\u3057\u305f\u304b\uff1f"'
decoded = json.loads(response)
print(decoded)  #
```


## 注意点

スペースの最大は100Gまで
それ以上のLLMモデルを使う場合は
Inference API/Serverless Inference
を活用
（モデルをダウンロードせずにAPI経由でアクセス）

```
from huggingface_hub import InferenceClient

client = InferenceClient(
    provider="together",
    api_key="your_hf_token"
)

# 大規模モデルの利用

response = client.chat_completion(
    model="meta-llama/Meta-Llama-3-70B-Instruct",
    messages=[{"role": "user", "content": "Hello"}]
)
```

ただし、Sarashina2-70BとSarashina2-8x70Bの両方のモデルページで
「This model is not currently available via any of the supported Inference Providers.」と明記
のため、ローカルで動かすか、HuggingFaceのInference Endpointsなどを活用（未確認）