LeRobot documentation

Araçlar

You are viewing main version, which requires installation from source. If you'd like regular pip install, checkout the latest stable version (v0.7.0).
Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

Araçlar

LeRobot, politikalar içinde araç çağrılarını destekler — asistan mesajları, çalışma zamanının gerçek bir uygulamaya (TTS, denetleyici, kayıt tutucu, …) yönlendirdiği say(text="OK, starting now") gibi yapılandırılmış çağrılar üretebilir.

Bu sayfa şunları kapsar:

  1. Araç kataloğunun bulunduğu yer.
  2. Etiketleme hattının araç çağrısı atomlarını nasıl ürettiği.
  3. Kendi aracınızı nasıl eklersiniz.

Araçların nerede beyan edildiği

İki katman.

Katalog — OpenAI tarzı işlev şemalarının listesi — her veri setinde meta/info.json["tools"] konumundadır. Örnek:

{
  "features": { "...": "..." },
  "tools": [
    {
      "type": "function",
      "function": {
        "name": "say",
        "description": "Speak a short utterance to the user via the TTS executor.",
        "parameters": {
          "type": "object",
          "properties": {
            "text": {
              "type": "string",
              "description": "The verbatim text to speak."
            }
          },
          "required": ["text"]
        }
      }
    }
  ]
}

Veri seti meta verisi erişimcisi üzerinden okuyun:

from lerobot.datasets.dataset_metadata import LeRobotDatasetMetadata

meta = LeRobotDatasetMetadata(repo_id="pepijn/super_poulain_final_annotations")
tools = meta.tools     # list[dict] — OpenAI tool schemas

Veri setinin info.json dosyası herhangi bir araç bildirmiyorsa, meta.tools lerobot.datasets.language modülündeki DEFAULT_TOOLS değerini döndürür — şu anda kanonik say şemasına sahip tek girişli bir liste. Bu sayede etiketlenmemiş veri setleri ve sohbet şablonu kullanıcıları herhangi bir yapılandırma gerektirmeden çalışmaya devam eder:

prompt_str = tokenizer.apply_chat_template(
    sample["messages"],
    tools=meta.tools,                 # works either way
    add_generation_prompt=False,
    tokenize=False,
)

Uygulamalar — çalıştırılabilir Python — src/lerobot/tools/ altında, her araç için bir dosya olarak yer alacak. Çalışma zamanı yönlendirici ve standart say uygulaması (Kyutai’nin pocket-tts’ini saran) burada açıklanan katalog katmanının bir parçası değildir; bugün bu katman yalnızca şema depolamasını ve DEFAULT_TOOLS yedek sabitini içerir.

Satır başına araç çağrıları

Yukarıdaki katalog neyin çağrılabileceğini açıklar. Gerçek çağrı — fonksiyon adı ve argüman değerleri — language_events içindeki asistan atomlarında satır bazında saklanır:

{
  "role": "assistant",
  "content": null,
  "style": null,
  "timestamp": 12.4,
  "camera": null,
  "tool_calls": [
    { "type": "function",
      "function": { "name": "say", "arguments": { "text": "On it." } } }
  ]
}

Recipes, bunları tool_calls_from aracılığıyla işlenmiş mesajlara yerleştirir:

user_interjection_response:
  bindings:
    speech: "emitted_at(t, role=assistant, tool_name=say)"
  messages:
    - { role: user, content: "${task}", stream: high_level }
    - {
        role: assistant,
        content: "${current_plan}",
        stream: high_level,
        target: true,
        tool_calls_from: speech,
      }

Modelin eğitim hedefi, hem plan metnini ve say araç çağrısını içeren tek bir asistan turudur. Çıkarım sırasında çalışma zamanı, üretilen metni yapılandırılmış tool_calls biçimine geri ayrıştırır ve eşleşen uygulamaya yönlendirir.

Kendi aracınızı nasıl eklersiniz

Not: Aşağıdaki 2. ve 3. adımlar, bugün dağıtılan katalog katmanının bir parçası olmayan çalışma zamanı katmanını (src/lerobot/tools/, Tool protokolü, TOOL_REGISTRY, get_tools(meta)) tanımlar; bu modüller henüz ağaçta mevcut değil. Aracın, modelin çağrıyı oluşturabilmesi için sohbet şablonu tarafından meta.tools aracılığıyla görünür hale gelmesi yalnızca 1. adım yeterlidir; çağrının çıkarım sırasında çalıştırılması ise çalışma zamanı katmanını gerektirir.

Üç adım. Somut örnek: politikanın, düzenli kontrol döngüsünün dışında ek bir gözlem yakalamak için çağırabileceği bir record_observation aracı.

Adım 1 — şemayı tanımlayın

Notlandırma hattını çalıştırmadan önce, dosyayı doğrudan disk üzerinde düzenleyerek meta/info.json["tools"] altında bir giriş ekleyin (korunacaktır).

{
  "tools": [
    { "type": "function", "function": { "name": "say", "...": "..." } },
    {
      "type": "function",
      "function": {
        "name": "record_observation",
        "description": "Capture a high-resolution still image for the user.",
        "parameters": {
          "type": "object",
          "properties": {
            "label": {
              "type": "string",
              "description": "Short label for the saved image."
            }
          },
          "required": ["label"]
        }
      }
    }
  ]
}

Şema, OpenAI’nin fonksiyon çağırma (function-calling) sözleşmesini tam olarak takip eder, bu sayede sohbet şablonu onu yerel olarak (natively) işleyebilir.

Adım 2 — çağrıyı uygulayın

src/lerobot/tools/record_observation.py dosyasını oluşturun:

from .base import Tool
from typing import Any

RECORD_OBSERVATION_SCHEMA: dict[str, Any] = { "...": "..." }   # mirrors the JSON above


class RecordObservationTool:
    name = "record_observation"
    schema = RECORD_OBSERVATION_SCHEMA

    def __init__(self, schema: dict | None = None, output_dir: str = "."):
        self.output_dir = output_dir

    def call(self, arguments: dict) -> str:
        label = arguments["label"]
        # ... save the latest camera frame to <output_dir>/<label>.png ...
        return f"saved {label}.png"

Araç başına bir dosya, bağımlılıkların izole kalmasını sağlar — record_observation pillow çekebilirken say pocket-tts çeker. Yalnızca ihtiyaç duydukları araçları kuran kullanıcılar, ağır dolaylı bağımlılıklardan kaçınır.

Adım 3 — kaydedin

src/lerobot/tools/registry.py dosyasına ekleyin:

from .record_observation import RecordObservationTool

TOOL_REGISTRY["record_observation"] = RecordObservationTool

Bu kadar. Çalışma zamanında get_tools(meta), meta.tools içindeki her şemayı arar, eşleşen kayıtlı sınıfı örnekler ve yönlendiricinin (dispatcher) yönlendirebileceği bir ad → örnek sözlüğü döndürür.

Bir aracın uygulamasını yazmadan kullanmak istiyorsanız (örneğin yalnızca eğitim zamanı sohbet şablonu biçimlendirmesi için), yalnızca 1. adım yeterlidir — model yine de çağrıyı üretmeyi öğrenir. 2. ve 3. adımlar, çağrının çıkarım sırasında gerçekten çalıştırılması için gereklidir.

Update on GitHub