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は以下の優先順位で型を推論します:
- 呼び出し元関数のreturn型ヒント
- 現フレームのローカル変数アノテーション(1個だけの場合)
- 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
Release history Release notifications | RSS feed
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)
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
3a78e2b80d438042248d8e2e3755efd6837210b89a6abf9e72ef534a31fd867a
|
|
| MD5 |
7133afd75bf29e34cdba2c21040b5130
|
|
| BLAKE2b-256 |
5c8e799deff1a49646e6155f4ca87c7ca4b017116d1efc2f414a5efa208bb352
|
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
3f79ddb5bb0cbb09e99e9c492dae70df9996bd810f6738c8ac9c730982c1cf3c
|
|
| MD5 |
cae6c5860533452205bd95ffdfe29d99
|
|
| BLAKE2b-256 |
601c4a7d0277cd78969f4b3b06378dfe4a5e6b13f6f5ae02ff5cd409123b8b15
|