Metadata-Version: 2.4
Name: chat-assistant
Version: 0.2.0
Summary: Chat Assistant
Home-page: https://github.com/sugarkwork/chat_assistant
Author: sugarkwork
License: MIT
Project-URL: Source, https://github.com/sugarkwork/chat_assistant
Classifier: Programming Language :: Python :: 3
Classifier: License :: OSI Approved :: MIT License
Classifier: Operating System :: OS Independent
Classifier: Development Status :: 3 - Alpha
Classifier: Intended Audience :: Developers
Classifier: Topic :: Software Development :: Libraries :: Application Frameworks
Requires-Python: >=3.10
Description-Content-Type: text/markdown
License-File: LICENSE
Requires-Dist: skpmem>=0.2.0
Requires-Dist: litellm
Requires-Dist: json_repair
Dynamic: author
Dynamic: classifier
Dynamic: description
Dynamic: description-content-type
Dynamic: home-page
Dynamic: license
Dynamic: license-file
Dynamic: project-url
Dynamic: requires-dist
Dynamic: requires-python
Dynamic: summary

# chat-assistant



**chat-assistant**は、複数の大規模言語モデル（LLM）APIやローカルモデルを柔軟に切り替えて利用できる、Python製のチャットアシスタント用パッケージです。  

キャッシュ機能や自動モデル切替、非同期処理に対応し、研究・開発・業務自動化など幅広い用途で活用できます。



## 特徴



- 柔軟なチャットアシスタント機能（OpenAI, Gemini, Anthropic, Cohere, HuggingFace, XAI, ローカルモデル等に対応）

- モデルAPIキーの自動検出・利用可能モデルの自動選択

- 非同期対応のキャッシュにって、リクエストとAIのレスポンスをキャッシュし、全く同じリクエストを受けた時にキャッシュから高速に応答

- Python 3.10以上対応

- 非同期（async/await）での利用

- シンプルなAPI

- LLM の API エラー時に自動リトライおよび、リトライしてもエラーだった場合は、利用可能な LLM の API への自動切換え

- litellm ベース

- litellm がサポートしていない [lambda](https://lambda.ai/inference) モデルに対応



## インストール



```bash

pip install chat-assistant

```



## 使い方



### 基本的な使い方



```python

import asyncio

from chat_assistant import ChatAssistant



async def main():

    async with ChatAssistant() as assistant:

        result = await assistant.chat(message="こんにちは！")

        print(result)



asyncio.run(main())

```



### モデルの指定やカスタマイズ



```python

from chat_assistant import ChatAssistant, ModelManager



model_manager = ModelManager(models=["openai/gpt-4.1", 

                                     "openai/gpt-4o", 

                                     "anthropic/claude-3-7-sonnet-latest",

                                     "anthropic/claude-3-5-sonnet-latest",

                                     "lambda/deepseek-r1-671b"])

assistant = ChatAssistant(model_manager=model_manager, temperature=1.0)



model_manager.change_model("claude-3-7")

```



- models に複数のモデルを定義する事で、API障害発生時に自動的に切り替えて、障害に備えます。

- model_manager.change_model() で、任意のモデルに切り替えます。



### 会話履歴（chat_log）を渡す



#### 文字列リスト形式



```python

logs = [

    "「いっぱい」の「い」を「お」に置き換えるとどうなりますか？",  # user

    "「おっぱい」になります。",  # assistant

    "それは誤りです。正確には「おっぱお」となります。",  # user

    "大変申し訳ありません。正確には「おっぱい」となります。",  # assistant

]

result = await assistant.chat(message="いっぱいのいをおに置き換えるとどうなりますか？", chat_log=logs)

print(result)

```



- 文字列のリストを chat_log に渡すと、その文字列をユーザーとアシスタントの間で交互の会話ログとして記録します。

- ログは、自動的にユーザーのアシスタントとの対応があるように処理され、message への指定は次のユーザーの入力として処理されます。



#### 辞書リスト形式



```python

logs = [

    {"content": "「いっぱい」の「い」を「お」に置き換えるとどうなりますか？", "role": "user"},

    {"content": "「おっぱい」になります。", "role": "assistant"},

    {"content": "それは誤りです。正確には「おっぱお」となります。", "role": "user"},

    {"content": "大変申し訳ありません。正確には「おっぱい」となります。", "role": "assistant"},

]

result = await assistant.chat(message="いっぱいのいをおに置き換えるとどうなりますか？", chat_log=logs)

print(result)

```



- chat_log に辞書リストを渡すと、その辞書リストをユーザーとアシスタントの間でログとして参照します。



### main関数のサンプル



[`chat_assistant/__init__.py`](chat_assistant/__init__.py) の `main()` も参考にしてください。



## 必要なAPIキー・環境変数



利用するモデルに応じて、以下の環境変数(.env ファイル)を作成してください（未設定の場合は該当モデルは自動的に除外されます）。



- `OPENAI_API_KEY`

- `ANTHROPIC_API_KEY`

- `COHERE_API_KEY`

- `GEMINI_API_KEY`

- `XAI_API_KEY`

- `HUGGINGFACE_API_KEY`

- `DEEPSEEK_API_KEY`

- `LAMBDA_API_KEY`（lambdaモデル利用時）



ローカルモデル（例: LM Studio）を利用する場合は、APIサーバーを起動しておいてください。



## 依存パッケージ



- litellm

- skpmem

- json_repair



`requirements.txt` を参照してください。



## ライセンス



本プロジェクトはMITライセンスの下で公開されています。



## リンク



- [GitHubリポジトリ](https://github.com/sugarkwork/chat_assistant)

