0
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

gemini apiで遊んでみた。

Last updated at Posted at 2024-11-16

Google gemini apiで遊べるようなので、プロンプトで実行して遊んでみました。

gemini api の api-keyを取得する。
image.png

apiキーを取得したら config.iniや環境変数にセットする。

[!NOTE]
※ このAPI_KEYはパスワードジェネレータでテキトーに作った文字列です。

[DEFAULT]
API_KEY=S3aW@o81643957s6d198_691!p3r88

モジュールインストールする。

python -m venv .venv
.venv/Scripts/Activate.ps1
pip install google-generativeai

コードで遊ぶ。

logger.py

import logging


class Logger:
    logging.basicConfig(
        format="%(levelname)s   %(asctime)s     %(message)s",
        level=logging.INFO,
    )
    logger = logging.getLogger(__name__)

    @classmethod
    def info(cls, msg, *args):
        cls.logger.info(msg, *args)

    @classmethod
    def error(cls, msg, *args):
        cls.logger.error(msg, *args)

def reporter(func):
    Logger.info("start %s" % func.__name__)

    def inner_wrapper(*args, **kwargs):
        ret = func(*args, **kwargs)
        return ret, Logger.info("end %s" % func.__name__)

    return inner_wrapper

prompt.py

import sys
import configparser
from pprint import pformat
from enum import Enum

import google.generativeai as genai
from termcolor import colored

from logger import Logger, reporter


class ConfEnum(str, Enum):
    DEFAULT = "DEFAULT"
    INI = "./config.ini"
    API_KEY = "API_KEY"


class ConnectModel(str, Enum):
    GEMINI_15_FLASH: str = "gemini-1.5-flash"


class LogMessage(Enum):
    PROMPT_ERROR = "プロンプトが入力されていません。"
    PROMPT_EXCEPTION_ERROR = "{prompt_exc}が発生しました。"
    CORRECT = "プロンプト投下。"
    CANCELED_BY_USER = "キャンセルされました。"
    EXCEPTION = "想定外の例外{exc}が発生しました。"


class Setup:
    _api_key: str = None

    @classmethod
    def get_api_key(cls) -> str:
        config = configparser.ConfigParser()
        config.read(ConfEnum.INI)
        cls._api_key = config[ConfEnum.DEFAULT][ConfEnum.API_KEY]
        return cls._api_key


@reporter
def run_prompt(api_key: str) -> None:
    quits = ("q", "quit", "quiet", "", "n", "none")
    genai.configure(api_key=api_key)
    model = genai.GenerativeModel(ConnectModel.GEMINI_15_FLASH)

    try:
        while True:
            prompt = input("質問事項を入力してみよう。: ")
            if not prompt:
                Logger.error(LogMessage.PROMPT_ERROR.value)
                raise ValueError

            if prompt.lower() in quits:
                Logger.info(LogMessage.CANCELED_BY_USER.value)
                sys.exit()

            else:
                response = model.generate_content(prompt)
                Logger.info(colored(response.text, "cyan"))

    except ValueError as prompt_exc:
        Logger.error(
            LogMessage.PROMPT_EXCEPTION_ERROR.value.format(
                prompt_exc=prompt_exc.__class__.__name__
            )
        )
    except Exception as exc:
        Logger.error(
            LogMessage.EXCEPTION.value.format(exc=exc.__class__.__name__)
        )
        Logger.error("\n%s" % pformat(locals(), 1))
        sys.exit()


if __name__ == "__main__":
    try:
        run_prompt(Setup.get_api_key())
    except KeyboardInterrupt:
        Logger.info(LogMessage.CANCELED_BY_USER.value)

実行結果

INFO    2024-11-16 19:16:25,419  start run_prompt
質問事項を入力してみよう。: 富士山の高さは何メートル?
INFO    2024-11-16 19:17:32,302  富士山標高は、測量方法によって多少異なりますが、一般的には **3776.24メートル** とされています。

以上、簡単にプロンプトを実行して遊ぶでした。

0
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?