Skip to main content

LLMの出力をPydanticモデルで型安全に扱うためのPythonライブラリ

Project description

dariko

LLMの出力をPydanticモデルで型安全に扱うためのPythonライブラリ。

特徴

  • LLMの出力をPydanticモデルで型安全に扱える
  • 型アノテーションから自動的に出力モデルを推論
  • バッチ処理に対応
  • シンプルなAPI
  • 環境変数から自動的にAPIキーを読み込み

インストール

pip install dariko

使用方法

基本的な使い方

from pydantic import BaseModel
from dariko import ask

# 出力モデルの定義
class Person(BaseModel):
    name: str
    age: int
    dummy: bool

# 型アノテーションから自動的にモデルを推論
result: Person = ask("以下の形式のJSONを返してください:\n" + '{"name": "山田太郎", "age": 25, "dummy": false}')
print(result.name)  # "山田太郎"
print(result.age)   # 25
print(result.dummy) # False

明示的にモデルを指定

result = ask("test", output_model=Person)

バッチ処理

from dariko import ask_batch

prompts = [
    "以下の形式のJSONを返してください:\n" + '{"name": "山田太郎", "age": 25, "dummy": false}',
    "以下の形式のJSONを返してください:\n" + '{"name": "佐藤花子", "age": 30, "dummy": true}',
]

results = ask_batch(prompts, output_model=Person)

# 結果の表示
for i, result in enumerate(results, 1):
    print(f"\n人物 {i}:")
    print(f"名前: {result.name}")
    print(f"年齢: {result.age}")
    print(f"ダミー: {result.dummy}")

型推論の実践例

関数の戻り値型アノテーションによる推論

def get_person() -> Person:
    return ask('以下の形式のJSONを返してください:\n{"name": "山田太郎", "age": 25, "dummy": false}')

person = get_person()
print(person.name)  # "山田太郎"

変数アノテーションによる推論

result: Person = ask('以下の形式のJSONを返してください:\n{"name": "佐藤花子", "age": 30, "dummy": true}')
print(result.name)  # "佐藤花子"

バッチ処理でも型推論が効く

from typing import List

def get_people() -> List[Person]:
    prompts = [
        '以下の形式のJSONを返してください:\n{"name": "山田太郎", "age": 25, "dummy": false}',
        '以下の形式のJSONを返してください:\n{"name": "佐藤花子", "age": 30, "dummy": true}',
    ]
    return ask_batch(prompts)

people = get_people()
for p in people:
    print(p.name)

注意点

  • 型アノテーションが取得できない場合は output_model を明示的に指定してください。
  • 型推論は「関数の戻り値型」→「変数アノテーション」→「AST解析」の順で行われます。
  • 型アノテーションはPydanticのBaseModelサブクラスである必要があります。

型推論の仕組み

Darikoは以下の優先順位で型を推論します:

  1. 呼び出し元関数のreturn型ヒント
  2. 現フレームのローカル変数アノテーション(1個だけの場合)
  3. AST解析による推定

詳細な実装については、examples/logic.mdを参照してください。

環境変数

以下の環境変数を設定することで、Darikoの動作を制御できます:

  • DARIKO_API_KEY: APIキー(必須)
  • DARIKO_MODEL: 使用するモデル名(デフォルト: "gpt-4")

開発

セットアップ

git clone https://github.com/yourusername/dariko.git
cd dariko
pip install -e .

テスト

pytest tests/

ライセンス

MIT License

from pydantic import BaseModel
from dariko import ask

class Person(BaseModel):
    name: str
    age: int

result: Person = ask("次の JSON を返して: {name:'Alice', age:30}")
print(result)

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

dariko-0.3.0.tar.gz (11.1 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

dariko-0.3.0-py3-none-any.whl (9.1 kB view details)

Uploaded Python 3

File details

Details for the file dariko-0.3.0.tar.gz.

File metadata

  • Download URL: dariko-0.3.0.tar.gz
  • Upload date:
  • Size: 11.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.10.16

File hashes

Hashes for dariko-0.3.0.tar.gz
Algorithm Hash digest
SHA256 3a78e2b80d438042248d8e2e3755efd6837210b89a6abf9e72ef534a31fd867a
MD5 7133afd75bf29e34cdba2c21040b5130
BLAKE2b-256 5c8e799deff1a49646e6155f4ca87c7ca4b017116d1efc2f414a5efa208bb352

See more details on using hashes here.

File details

Details for the file dariko-0.3.0-py3-none-any.whl.

File metadata

  • Download URL: dariko-0.3.0-py3-none-any.whl
  • Upload date:
  • Size: 9.1 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.10.16

File hashes

Hashes for dariko-0.3.0-py3-none-any.whl
Algorithm Hash digest
SHA256 3f79ddb5bb0cbb09e99e9c492dae70df9996bd810f6738c8ac9c730982c1cf3c
MD5 cae6c5860533452205bd95ffdfe29d99
BLAKE2b-256 601c4a7d0277cd78969f4b3b06378dfe4a5e6b13f6f5ae02ff5cd409123b8b15

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page