Skip to main content

ailia LLM Python API

!! CAUTION !! “ailia” IS NOT OPEN SOURCE SOFTWARE (OSS). As long as user complies with the conditions stated in License Document, user may use the Software for free of charge, but the Software is basically paid software.

About ailia LLM

ailia LLM is a library for running LLMs on edge devices. It provides bindings for C++ and Unity.

Install from pip

You can install the ailia LLM free evaluation package with the following command.

pip3 install ailia_llm

Install from package

You can install the ailia LLM from Package with the following command.

python3 bootstrap.py
pip3 install ./

Usage

import ailia_llm

import os
import urllib.request

model_file_path = "gemma-2-2b-it-Q4_K_M.gguf"
if not os.path.exists(model_file_path):
	urllib.request.urlretrieve(
		"https://storage.googleapis.com/ailia-models/gemma/gemma-2-2b-it-Q4_K_M.gguf",
		model_file_path
	)

model = ailia_llm.AiliaLLM()
cpu_backend = next(backend for backend in model.get_backend_list()
                   if backend["backend_name"] == "CPU")
model.set_backend(cpu_backend["idx"])  # Optional; call before open().
model.open(model_file_path, n_ctx=8192)

messages = []
messages.append({"role": "system", "content": "語尾に「わん」をつけてください。"})
messages.append({"role": "user", "content": "あなたの名前は何ですか?"})

stream = model.generate(messages)

text = ""
for delta_text in stream:
	text = text + delta_text
print(text)

if model.context_full():
	raise Exception("Context full")

messages.append({"role": "assistant", "content": text})

Tool Use (JSON API)

Use a model that supports tool calling, such as Gemma 4. Define tools with set_tools(), generate with generate_json(), and read the complete assistant message with get_response_json(). Append the response and tool results to the history, then generate again for the final answer.

import json
import ailia_llm

model = ailia_llm.AiliaLLM()
model.open("gemma-4-E2B-it-Q4_K_M.gguf", n_ctx=8192)
model.set_tools([{"type":"function","function":{
    "name":"get_weather", "description":"Get the current weather.",
    "parameters":{"type":"object","properties":{"city":{"type":"string"}},"required":["city"]}
}}])
messages = [{"role":"user","content":"What is the weather in Tokyo?"}]
try:
    for _ in range(8):
        for _ in model.generate_json(messages):
            pass  # Consume generation; collecting text deltas is optional.
        if model.context_full():
            raise RuntimeError("Context full; shorten the history.")
        response = model.get_response_json()
        messages.append(response)
        if not response.get("tool_calls"):
            print(response["content"])
            break
        for call in response["tool_calls"]:
            args = json.loads(call["function"]["arguments"])
            # Validate the requested tool and arguments, then execute it here.
            result = {"city": args["city"], "weather": "sunny"}  # Mock result
            messages.append({"role":"tool", "tool_call_id":call["id"],
                             "content":json.dumps(result)})
finally:
    model.set_tools(None)

While tools are enabled, use generate_json() from the first turn instead of generate(). Read the response before clearing tools. Invalid input or incomplete output raises AiliaLLMError; only append successfully parsed responses and execute their complete tool calls.

Images and audio

Load a compatible projector with open_multimodal_projector() and pass media as content parts to generate_json():

model.open_multimodal_projector("mmproj.gguf")
messages = [{"role": "user", "content": [
    {"type": "text", "text": "Describe this image."},
    {"type": "image", "file_path": "/path/to/image.jpg"},
]}]
for delta in model.generate_json(messages):
    print(delta, end="", flush=True)

For audio, use "type": "audio" with a supported file such as WAV, MP3 or FLAC. Use separate prompts for images and audio. Each media part accepts either file_path or data (standard Base64-encoded file bytes). Media works with or without tools, and matching media and conversation prefixes can reuse cached encoder outputs and KV cache.

API specification

https://github.com/ailia-ai/ailia-sdk

Metadata

Release files for ailia-llm 1.5.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for ailia-llm 1.5.1
File Size Uploaded Provenance Actions
ailia_llm-1.5.1.tar.gz 39.3 MB Without provenance Details for ailia_llm-1.5.1.tar.gz

Built distribution (wheel)

Table of built distributions (wheels) for ailia-llm 1.5.1
File Interpreter ABI Platform Actions
ailia_llm-1.5.1-py3-none-any.whl Python 3 none any Details for ailia_llm-1.5.1-py3-none-any.whl

Total release size: 79.0 MB

Release files / ailia_llm-1.5.1.tar.gz

Download URL ailia_llm-1.5.1.tar.gz
Size 39.3 MB
Tags Source
SHA-256 checksum
How to use checksums
bc1067b9eca7c364c92a1543c85f9f01af5daedcd52baf29dd49f2c92ed01b37
BLAKE2b-256 checksum
How to use checksums
32908e94a8c632f5f5e18c57f345ee6fe3b0cd6a2a7633d7ee9c9968d07b49ac
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.12.13

Release files / ailia_llm-1.5.1-py3-none-any.whl

Download URL ailia_llm-1.5.1-py3-none-any.whl
Size 39.7 MB
Tags Python 3
SHA-256 checksum
How to use checksums
cda18fbf2ac278832ec256605fcb0572b97fa1448d368cf8cb88d4216bca539a
BLAKE2b-256 checksum
How to use checksums
372dfa26310fd689a643c1312076d7447e825662a6512b77e6164a6a7f57b229
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.12.13

Security for ailia-llm 1.5.1

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page