小ネタ:yaspinでターミナルにクルクルを出そう #ai #azure #openai #llm #python
簡単なスクリプト
次のような Azure OpenAI に問い合わせる簡単なPythonスクリプトがあるとします。
import os from openai import AzureOpenAI from dotenv import load_dotenv load_dotenv() def send_prompt(prompt): response = None try: client = AzureOpenAI( api_key = os.getenv("AZURE_OPENAI_API_KEY"), azure_endpoint = os.getenv("AZURE_OPENAI_ENDPOINT"), api_version = os.getenv("AZURE_OPENAI_API_VERSION") ) response = client.chat.completions.create( model = os.getenv("AZURE_OPENAI_MODEL_NAME"), messages = [{"role": "user", "content": prompt}], max_tokens = 1024, temperature = 0.95 ) except Exception as e: print(f"error: {e}") response = None return response res = send_prompt("What is Docker?") if res: model_dump = res.model_dump() print({"response": model_dump['choices'][0]['message']['content']})
これを実行すると、応答が返ってくるまで何も表示されないので「本当に大丈夫なのかな?」と心配になってきます。ウェブなら待ちのときに、次のようなクルクル(spinnerというらしい?)を出すこともできますが…。
https://commons.wikimedia.org/wiki/File:Loading_icon.gif
yaspin: Yet Another Terminal Spinner for Python
そこで yaspin の出番です。次のような処理待ちのクルクルを簡単に作ることができます。
次がサンプルスクリプトです。
import time from yaspin import yaspin with yaspin(text="Processing", color="yellow") as spinner: time.sleep(5) spinner.ok("✅ ")
これを実行すると、次のように5秒間クルクルしてから完了します。
では早速yaspinを先のAzure OpenAIスクリプトに組み込んでみましょう。
import os from yaspin import yaspin from openai import AzureOpenAI from dotenv import load_dotenv load_dotenv() def send_prompt(prompt): response = None with yaspin(text="Processing", color="yellow") as spinner: try: client = AzureOpenAI( api_key = os.getenv("AZURE_OPENAI_API_KEY"), azure_endpoint = os.getenv("AZURE_OPENAI_ENDPOINT"), api_version = os.getenv("AZURE_OPENAI_API_VERSION") ) response = client.chat.completions.create( model = os.getenv("AZURE_OPENAI_MODEL_NAME"), messages = [{"role": "user", "content": prompt}], max_tokens = 1024, temperature = 0.95 ) spinner.ok("✅ ") except Exception as e: print(f"error: {e}") response = None spinner.fail("💥 ") return response res = send_prompt("What is Docker?") if res: model_dump = res.model_dump() print({"response": model_dump['choices'][0]['message']['content']})
差分は次のようになります。
--- 10__simple.py 2024-10-28 14:43:36.765549180 +0900 +++ 11__yaspin.py 2024-10-28 17:26:28.336770580 +0900 @@ -1,13 +1,15 @@ #!python3 import os +from yaspin import yaspin from openai import AzureOpenAI from dotenv import load_dotenv load_dotenv() def send_prompt(prompt): response = None - try: + with yaspin(text="Processing", color="yellow") as spinner: + try: client = AzureOpenAI( api_key = os.getenv("AZURE_OPENAI_API_KEY"), azure_endpoint = os.getenv("AZURE_OPENAI_ENDPOINT"), @@ -19,9 +21,11 @@ max_tokens = 1024, temperature = 0.95 ) - except Exception as e: + spinner.ok("✅ ") + except Exception as e: print(f"error: {e}") response = None + spinner.fail("💥 ") return response res = send_prompt("What is Docker?")
これを実行すると、処理待ち中はクルクルしています。
まとめ
yaspinを使うと、処理待ち中のターミナルにクルクルを出すことができます。単純なクルクルだけでなく、いくつか種類があるのでお好みで使い分けてみてください。