「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > Snowflake(SiS)のStreamlitを使ったトークン数チェックアプリを作ってみた

Snowflake(SiS)のStreamlitを使ったトークン数チェックアプリを作ってみた

2024 年 9 月 16 日に公開
ブラウズ:149

導入

こんにちは、私は Snowflake のセールス エンジニアです。さまざまな投稿を通じて、私の経験や実験の一部を皆さんと共有したいと思います。この記事では、Snowflake で Streamlit を使用してトークン数を確認し、Cortex LLM のコストを見積もるアプリを作成する方法を説明します。

注: この投稿は私の個人的な見解を表すものであり、Snowflake の見解ではありません。

Snowflake (SiS) の Streamlit とは何ですか?

Streamlit は、HTML/CSS/JavaScript を必要とせずに、単純な Python コードで Web UI を作成できる Python ライブラリです。アプリ ギャラリーで例をご覧ください。

Snowflake の Streamlit を使用すると、Snowflake 上で Streamlit Web アプリを直接開発して実行できます。 Snowflake アカウントだけで簡単に使用でき、Snowflake テーブル データを Web アプリに統合するのに最適です。

Snowflake の Streamlit について (Snowflake 公式ドキュメント)

スノーフレーク コーテックスとは何ですか?

Snowflake Cortex は、Snowflake の生成 AI 機能のスイートです。 Cortex LLM を使用すると、SQL または Python の単純な関数を使用して、Snowflake 上で実行されている大規模な言語モデルを呼び出すことができます。

大規模言語モデル (LLM) 関数 (Snowflake Cortex) (Snowflake 公式ドキュメント)

機能の概要

画像

I made a token count check app using Streamlit in Snowflake (SiS)

注: 画像内のテキストは、芥川龍之介の「蜘蛛の糸」からのものです。

特徴

  • ユーザーは Cortex LLM モデルを選択できます
  • ユーザー入力テキストの表示文字数とトークン数
  • 文字に対するトークンの比率を表示します
  • Snowflake クレジット価格に基づいて推定コストを計算します

注: Cortex LLM 価格表 (PDF)

前提条件

  • Cortex LLM アクセス権を持つ Snowflake アカウント
  • snowflake-ml-python 1.1.2 以降

注: Cortex LLM リージョンの可用性 (公式 Snowflake ドキュメント)

ソースコード

import streamlit as st
from snowflake.snowpark.context import get_active_session
import snowflake.snowpark.functions as F

# Get current session
session = get_active_session()

# Application title
st.title("Cortex AI Token Count Checker")

# AI settings
st.sidebar.title("AI Settings")
lang_model = st.sidebar.radio("Select the language model you want to use",
                              ("snowflake-arctic", "reka-core", "reka-flash", 
                              "mistral-large2", "mistral-large", "mixtral-8x7b", "mistral-7b", 
                              "llama3.1-405b", "llama3.1-70b", "llama3.1-8b", 
                              "llama3-70b", "llama3-8b", "llama2-70b-chat", 
                              "jamba-instruct", "gemma-7b")
)

# Function to count tokens (using Cortex's token counting function)
def count_tokens(model, text):
    result = session.sql(f"SELECT SNOWFLAKE.CORTEX.COUNT_TOKENS('{model}', '{text}') as token_count").collect()
    return result[0]['TOKEN_COUNT']

# Token count check and cost calculation
st.header("Token Count Check and Cost Calculation")

input_text = st.text_area("Select a language model from the left pane and enter the text you want to check for token count:", height=200)

# Let user input the price per credit
credit_price = st.number_input("Enter the price per Snowflake credit (in dollars):", min_value=0.0, value=2.0, step=0.01)

# Credits per 1M tokens for each model (as of 2024/8/30, mistral-large2 is not supported)
model_credits = {
    "snowflake-arctic": 0.84,
    "reka-core": 5.5,
    "reka-flash": 0.45,
    "mistral-large2": 1.95,
    "mistral-large": 5.1,
    "mixtral-8x7b": 0.22,
    "mistral-7b": 0.12,
    "llama3.1-405b": 3,
    "llama3.1-70b": 1.21,
    "llama3.1-8b": 0.19,
    "llama3-70b": 1.21,
    "llama3-8b": 0.19,
    "llama2-70b-chat": 0.45,
    "jamba-instruct": 0.83,
    "gemma-7b": 0.12
}

if st.button("Calculate Token Count"):
    if input_text:
        # Calculate character count
        char_count = len(input_text)
        st.write(f"Character count of input text: {char_count}")

        if lang_model in model_credits:
            # Calculate token count
            token_count = count_tokens(lang_model, input_text)
            st.write(f"Token count of input text: {token_count}")

            # Ratio of tokens to characters
            ratio = token_count / char_count if char_count > 0 else 0
            st.write(f"Token count / Character count ratio: {ratio:.2f}")

            # Cost calculation
            credits_used = (token_count / 1000000) * model_credits[lang_model]
            cost = credits_used * credit_price

            st.write(f"Credits used: {credits_used:.6f}")
            st.write(f"Estimated cost: ${cost:.6f}")
        else:
            st.warning("The selected model is not supported by Snowflake's token counting feature.")
    else:
        st.warning("Please enter some text.")

結論

このアプリを使用すると、特に文字数とトークン数の間にギャップがある日本語のような言語を扱う場合に、LLM ワークロードのコストを簡単に見積もることができます。お役に立てば幸いです!

お知らせ

Snowflake X の最新情報

X に関する Snowflake の新着情報を共有しています。ご興味がございましたら、お気軽にフォローしてください。

英語版

Snowflake 新着情報ボット (英語版)
https://x.com/snow_new_ja

日本語版

Snowflake 新着情報ボット (日本語版)
https://x.com/snow_new_jp

変更履歴

(20240914) 最初の投稿

日本語オリジナル記事

https://zenn.dev/tsubasa_tech/articles/4dd80c91508ec4

リリースステートメント この記事は次の場所に転載されています: https://dev.to/tsubasa_tech/i-made-a-token-count-check-app-using-streamlit-in-snowflake-sis-2440?1 侵害がある場合は、 Study_golang@163 .comdelete に連絡してください
最新のチュートリアル もっと>

免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。

Copyright© 2022 湘ICP备2022001581号-3