LLM untuk Unity memungkinkan integrasi Model Bahasa Besar (LLM) dengan lancar dalam mesin Unity.
Hal ini memungkinkan untuk membuat karakter cerdas yang dapat berinteraksi dengan pemain Anda untuk pengalaman yang mendalam.
Paket ini juga dilengkapi sistem Retrieval-Augmented Generation (RAG) yang memungkinkan untuk melakukan pencarian semantik di seluruh data Anda, yang dapat digunakan untuk meningkatkan pengetahuan karakter. LLM untuk Unity dibangun di atas perpustakaan llama.cpp yang mengagumkan.
Sekilas • Cara membantu • Game menggunakan LLM untuk Unity • Penyiapan • Cara menggunakan • RAG • Manajemen model LLM • Contoh • Opsi • Lisensi
Lintas platform! Windows, Linux, macOS, dan Android
? Berjalan secara lokal tanpa akses internet. Tidak ada data yang keluar dari game!
⚡ Inferensi cepat pada CPU dan GPU (Nvidia, AMD, Apple Metal)
? Mendukung semua model LLM utama
? Mudah diatur, panggilan dengan satu baris kode
? Gratis untuk digunakan untuk tujuan pribadi dan komersial
? Diuji pada Unity: 2021 LTS, 2022 LTS, 2023
? Rilis Mendatang
Beri bintang pada repo, beri kami ulasan, dan sebarkan berita tentang proyek ini!
Bergabunglah dengan kami di Discord dan sapa.
Berkontribusi dengan mengirimkan permintaan fitur, bug, atau bahkan PR Anda sendiri.
ini berfungsi untuk memungkinkan fitur yang lebih keren!
Putusan Lisan
Saya, Chatbot: AISYLUM
Jiwa Kekosongan Tanpa Nama
Pembunuhan di Lorong 4
AI Pengiriman Makanan yang Rewel
Pacar Emosional AI
Kasus Ditutup
Hubungi kami untuk menambahkan proyek Anda!
Metode 1: Instal menggunakan penyimpanan aset
Buka halaman aset LLM untuk Unity dan klik Add to My Assets
Buka Manajer Paket di Unity: Window > Package Manager
Pilih opsi Packages: My Assets
dari menu drop-down
Pilih paket LLM for Unity
, klik Download
lalu Import
Metode 2: Instal menggunakan repo GitHub:
Buka Manajer Paket di Unity: Window > Package Manager
Klik tombol +
dan pilih Add package from git URL
Gunakan URL repositori https://github.com/undreamai/LLMUnity.git
dan klik Add
Pertama, Anda akan menyiapkan LLM untuk game Anda?:
Buat GameObject kosong.
Di GameObject Inspector klik Add Component
dan pilih skrip LLM.
Unduh salah satu model default dengan tombol Download Model
(~GBs).
Atau muat model .gguf Anda sendiri dengan tombol Load model
(lihat Manajemen model LLM).
Kemudian Anda dapat mengatur setiap karakter Anda sebagai berikut ?♀️:
Buat GameObject kosong untuk karakter tersebut.
Di GameObject Inspector klik Add Component
dan pilih skrip LLMCharacter.
Tentukan peran AI Anda di Prompt
. Anda dapat menentukan nama AI ( AI Name
) dan pemain ( Player Name
).
(Opsional) Pilih LLM yang dibuat di atas di bidang LLM
jika Anda memiliki lebih dari satu LLM GameObjects.
Anda juga dapat menyesuaikan pengaturan LLM dan karakter sesuai preferensi Anda (lihat Opsi).
Dalam skrip Anda, Anda kemudian dapat menggunakannya sebagai berikut?:
menggunakan LLMUnity; kelas publik MyScript { Karakter LLM publik llmKarakter; void HandleReply(string reply){// melakukan sesuatu dengan balasan dari modelDebug.Log(reply); } void Game(){// fungsi permainan Anda...string message = "Halo bot!";_ = llmCharacter.Chat(message, HandleReply);... }}
Anda juga dapat menentukan fungsi yang akan dipanggil ketika model balasan telah selesai.
Ini berguna jika opsi Stream
diaktifkan untuk keluaran berkelanjutan dari model (perilaku default):
void ReplyCompleted(){// melakukan sesuatu ketika balasan dari model adalah completeDebug.Log("AI menjawab"); } void Game(){// fungsi permainan Anda...string message = "Halo bot!";_ = llmCharacter.Chat(message, HandleReply, ReplyCompleted);... }
Untuk menghentikan obrolan tanpa menunggu selesai, Anda dapat menggunakan:
llmCharacter.CancelRequests();
Terakhir, di Inspektur GameObject skrip Anda, pilih LLMCharacter GameObject yang dibuat di atas sebagai properti llmCharacter.
Itu saja ✨!
Anda juga dapat:
Untuk membangun aplikasi Android, Anda perlu menentukan backend skrip IL2CPP
dan ARM64
sebagai arsitektur target di pengaturan pemutar.
Pengaturan ini dapat diakses dari menu Edit > Project Settings
di bagian Player > Other Settings
.
Sebaiknya aktifkan opsi Download on Build
di LLM GameObject untuk mengunduh model saat peluncuran guna menjaga ukuran aplikasi tetap kecil.
Untuk menyimpan/memuat riwayat obrolan Anda secara otomatis, Anda dapat menentukan parameter Save
Karakter LLM ke nama file (atau jalur relatif) pilihan Anda. File disimpan di folder persistenDataPath Unity. Ini juga menyimpan status LLM yang berarti bahwa prompt yang di-cache sebelumnya tidak perlu dihitung ulang.
Untuk menyimpan riwayat obrolan secara manual, Anda dapat menggunakan:
llmCharacter.Save("nama file");
dan untuk memuat riwayat:
llmCharacter.Load("nama file");
di mana nama file nama file atau jalur relatif pilihan Anda.
void WarmupCompleted(){// melakukan sesuatu saat pemanasan selesaiDebug.Log("AI sudah bagus dan siap"); } void Game(){// fungsi permainan Anda..._ = llmCharacter.Warmup(WarmupCompleted);... }
Argumen terakhir fungsi Chat
adalah boolean yang menentukan apakah akan menambahkan pesan ke riwayat (default: true):
void Game(){// fungsi permainan Anda...string message = "Halo bot!";_ = llmCharacter.Chat(message, HandleReply, ReplyCompleted, false);... }
void Game(){// fungsi permainan Anda...string message = "Kucingnya sedang pergi";_ = llmCharacter.Complete(message, HandleReply, ReplyCompleted);... }
Untuk ini, Anda dapat menggunakan fungsionalitas async
/ await
:
async void Game(){// fungsi permainan Anda...string message = "Halo bot!";string reply = menunggu llmCharacter.Chat(message, HandleReply, ReplyCompleted);Debug.Log(reply);... }
menggunakan UnityEngine;menggunakan LLMUnity;public class MyScript : MonoBehaviour{LLM llm;LLMCharacter llmCharacter;async void Start(){// nonaktifkan gameObject agar theAwake tidak langsung dipanggilgameObject.SetActive(false);// Tambahkan objek LLMllm = gameObject. AddComponent<LLM>();// atur model menggunakan nama file model.// Model perlu ditambahkan ke manajer model LLM (lihat Manajemen model LLM) dengan memuat atau mengunduhnya.// Jika tidak, file model dapat disalin langsung di dalam folder StreamingAssets.llm.SetModel("Phi-3-mini-4k-instruct-q4.gguf" );// opsional: Anda juga dapat mengatur lora dengan cara yang sama dan mengatur bobotnya (jika diperlukan)llm.AddLora("my-lora.gguf");llm.SetLoraWeight(0.5f);// opsional: Anda dapat mengatur templat obrolan model jika tidak diidentifikasi dengan benar// Anda dapat menemukan daftar templat obrolan di ChatTemplate.templates.Keysllm.SetTemplate("phi-3");// opsional: atur jumlah threadllm.numThreads = -1;// opsional: aktifkan GPU dengan mengatur jumlah lapisan model yang akan diturunkan ke itllm.numGPULayers = 10;// Tambahkan LLMCharacter objectllmCharacter = gameObject.AddComponent<LLMCharacter>();// atur objek LLM yang menangani modelllmCharacter.llm = llm;// atur karakter promptllmCharacter.SetPrompt ("Obrolan antara manusia yang penasaran dan asisten kecerdasan buatan.");// mengatur AI dan pemain namellmCharacter.AIName = "AI";llmCharacter.playerName = "Manusia";// opsional: setel streaming ke false untuk mendapatkan hasil lengkap dalam sekali jalan // llmCharacter.stream = true; // opsional: setel jalur penyimpanan // llmCharacter.save = "AICharacter1";// opsional: aktifkan cache penyimpanan untuk menghindari penghitungan ulang saat memuat file penyimpanan (membutuhkan ~100 MB)// llmCharacter.saveCache = true;// opsional: atur tata bahasa// menunggu llmCharacter.SetGrammar("json.gbnf");// aktifkan kembali gameObjectgameObject.SetActive(true);}}
Anda dapat menggunakan server jarak jauh untuk melakukan pemrosesan dan mengimplementasikan karakter yang berinteraksi dengannya.
Buat servernya
Untuk membuat server:
Buat proyek dengan GameObject menggunakan skrip LLM
seperti dijelaskan di atas
Aktifkan opsi Remote
LLM
dan konfigurasikan parameter server secara opsional: port, kunci API, sertifikat SSL, kunci SSL
Bangun dan jalankan untuk memulai server
Alternatifnya, Anda dapat menggunakan biner server untuk penerapan yang lebih mudah:
Jalankan adegan di atas dari Editor dan salin perintah dari pesan Debug (dimulai dengan "Perintah server:")
Unduh biner server dan DLL dan ekstrak ke dalam folder yang sama
Temukan arsitektur yang Anda minati dari folder di atas misalnya untuk Windows dan CUDA gunakan windows-cuda-cu12.2.0
.
Anda juga dapat memeriksa arsitektur yang berfungsi untuk sistem Anda dari pesan Debug (dimulai dengan "Menggunakan arsitektur").
Dari baris perintah, ubah direktori ke folder arsitektur yang dipilih dan mulai server dengan menjalankan perintah yang disalin dari atas.
Buat karakternya
Buat proyek kedua dengan karakter permainan menggunakan skrip LLMCharacter
seperti dijelaskan di atas. Aktifkan opsi Remote
dan konfigurasikan host dengan alamat IP (dimulai dengan "http://") dan port server.
Fungsi Embeddings
dapat digunakan untuk mendapatkan emdeddings dari sebuah frase:
Daftar<float> embeddings = menunggu llmCharacter.Embeddings("hai, apa kabar?");
Dokumentasi terperinci tentang tingkat fungsi dapat ditemukan di sini:
LLM for Unity mengimplementasikan fungsi pencarian kemiripan super cepat dengan sistem Retrieval-Augmented Generation (RAG).
Hal ini didasarkan pada fungsionalitas LLM, dan pencarian Approximate Nearest Neighbors (ANN) dari perpustakaan usearch.
Pencarian semantik berfungsi sebagai berikut.
Membangun data Anda memberikan input teks (frasa, paragraf, dokumen) untuk ditambahkan ke data.
Setiap masukan dibagi menjadi beberapa bagian (opsional) dan dikodekan ke dalam penyematan dengan LLM.
Pencarian Anda kemudian dapat mencari input teks kueri.
Masukan tersebut dikodekan lagi dan masukan teks atau potongan yang paling mirip dalam data diambil.
Untuk menggunakan pencarian semantik:
buat GameObject untuk LLM seperti dijelaskan di atas. Unduh salah satu model RAG yang disediakan atau muat model Anda sendiri (opsi bagus dapat ditemukan di papan peringkat MTEB).
buat GameObject kosong. Di GameObject Inspector klik Add Component
dan pilih skrip RAG
.
Di tarik-turun Jenis Pencarian di RAG, pilih metode pencarian pilihan Anda. SimpleSearch
adalah pencarian brute-force sederhana, sedangkan DBSearch
adalah metode ANN cepat yang lebih disukai dalam banyak kasus.
Di dropdown Chunking Type pada RAG Anda dapat memilih metode untuk membagi input menjadi beberapa bagian. Hal ini berguna untuk mendapatkan makna yang lebih konsisten dalam setiap bagian data. Metode chunking untuk pemisahan menurut token, kata dan kalimat disediakan.
Alternatifnya, Anda dapat membuat RAG dari kode (dengan llm adalah LLM Anda):
RAG kain = gameObject.AddComponent<RAG>(); rag.Init(SearchMethods.DBSearch, ChunkingMethods.SentenceSplitter, llm);
Dalam skrip Anda, Anda kemudian dapat menggunakannya sebagai berikut?:
menggunakan LLMUnity; kelas publik MyScript : MonoBehaviour{ kain lap; async void Game(){...string[] inputs = new string[]{ "Hai! Saya sistem pencarian.", "cuacanya bagus. Saya menyukainya.", "Saya sistem RAG "};// tambahkan input ke RAGforeach (input string dalam input) menunggu rag.Tambahkan(input);// dapatkan 2 input yang paling mirip dan jaraknya (ketidaksamaan) dengan kueri penelusuran(hasil string[], float [] jarak) = menunggu rag.Search("hello!", 2);// untuk mendapatkan bagian teks yang paling mirip (chnuks) Anda dapat mengaktifkan opsi returnChunksrag.ReturnChunks(true);(results, distances) = menunggu rag.Search("hello! ", 2);... }}
Anda dapat menyimpan status RAG (disimpan di folder Assets/StreamingAssets
):
lap.Simpan("rag.zip");
dan memuatnya dari disk:
menunggu kain.Muat("kain.zip");
Anda dapat menggunakan RAG untuk memasukkan data yang relevan ke LLM berdasarkan pesan pengguna:
string message = "Bagaimana cuacanya?"; (string[] samePhrases, float[] distances) = menunggu rag.Search(message, 3); string prompt = "Jawab pertanyaan pengguna berdasarkan data yang disediakan.nn"; prompt += $"Permintaan pengguna: {message}nn"; perintah += $"Data:n"; foreach (rangkai frasa serupa dalam frasa serupa) prompt += $"n- {similarPhrase}"; _ = llmCharacter.Chat(prompt, HandleReply, ReplyCompleted);
Sampel RAG
mencakup contoh implementasi RAG serta contoh integrasi RAG-LLM.
Itu saja ✨!
LLM untuk Unity menggunakan manajer model yang memungkinkan memuat atau mengunduh LLM dan mengirimkannya langsung ke dalam game Anda.
Manajer model dapat ditemukan sebagai bagian dari LLM GameObject:
Anda dapat mengunduh model dengan tombol Download model
.
LLM untuk Unity mencakup model canggih berbeda yang ada di dalamnya untuk ukuran model berbeda, dikuantisasi dengan metode Q4_K_M.
Model alternatif dapat diunduh dari HuggingFace dalam format .gguf.
Anda dapat mengunduh model secara lokal dan memuatnya dengan tombol Load model
, atau menyalin URL di bidang Download model > Custom URL
untuk langsung mengunduhnya.
Jika model HuggingFace tidak menyediakan file gguf, file tersebut dapat dikonversi ke gguf dengan konverter online ini.
Templat obrolan yang digunakan untuk membuat petunjuk ditentukan secara otomatis dari model (jika ada entri yang relevan) atau nama model.
Jika salah teridentifikasi, Anda dapat memilih template lain dari dropdown template obrolan.
Model yang ditambahkan di manajer model disalin ke game selama proses pembangunan.
Anda dapat menghilangkan model agar tidak dibuat dengan menghapus centang pada kotak "Bangun".
Untuk menghapus model (tetapi tidak menghapusnya dari disk), Anda dapat mengklik tombol bin.
Jalur dan URL (jika diunduh) dari setiap model yang ditambahkan ditampilkan dalam tampilan akses manajer model yang diperluas dengan tombol >>
:
Anda dapat membuat build yang lebih ringan dengan memilih opsi Download on Build
.
Dengan menggunakan opsi ini, model akan diunduh saat pertama kali game dimulai, bukan disalin saat build.
Jika Anda telah memuat model secara lokal, Anda perlu menyetel URL-nya melalui tampilan yang diperluas, jika tidak maka model tersebut akan disalin di build.
❕ Sebelum menggunakan model apa pun pastikan Anda memeriksa lisensinya ❕
Folder Samples~ berisi beberapa contoh interaksi?:
SimpleInteraction: Mendemonstrasikan interaksi sederhana dengan karakter AI
MultipleCharacters: Mendemonstrasikan interaksi sederhana menggunakan beberapa karakter AI
RAG: sampel RAG. Termasuk contoh penggunaan RAG untuk memberikan informasi ke LLM
ChatBot: Mendemonstrasikan interaksi antara pemain dan AI dengan UI yang mirip dengan aplikasi perpesanan (lihat gambar di bawah)
KnowledgeBaseGame: Game detektif sederhana menggunakan basis pengetahuan untuk memberikan informasi kepada LLM berdasarkan google/mysteryofthreebots
AndroidDemo: Contoh aplikasi Android dengan layar awal dengan kemajuan pengunduhan model
Untuk menginstal sampel:
Buka Manajer Paket: Window > Package Manager
Pilih LLM for Unity
. Dari Tab Samples
, klik Import
di samping sampel yang ingin Anda pasang.
Sampel dapat dijalankan dengan adegan Scene.unity
yang ada di dalam foldernya.
Dalam adegan, pilih LLM
GameObject dan klik tombol Download Model
untuk mengunduh model default atau Load model
untuk memuat model Anda sendiri (lihat Manajemen model LLM).
Simpan adegan, jalankan dan nikmatilah!
Show/Hide Advanced Options
Beralih untuk menampilkan/menyembunyikan opsi lanjutan dari bawah
Log Level
pilih seberapa panjang pesan lognya
Use extras
untuk menginstal dan izinkan penggunaan fitur tambahan (perhatian kilat dan jumlah IQ)
Pilih Remote
untuk memberikan akses jarak jauh ke LLM
Port
port untuk menjalankan server LLM (jika Remote
diatur)
Num Threads
jumlah thread yang akan digunakan (default: -1 = semua)
Num GPU Layers
jumlah lapisan model yang akan dipindahkan ke GPU. Jika disetel ke 0 GPU tidak digunakan. Gunakan angka yang besar yaitu >30 untuk memanfaatkan GPU semaksimal mungkin. Perhatikan bahwa nilai ukuran konteks yang lebih tinggi akan menggunakan lebih banyak VRAM. Jika GPU pengguna tidak didukung, LLM akan kembali ke CPU
Debug
pilih untuk mencatat output model di Unity Editor
misalnya Mengatur Parallel Prompts
ke 1 dan slot 0 untuk semua objek LLMCharacter akan menggunakan konteks penuh, namun keseluruhan prompt perlu dihitung (tanpa cache) setiap kali objek LLMCharacter digunakan untuk obrolan.
Dont Destroy On Load
pilih untuk tidak menghancurkan LLM GameObject saat memuat Scene baru
Parallel Prompts
jumlah prompt/slot yang dapat terjadi secara paralel (default: -1 = jumlah objek LLMCharacter). Perhatikan bahwa ukuran konteks dibagi di antara slot. API key
Kunci API yang digunakan untuk mengizinkan akses ke permintaan dari objek LLMCharacter (jika Remote
disetel)
Load SSL certificate
memungkinkan untuk memuat sertifikat SSL untuk enkripsi permintaan ujung ke ujung (jika Remote
diatur). Membutuhkan kunci SSL juga.
Load SSL key
memungkinkan untuk memuat kunci SSL untuk enkripsi permintaan end-to-end (jika Remote
diatur). Membutuhkan sertifikat SSL juga.
SSL certificate path
sertifikat SSL yang digunakan untuk enkripsi permintaan end-to-end (jika Remote
diatur).
SSL key path
kunci SSL yang digunakan untuk enkripsi permintaan end-to-end (jika Remote
diatur).
Download model
klik untuk mengunduh salah satu model default
Load model
klik untuk memuat model Anda sendiri dalam format .gguf
Download on Start
memungkinkan untuk mengunduh model LLM saat pertama kali permainan dimulai. Alternatifnya, model LLM akan disalin langsung di build
Context Size
Ukuran konteks prompt (0 = ukuran konteks model) Download lora
klik untuk mengunduh model LoRA dalam format .gguf
Load lora
klik untuk memuat model LoRA dalam format .gguf
Batch Size
Ukuran batch untuk pemrosesan yang cepat (default: 512)
Model
jalur model yang digunakan (relatif terhadap folder Assets/StreamingAssets)
Chat Template
templat obrolan yang digunakan untuk LLM
Lora
jalur LoRA yang digunakan (relatif terhadap folder Assets/StreamingAssets)
Lora Weights
bobot LoRA yang digunakan
Flash Attention
klik untuk menggunakan perhatian flash pada model (jika Use extras
diaktifkan)
Base Prompt
prompt dasar umum untuk digunakan di semua objek LLMCharacter menggunakan LLM
Show/Hide Advanced Options
Beralih untuk menampilkan/menyembunyikan opsi lanjutan dari bawah
Log Level
pilih seberapa panjang pesan lognya
Use extras
untuk menginstal dan izinkan penggunaan fitur tambahan (perhatian kilat dan jumlah IQ)
Remote
apakah LLM yang digunakan remote atau lokal
LLM
LLM GameObject (jika Remote
tidak disetel)
Hort
ip server LLM (jika Remote
diatur)
Port
port server LLM (jika Remote
diatur)
Num Retries
jumlah percobaan ulang permintaan HTTP dari server LLM (jika Remote
diatur)
API key
Kunci API server LLM (jika Remote
disetel)
Save
simpan nama file atau jalur relatif Save Cache
pilih untuk menyimpan status LLM beserta history chatnya. Status LLM biasanya sekitar 100MB+.
Debug Prompt
pilih untuk mencatat perintah yang dibuat di Unity Editor
Player Name
nama pemain
AI Name
nama AI tersebut
Deskripsi Prompt
tentang peran AI
Pilih Stream
untuk menerima balasan dari model saat diproduksi (disarankan!).
Jika tidak dipilih, balasan lengkap dari model akan diterima sekaligus
Num Predict
jumlah maksimum token yang akan diprediksi (default: 256, -1 = tak terhingga, -2 = hingga konteks terisi) Load grammar
klik untuk memuat tata bahasa dalam format .gbnf
Grammar
jalur tata bahasa yang digunakan (relatif terhadap folder Assets/StreamingAssets)
Cache Prompt
menyimpan prompt yang sedang berlangsung dari obrolan (default: true) Slot
slot server yang digunakan untuk komputasi. Nilai dapat diatur dari 0 hingga Parallel Prompts
-1 (default: -1 = slot baru untuk setiap karakter)
Benih Seed
untuk reproduktifitas. Untuk hasil acak setiap kali gunakan -1
Temperature
Suhu LLM, nilai yang lebih rendah memberikan jawaban yang lebih deterministik (default: 0,2)Top K
(default: 40, 0 = dinonaktifkan)Top P
(default: 0.9, 1.0 = dinonaktifkan)Min P
probabilitas minimum untuk menggunakan token (default: 0,05)Repeat Penalty
mengontrol pengulangan urutan token dalam teks yang dihasilkan (default: 1.1)Presence Penalty
penalti kehadiran token berulang (default: 0.0, 0.0 = dinonaktifkan)Frequency Penalty
penalti frekuensi token berulang (default: 0,0, 0,0 = dinonaktifkan) Tfs_z
: mengaktifkan pengambilan sampel bebas ekor dengan parameter z (default: 1.0, 1.0 = dinonaktifkan).
Typical P
: mengaktifkan pengambilan sampel tipikal lokal dengan parameter p (default: 1.0, 1.0 = dinonaktifkan).
Repeat Last N
: N token terakhir yang perlu dipertimbangkan untuk menghukum pengulangan (default: 64, 0 = dinonaktifkan, -1 = ukuran ctx).
Penalize Nl
: memberikan penalti pada token baris baru ketika menerapkan penalti berulang (default: true).
Penalty Prompt
: prompt untuk tujuan evaluasi penalti. Dapat berupa null
, string, atau array angka yang mewakili token (default: null
= gunakan prompt
asli).
Mirostat
: mengaktifkan pengambilan sampel Mirostat, mengendalikan kebingungan selama pembuatan teks (default: 0, 0 = dinonaktifkan, 1 = Mirostat, 2 = Mirostat 2.0).
Mirostat Tau
: mengatur entropi target Mirostat, parameter tau (default: 5.0).
Mirostat Eta
: mengatur kecepatan pembelajaran Mirostat, parameter eta (default: 0.1).
N Probs
: jika lebih besar dari 0, responsnya juga berisi probabilitas N token teratas untuk setiap token yang dihasilkan (default: 0)
Ignore Eos
: aktifkan untuk mengabaikan token akhir aliran dan terus menghasilkan (default: false).
Lisensi LLM untuk Unity adalah MIT (LICENSE.md) dan menggunakan perangkat lunak pihak ketiga dengan lisensi MIT dan Apache. Beberapa model yang termasuk dalam aset menentukan persyaratan lisensinya sendiri, harap tinjau persyaratan tersebut sebelum menggunakan setiap model. Lisensi pihak ketiga dapat ditemukan di (Pemberitahuan Pihak Ketiga.md).