# Kebijakan

Setiap policy mewarisi `PreTrainedPolicy`, yang menggabungkan `torch.nn.Module` dengan mixin Hub, sehingga setiap policy dapat didorong ke dan dimuat dari Hugging Face Hub dengan dua panggilan yang sama.

Setiap kebijakan memiliki panduan tersendiri yang berisi resep pelatihan dan hasilnya — [ACT](../act), [SmolVLA](../smolvla), [π₀](../pi0), [π₀.₅](../pi05), dan lainnya tercantum di bawah Policies. Untuk menambahkan satu kebijakan, lihat [Adding a Policy](../bring_your_own_policies).

## PreTrainedPolicy[[lerobot.policies.PreTrainedPolicy]]

#### lerobot.policies.PreTrainedPolicy[[lerobot.policies.PreTrainedPolicy]]

```python
lerobot.policies.PreTrainedPolicy(config: PreTrainedConfig, *inputs, **kwargs)
```

[Sumber](https://github.com/huggingface/lerobot/blob/v0.7.0/src/lerobot/policies/pretrained.py#L73)

Kelas dasar untuk model kebijakan.

#### chunk_inference_spec[[lerobot.policies.PreTrainedPolicy.chunk_inference_spec]]

```python
chunk_inference_spec()
```

[Sumber](https://github.com/huggingface/lerobot/blob/v0.7.0/src/lerobot/policies/pretrained.py#L308)

Deklarasikan kontrak penulis default untuk penyajian chunk observasi saat ini.

Mewarisi implementasi ini menyatakan bahwa `predict_action_chunk` melakukan semua persiapan yang diperlukan oleh pemanggil langsung, menerima observasi saat ini secara utuh, dan mengembalikan `[B, chunk_size, A]` dalam koordinat model. Pasangan prosesor kanoniknya harus mendukung seluruh chunk. `n_action_steps` adalah slice playback biasa; RTC mempertahankan horizon prediksi penuh.

Kebijakan yang memerlukan persiapan hanya select_action, tata letak aksi lain, atau pengambilan sampel temporal harus menimpa metode ini dan menolak konfigurasi yang tidak didukung atau menyediakan runner khusus. Keberadaan metode atau keberhasilan warmup bukanlah bukti untuk kontrak ini. Status kebijakan/prosesor hanya diizinkan di dalam sesi eksklusif dan reset() harus membersihkannya untuk eksekusi baru.

#### count_queued_actions[[lerobot.policies.PreTrainedPolicy.count_queued_actions]]

```python
count_queued_actions()
```

[Sumber](https://github.com/huggingface/lerobot/blob/v0.7.0/src/lerobot/policies/pretrained.py#L263)

Jumlah aksi yang sudah dihitung dan menunggu untuk disajikan.

0 untuk kebijakan yang tidak mempertahankan antrean aksi (tidak pernah melakukan chunking) atau yang antreannya saat ini kosong (segera menghitung chunk baru). Membaca antrean yang sama yang dibersihkan oleh `drop_queued_actions`, yang namanya tercantum dalam :attr:*_action_queue_attrs*.

#### drop_queued_actions[[lerobot.policies.PreTrainedPolicy.drop_queued_actions]]

```python
drop_queued_actions()
```

[Sumber](https://github.com/huggingface/lerobot/blob/v0.7.0/src/lerobot/policies/pretrained.py#L245)

Buang aksi yang telah dihitung sebelumnya oleh panggilan `select_action` sebelumnya.

Memaksa jalur maju baru pada `select_action` berikutnya sehingga perubahan kondisioning di tengah episode (misalnya instruksi baru) langsung berlaku, bukan setelah antrean kosong. Berbeda dengan `reset`, sisa status episode tetap dipertahankan. Panggil dari thread yang memanggil `select_action`. Membersihkan antrean yang namanya tercantum dalam :attr:*_action_queue_attrs*; kebijakan yang tidak mempertahankan antrean aksi mewarisi operasi tanpa efek (no-op).

#### forward[[lerobot.policies.PreTrainedPolicy.forward]]

```python
forward(batch: dict[str, Tensor])
```

[Sumber](https://github.com/huggingface/lerobot/blob/v0.7.0/src/lerobot/policies/pretrained.py#L376)

**Parameter:**

batch (dict[str, Tensor]) : _deskripsi_

**Mengembalikan:** tuple[Tensor, dict | None]

Loss dan kemungkinan informasi lainnya. Selain loss yang merupakan Tensor, semua item lainnya harus ramah logging, berupa tipe Python native.

_ringkasan_

#### from_pretrained[[lerobot.policies.PreTrainedPolicy.from_pretrained]]

```python
from_pretrained(pretrained_name_or_path: str | Path, config: PreTrainedConfig | None = None, force_download: bool = False, resume_download: bool | None = None, proxies: dict | None = None, token: str | bool | None = None, cache_dir: str | Path | None = None, local_files_only: bool = False, revision: str | None = None, strict: bool = False, **kwargs)
```

[Sumber](https://github.com/huggingface/lerobot/blob/v0.7.0/src/lerobot/policies/pretrained.py#L159)

Kebijakan secara default diatur dalam mode evaluasi menggunakan `policy.eval()` (modul dropout dinonaktifkan). Untuk melatihnya, Anda harus terlebih dahulu mengembalikannya ke mode pelatihan dengan `policy.train()`.

#### generate_text[[lerobot.policies.PreTrainedPolicy.generate_text]]

```python
generate_text(batch: dict[str, Any])
```

[Sumber](https://github.com/huggingface/lerobot/blob/v0.7.0/src/lerobot/policies/pretrained.py#L363)

Jalankan kepala teks kebijakan pada batch observasi yang telah dipreproses.

Permintaan ditumpangkan pada `batch` sebagai data pelengkap (:data:*~lerobot.utils.constants.QUERY_KIND* / `QUERY_TEXT`); balasan `next_subtask` langsung dimasukkan ke `set_task`, sehingga harus tepat satu subtask, bukan rencana atau daftar bernomor. Mengembalikan teks yang dihasilkan, dan tidak boleh mengubah state yang menghasilkan aksi (antrean, riwayat observasi).

#### get_optim_params[[lerobot.policies.PreTrainedPolicy.get_optim_params]]

```python
get_optim_params()
```

[Sumber](https://github.com/huggingface/lerobot/blob/v0.7.0/src/lerobot/policies/pretrained.py#L230)

Mengembalikan parameter spesifik kebijakan (parameter atau grup parameter) untuk diteruskan ke optimizer.

#### predict_action_chunk[[lerobot.policies.PreTrainedPolicy.predict_action_chunk]]

```python
predict_action_chunk(batch: dict[str, Tensor], **kwargs: Unpack[ActionSelectKwargs])
```

[Sumber](https://github.com/huggingface/lerobot/blob/v0.7.0/src/lerobot/policies/pretrained.py#L389)

Mengembalikan chunk aksi (untuk kebijakan chunking aksi) untuk observasi tertentu, berpotensi dalam mode batch.

Kelas turunan yang menggunakan pengirisan aksi harus menggunakan metode ini di dalam `select_action` untuk membentuk irisan aksi yang di-cache untuk dipilih.

Kebijakan yang mendukung kata kunci `noise` memulai sampling-nya dari tensor tersebut, dengan bentuk yang sama seperti yang akan diambil oleh kebijakan. Ketika `noise` adalah None, kebijakan mengambilnya seperti biasa.

Mungkin mengembalikan `PolicyOutput` yang membawa chunk dan prediksinya, seperti pada `select_action`.

#### push_model_to_hub[[lerobot.policies.PreTrainedPolicy.push_model_to_hub]]

```python
push_model_to_hub(cfg: TrainPipelineConfig, peft_model = None, state_dict: dict[str, Tensor] | None = None, dataset_meta: LeRobotDatasetMetadata | None = None)
```

[Sumber](https://github.com/huggingface/lerobot/blob/v0.7.0/src/lerobot/policies/pretrained.py#L431)

**Parameter:**

cfg (TrainPipelineConfig) : Konfigurasi pelatihan; disimpan sebagai *train_config.json* dan digunakan untuk merender kartu model.

peft_model : Pembungkus PEFT saat melatih adapter, di mana bobotnya menggantikan bobot model penuh di repositori yang dipublikasikan. Nilainya secara default adalah None.

state_dict (dict[str, Tensor] | None) : Diabaikan; bobot kini dikumpulkan secara internal ketika kebijakan dipecah. Bawaan adalah None.

dataset_meta (LeRobotDatasetMetadata | None) : Metadata dataset untuk kartu model, jika tersedia. Bawaan adalah None.

Publikasikan kebijakan ini ke Hub.

Tidak didukung lagi: gunakan `lerobot.common.train_utils.publish_trained_model()` sebagai gantinya, yang juga menerbitkan pre/post-processor bersama dengan model.

#### reset[[lerobot.policies.PreTrainedPolicy.reset]]

```python
reset()
```

[Sumber](https://github.com/huggingface/lerobot/blob/v0.7.0/src/lerobot/policies/pretrained.py#L237)

Dipanggil setiap kali lingkungan direset.

Melakukan hal-hal seperti membersihkan cache.

#### select_action[[lerobot.policies.PreTrainedPolicy.select_action]]

```python
select_action(batch: dict[str, Tensor], **kwargs: Unpack[ActionSelectKwargs])
```

[Sumber](https://github.com/huggingface/lerobot/blob/v0.7.0/src/lerobot/policies/pretrained.py#L405)

Kembalikan satu aksi untuk dijalankan di lingkungan (mungkin dalam mode batch).

Ketika model menggunakan riwayat observasi, atau menghasilkan urutan aksi, metode ini menangani peng-cache-an.

Mengembalikan tensor aksi polos, atau *PolicyOutput*: sebuah batch, yang dikunci seperti batch input, yang menyimpan aksi di bawah `"action"` dan apa yang diharapkan atau diyakini oleh kebijakan selain itu di bawah `"prediction"` (sebuah *PolicyPrediction*). Prediksi di-batch seperti aksi, satu nilai per lingkungan, dan setiap entri dikunci oleh apa yang dirujuknya: frame prediksi oleh kunci observasi yang diprediksikan, bahasa oleh gaya anotasi ("subtask", "plan", "memory"), kotak (skema anotasi VQA) oleh kamera tempat kotak tersebut digambar. Pemanggil menormalisasi dua tipe pengembalian dengan *lerobot.processor.policy_output_to_transition*; *--display_data* menampilkan prediksi dari lingkungan pertama.

Sebuah prediksi menyimpan nilai untuk langkah ini: satu yang mencakup sebuah chunk (misalnya klip yang dibayangkan) dikembalikan per bagian, beserta aksi yang dimiliki oleh masing-masing bagian. Setiap entri tetap ditampilkan hingga dikembalikan lagi. Prediksi bersifat opsional melalui field konfigurasi yang dipilih oleh kebijakan, dan tidak boleh mengubah aksi; teks yang seharusnya mengarahkan kebijakan dikirim melalui *generate_text*.

#### supports_rtc[[lerobot.policies.PreTrainedPolicy.supports_rtc]]

```python
supports_rtc()
```

[Sumber](https://github.com/huggingface/lerobot/blob/v0.7.0/src/lerobot/policies/pretrained.py#L280)

Apakah kebijakan ini mengimplementasikan semantik inferensi Real-Time Chunking.

#### supports_text_generation[[lerobot.policies.PreTrainedPolicy.supports_text_generation]]

```python
supports_text_generation()
```

[Sumber](https://github.com/huggingface/lerobot/blob/v0.7.0/src/lerobot/policies/pretrained.py#L359)

Apakah kebijakan ini mengimplementasikan `generate_text` (override keduanya secara bersamaan).

#### validate_chunk_input_features[[lerobot.policies.PreTrainedPolicy.validate_chunk_input_features]]

```python
validate_chunk_input_features(features: tuple[FeatureSpec, ...])
```

[Sumber](https://github.com/huggingface/lerobot/blob/v0.7.0/src/lerobot/policies/pretrained.py#L284)

Validasi input kanonik sebelum disajikan, dengan bentuk yang tepat secara default.

Kebijakan yang secara eksplisit mengubah ukuran atau memberi masker pada input yang hilang dapat menimpa kontrak ini. Pengecualian semacam itu harus berada di sisi kebijakan, bukan di sisi transport. Skema wire yang dinegosiasikan tetap menetapkan bentuk dari setiap fitur yang diberikan.

#### wrap_with_peft[[lerobot.policies.PreTrainedPolicy.wrap_with_peft]]

```python
wrap_with_peft(peft_config = None, peft_cli_overrides: dict | None = None)
```

[Sumber](https://github.com/huggingface/lerobot/blob/v0.7.0/src/lerobot/policies/pretrained.py#L471)

**Parameter:**

peft_config : Konfigurasi adapter PEFT opsional (misalnya, LoraConfig). Jika disediakan, digunakan secara langsung (dengan override CLI diterapkan).

peft_cli_overrides : dict opsional berisi override CLI (method_type, target_modules, r, dll.) Nilai-nilai ini digabungkan dengan nilai default kebijakan untuk membangun konfigurasi akhir.

Bungkus kebijakan ini dengan adapter PEFT untuk fine-tuning yang efisien secara parameter.

Metode ini adalah titik masuk tunggal untuk integrasi PEFT. Subkelas harus menimpa `_get_default_peft_targets()` untuk menyediakan modul target default, dan `_validate_peft_config()` untuk validasi yang spesifik terhadap kebijakan.

## PreTrainedConfig[[lerobot.configs.PreTrainedConfig]]

#### lerobot.configs.PreTrainedConfig[[lerobot.configs.PreTrainedConfig]]

```python
lerobot.configs.PreTrainedConfig(n_obs_steps: int = 1, input_features: dict[str, lerobot.configs.types.PolicyFeature] | None = <factory>, output_features: dict[str, lerobot.configs.types.PolicyFeature] | None = <factory>, device: str | None = None, dtype: torch.dtype | None = None, use_amp: bool = False, use_peft: bool = False, push_to_hub: bool = True, repo_id: str | None = None, private: bool | None = None, tags: list[str] | None = None, license: str | None = None, pretrained_path: pathlib.Path | None = None, pretrained_revision: str | None = None)
```

[Sumber](https://github.com/huggingface/lerobot/blob/v0.7.0/src/lerobot/configs/policies.py#L42)

**Parameter:**

n_obs_steps : Jumlah langkah lingkungan berupa observasi yang akan diteruskan ke kebijakan (mengambil langkah saat ini dan langkah-langkah tambahan sebelumnya).

input_features : Kamus yang mendefinisikan PolicyFeature dari data input untuk kebijakan. Kunci mewakili nama data input, dan nilainya adalah PolicyFeature, yang terdiri dari atribut FeatureType dan shape.

output_features : Kamus yang mendefinisikan PolicyFeature dari data keluaran untuk kebijakan. Kunci mewakili nama data keluaran, dan nilainya adalah PolicyFeature, yang terdiri dari atribut FeatureType dan shape.

normalization_mapping : Kamus yang memetakan dari nilai str dari FeatureType (misalnya, "STATE", "VISUAL") ke NormalizationMode yang sesuai (misalnya, NormalizationMode.MIN_MAX)

Kelas konfigurasi dasar untuk model kebijakan.

## make_policy[[lerobot.policies.make_policy]]

#### lerobot.policies.make_policy[[lerobot.policies.make_policy]]

```python
lerobot.policies.make_policy(cfg: PreTrainedConfig, ds_meta: LeRobotDatasetMetadata | None = None, env_cfg: EnvConfig | None = None, rename_map: dict[str, str] | None = None, defer_weight_load: bool = False, pretrained_path: str | Path | None = None)
```

[Sumber](https://github.com/huggingface/lerobot/blob/v0.7.0/src/lerobot/policies/factory.py#L255)

**Parameter:**

cfg (PreTrainedConfig) : Konfigurasi untuk kebijakan yang akan dibuat. Jika `cfg.pretrained_path` diset, kebijakan akan dimuat dengan bobot dari path tersebut.

ds_meta (LeRobotDatasetMetadata | None) : Metadata dataset yang digunakan untuk menyimpulkan bentuk dan tipe fitur. Juga menyediakan statistik untuk lapisan normalisasi.

env_cfg (EnvConfig | None) : Konfigurasi lingkungan yang digunakan untuk menyimpulkan bentuk dan tipe fitur. Salah satu dari `ds_meta` atau `env_cfg` harus disediakan.

rename_map (dict[str, str] | None) : Pemetaan opsional dari kunci fitur dataset atau lingkungan untuk mencocokkan nama fitur kebijakan yang diharapkan (misalnya, `"left"` → `"camera1"`).

defer_weight_load (bool) : Membangun kebijakan persis seperti yang akan dibangun oleh `from_pretrained` — resolusi konfigurasi yang sama, buffer yang diturunkan dari statistik yang sama, penempatan perangkat dan mode eval yang sama — tetapi melewati pemuatan bobot safetensors. Digunakan saat melanjutkan dari checkpoint DCP, di mana bobot terpecah (sharded) akan mengalir masuk setelah `accelerator.prepare()` (mesin checkpoint terdistribusi akan menimpa inisialisasi acak). Untuk kebijakan PEFT, hanya bobot adapter yang dilewati, sedangkan bobot dasar dimuat seperti biasa.

pretrained_path (str | Path | None) : Muat bobot (atau adapter PEFT) dari sini alih-alih dari `cfg.pretrained_path`, yang tetap menamai model tempat kebijakan dilatih ulang setelah kebijakan dibangun. Digunakan saat melanjutkan dari checkpoint.

**Mengembalikan:** `PreTrainedPolicy`

Model kebijakan yang telah diinstansiasi dan ditempatkan pada perangkat.

**Mengangkat:** ``ValueError`` atau ``NotImplementedError``

- ``ValueError`` -- Jika keduanya atau tidak satupun dari `ds_meta` dan `env_cfg` diberikan.
- ``NotImplementedError`` -- Jika mencoba menggunakan kombinasi kebijakan-backend yang tidak didukung (misalnya, VQBeT dengan 'mps').

Instansiasi model kebijakan.

Fungsi pabrik ini menangani logika pembuatan kebijakan, yang memerlukan penentuan bentuk fitur input dan output. Bentuk-bentuk ini dapat diturunkan dari objek `LeRobotDatasetMetadata` atau objek `EnvConfig`. Fungsi ini dapat menginisialisasi kebijakan baru dari nol atau memuat kebijakan yang telah dilatih sebelumnya.

