{
  "aboutHtml": "<p>Gemini Embedding 2 to multimodalny model osadzeń Google do liczbowej reprezentacji tekstu, obrazów, wideo, dźwięku i PDF. Odwzorowuje różne typy mediów we wspólnej przestrzeni, dzięki czemu aplikacja może porównywać ich znaczenie. Wynikiem jest wektor liczb przydatny do wyszukiwania semantycznego, wyszukiwania dokumentów, rekomendacji, klasyfikacji lub grupowania w klastry; nie jest to pisemna odpowiedź ani wygenerowany plik multimedialny. Google dokumentuje pokrycie semantyczne ponad 100 języków.</p><p>Dla bazy wiedzy utwórz wektory fragmentów źródłowych, porównaj z nimi zapytanie użytkownika i znajdź odpowiedni materiał. Osobny model tekstowy może następnie ułożyć odpowiedź z wykorzystaniem tych źródeł. W kolekcji mediów opis tekstowy może wyszukiwać powiązane obrazy lub wideo; obraz także może stanowić zapytanie. Zachowaj powiązanie każdego wektora z oryginalną treścią, w tym odwołanie do strony lub klipu, aby znaleziony wynik można było sprawdzić i pokazać w pierwotnym kontekście.</p><p>Łączny limit wejścia wynosi 8192 tokeny. Przewodnik po stabilnym modelu dopuszcza do sześciu obrazów PNG lub JPEG, do 180 sekund dźwięku MP3 lub WAV oraz do 120 sekund wideo MP4 lub MOV. Udokumentowane kodeki wideo to H264, H265, AV1 i VP9. Przetwarzanie wideo wykorzystuje najwyżej 32 klatki: klipy do 32 sekund są próbkowane z częstotliwością jednej klatki na sekundę, a dłuższe klipy są próbkowane równomiernie do 32 klatek. Ścieżka dźwiękowa filmu nie jest przetwarzana w tym wejściu wideo; utwórz osadzenie dźwięku osobno, gdy ma on znaczenie dla wyszukiwania.</p><p>Wejście PDF przyjmuje jeden plik o najwyżej sześciu stronach. Google zaleca jedną stronę na plik PDF dla najlepszej jakości. Dziel większe źródło na znaczące strony lub sekcje i zachowuj ich relację z oryginalnym dokumentem. Wybierz fragment reprezentujący to, co powinno dać się znaleźć, zamiast łączyć niepowiązane materiały tylko dlatego, że mieszczą się w limicie. Wspólna granica tokenów nadal dotyczy żądania z różnymi mediami. Każda strona PDF zużywa 258 tokenów wizualnych oprócz tokenów wyodrębnionego tekstu. W udokumentowanym procesie Google treść przekraczająca wspólny limit 8192 tokenów jest obcinana bez błędu.</p><p>Liczba wymiarów wyjścia jest elastyczna, od 128 do 3072, przy domyślnej wartości 3072 i zalecanych rozmiarach 768, 1536 i 3072. Model używa Matryoshka Representation Learning, więc początkowe części wektora pozostają użyteczne przy mniejszej liczbie wymiarów. Przewodnik dokumentuje automatyczną normalizację zarówno domyślnych, jak i skróconych wektorów. Wybierz spójną liczbę wymiarów dla rekordów i zapytań porównywanych przez aplikację; żądany rozmiar zmienia reprezentację liczbową, a nie samą treść źródłową.</p><p>W zadaniach wyłącznie tekstowych uwzględniaj cel w tekście, zamiast używać starszego pola task_type. Google rozróżnia wyszukiwanie asymetryczne i porównywanie symetryczne. Zapytanie wyszukiwania używa „task: search result | query: {content}”, a dokument źródłowy – „title: {title} | text: {content}”; użyj „title: none”, jeśli nie ma tytułu. Zadania odpowiadania na pytania, sprawdzania faktów i wyszukiwania kodu mają własne prefiksy zapytań. Dla klasyfikacji, grupowania w klastry lub oceny podobieństwa zdań stosuj konsekwentnie ten sam format zadania po obu stronach. Przewodnik zasadniczo odradza dodawanie prefiksu zadania do części tekstowej łącznej reprezentacji multimodalnej.</p><p>Struktura wejścia decyduje, czy wynik reprezentuje jeden połączony obiekt, czy osobne elementy. Wiele części podanych razem tworzy zagregowane osadzenie; osobne obiekty Content tworzą osobne osadzenia dla każdego wpisu. W poście zawierającym tekst i obraz łączna reprezentacja może uchwycić ich relację. Rekordy przeznaczone do niezależnego wyszukiwania zachowaj osobno. Ten wybór wpływa na szczegółowość wyszukiwania: jeden wektor całego posta różni się od jednego wektora dla każdego fragmentu lub obrazu.</p><p>Przewodnik podaje, że wektory z Gemini Embedding 001 i Gemini Embedding 2 zajmują niezgodne przestrzenie i nie można ich bezpośrednio porównywać. Kolekcja migrowana ze starszego modelu wymaga ponownego utworzenia osadzeń w nowej przestrzeni. Utrzymuj spójny wybór modelu i liczby wymiarów dla porównywanych wektorów oraz przechowuj oryginalny tekst i media osobno od indeksu liczbowego. Podobieństwo osadzeń jest sygnałem do wyszukiwania, a nie rzeczowym wyjaśnieniem, dlaczego dokument odpowiada na pytanie użytkownika.</p><p>W praktycznym katalogu twórz osadzenie fotografii produktu wraz z zatwierdzonym opisem, gdy para ma być wyszukiwana jako jeden obiekt. W kolekcji dokumentów twórz osadzenia fragmentów dotyczących konkretnych zagadnień i porównuj je z zapytaniem sformatowanym według celu, a następnie prezentuj fragmenty źródłowe obok wyniku wyszukiwania. Dla dźwięku lub wideo wybierz fragment opisujący wyszukiwane zdarzenie i zachowaj jego pierwotny przedział czasowy. Użytecznym rezultatem jest reprezentacja liczbowa powiązana z materiałem źródłowym, wspierająca kolejny krok wyszukiwania lub analizy w aplikacji.</p>",
  "aboutText": "Gemini Embedding 2 to multimodalny model osadzeń Google do liczbowej reprezentacji tekstu, obrazów, wideo, dźwięku i PDF. Odwzorowuje różne typy mediów we wspólnej przestrzeni, dzięki czemu aplikacja może porównywać ich znaczenie. Wynikiem jest wektor liczb przydatny do wyszukiwania semantycznego, wyszukiwania dokumentów, rekomendacji, klasyfikacji lub grupowania w klastry; nie jest to pisemna odpowiedź ani wygenerowany plik multimedialny. Google dokumentuje pokrycie semantyczne ponad 100 języków.\n\nDla bazy wiedzy utwórz wektory fragmentów źródłowych, porównaj z nimi zapytanie użytkownika i znajdź odpowiedni materiał. Osobny model tekstowy może następnie ułożyć odpowiedź z wykorzystaniem tych źródeł. W kolekcji mediów opis tekstowy może wyszukiwać powiązane obrazy lub wideo; obraz także może stanowić zapytanie. Zachowaj powiązanie każdego wektora z oryginalną treścią, w tym odwołanie do strony lub klipu, aby znaleziony wynik można było sprawdzić i pokazać w pierwotnym kontekście.\n\nŁączny limit wejścia wynosi 8192 tokeny. Przewodnik po stabilnym modelu dopuszcza do sześciu obrazów PNG lub JPEG, do 180 sekund dźwięku MP3 lub WAV oraz do 120 sekund wideo MP4 lub MOV. Udokumentowane kodeki wideo to H264, H265, AV1 i VP9. Przetwarzanie wideo wykorzystuje najwyżej 32 klatki: klipy do 32 sekund są próbkowane z częstotliwością jednej klatki na sekundę, a dłuższe klipy są próbkowane równomiernie do 32 klatek. Ścieżka dźwiękowa filmu nie jest przetwarzana w tym wejściu wideo; utwórz osadzenie dźwięku osobno, gdy ma on znaczenie dla wyszukiwania.\n\nWejście PDF przyjmuje jeden plik o najwyżej sześciu stronach. Google zaleca jedną stronę na plik PDF dla najlepszej jakości. Dziel większe źródło na znaczące strony lub sekcje i zachowuj ich relację z oryginalnym dokumentem. Wybierz fragment reprezentujący to, co powinno dać się znaleźć, zamiast łączyć niepowiązane materiały tylko dlatego, że mieszczą się w limicie. Wspólna granica tokenów nadal dotyczy żądania z różnymi mediami. Każda strona PDF zużywa 258 tokenów wizualnych oprócz tokenów wyodrębnionego tekstu. W udokumentowanym procesie Google treść przekraczająca wspólny limit 8192 tokenów jest obcinana bez błędu.\n\nLiczba wymiarów wyjścia jest elastyczna, od 128 do 3072, przy domyślnej wartości 3072 i zalecanych rozmiarach 768, 1536 i 3072. Model używa Matryoshka Representation Learning, więc początkowe części wektora pozostają użyteczne przy mniejszej liczbie wymiarów. Przewodnik dokumentuje automatyczną normalizację zarówno domyślnych, jak i skróconych wektorów. Wybierz spójną liczbę wymiarów dla rekordów i zapytań porównywanych przez aplikację; żądany rozmiar zmienia reprezentację liczbową, a nie samą treść źródłową.\n\nW zadaniach wyłącznie tekstowych uwzględniaj cel w tekście, zamiast używać starszego pola task_type. Google rozróżnia wyszukiwanie asymetryczne i porównywanie symetryczne. Zapytanie wyszukiwania używa „task: search result | query: {content}”, a dokument źródłowy – „title: {title} | text: {content}”; użyj „title: none”, jeśli nie ma tytułu. Zadania odpowiadania na pytania, sprawdzania faktów i wyszukiwania kodu mają własne prefiksy zapytań. Dla klasyfikacji, grupowania w klastry lub oceny podobieństwa zdań stosuj konsekwentnie ten sam format zadania po obu stronach. Przewodnik zasadniczo odradza dodawanie prefiksu zadania do części tekstowej łącznej reprezentacji multimodalnej.\n\nStruktura wejścia decyduje, czy wynik reprezentuje jeden połączony obiekt, czy osobne elementy. Wiele części podanych razem tworzy zagregowane osadzenie; osobne obiekty Content tworzą osobne osadzenia dla każdego wpisu. W poście zawierającym tekst i obraz łączna reprezentacja może uchwycić ich relację. Rekordy przeznaczone do niezależnego wyszukiwania zachowaj osobno. Ten wybór wpływa na szczegółowość wyszukiwania: jeden wektor całego posta różni się od jednego wektora dla każdego fragmentu lub obrazu.\n\nPrzewodnik podaje, że wektory z Gemini Embedding 001 i Gemini Embedding 2 zajmują niezgodne przestrzenie i nie można ich bezpośrednio porównywać. Kolekcja migrowana ze starszego modelu wymaga ponownego utworzenia osadzeń w nowej przestrzeni. Utrzymuj spójny wybór modelu i liczby wymiarów dla porównywanych wektorów oraz przechowuj oryginalny tekst i media osobno od indeksu liczbowego. Podobieństwo osadzeń jest sygnałem do wyszukiwania, a nie rzeczowym wyjaśnieniem, dlaczego dokument odpowiada na pytanie użytkownika.\n\nW praktycznym katalogu twórz osadzenie fotografii produktu wraz z zatwierdzonym opisem, gdy para ma być wyszukiwana jako jeden obiekt. W kolekcji dokumentów twórz osadzenia fragmentów dotyczących konkretnych zagadnień i porównuj je z zapytaniem sformatowanym według celu, a następnie prezentuj fragmenty źródłowe obok wyniku wyszukiwania. Dla dźwięku lub wideo wybierz fragment opisujący wyszukiwane zdarzenie i zachowaj jego pierwotny przedział czasowy. Użytecznym rezultatem jest reprezentacja liczbowa powiązana z materiałem źródłowym, wspierająca kolejny krok wyszukiwania lub analizy w aplikacji.",
  "editorialOverlay": {
    "copy_fields": null,
    "copy_sha256": null,
    "copy_source": null,
    "html_sha256": "a648d082809d52a9faae052428760290fb97611d7a68786ebeb3b743e4a76309",
    "module_sha256": "ee9dc1c50b1e6a8fb7fa062030fcb4646b9aaaeb08be513b723a5a92a7290f06",
    "raw_model_unchanged": true,
    "schema": "ailoot-native-model-editorial-v1"
  },
  "locale": "pl",
  "methods": [
    {
      "html": "<div class=\"sheet-head\"><span class=\"mav\" aria-hidden=\"true\">G</span><h2 id=\"sheet-title\">Google: Gemini Embedding 2</h2><button class=\"icon-btn\" type=\"button\" data-close-sheet aria-label=\"Zamknij\">×</button></div><div class=\"idline\"><span>Google /</span><code>google/gemini-embedding-2</code><button type=\"button\" id=\"copy-id\">Kopiuj ID</button></div><nav class=\"card-jump-nav\" aria-label=\"Sekcje karty modelu\"><button type=\"button\" data-card-jump=\"overview\">Start</button><button type=\"button\" data-card-jump=\"methods\">Dane wejściowe i metody</button><button type=\"button\" data-card-jump=\"pricing\">Cennik</button><button type=\"button\" data-card-jump=\"examples\">Przykłady</button><button type=\"button\" data-card-jump=\"results\">Wyniki</button><button type=\"button\" data-card-jump=\"aliases\">Aliasy</button></nav><div class=\"card-method-tabs\" role=\"tablist\" aria-label=\"Metody API\"><button type=\"button\" role=\"tab\" tabindex=\"0\" aria-controls=\"card-method-content\" aria-selected=\"true\" id=\"card-method-tab-0\" data-card-method=\"Ultra|embeddings|/v1/embeddings|google%2Fgemini-embedding-2\">Reprezentacje wektorowe</button></div><div id=\"card-method-content\" role=\"tabpanel\" aria-labelledby=\"card-method-tab-0\"><section class=\"card-section\" data-card-section=\"overview\"><h3 tabindex=\"-1\">Start</h3><p class=\"mdesc-full\">Gemini Embedding 2 odwzorowuje tekst, obrazy, dźwięk, wideo i PDF we wspólnej przestrzeni liczbowej. Jego wektory wspierają wyszukiwanie między modalnościami, wyszukiwanie materiałów źródłowych, klasyfikację i grupowanie w klastry, z elastyczną liczbą wymiarów i limitem wejścia 8192 tokenów.</p><dl class=\"card-io\" data-card-io><div><dt>Akceptowane dane wejściowe</dt><dd>Tekst · token_ids</dd></div><div><dt>Wyniki</dt><dd>embedding</dd></div></dl><details class=\"card-about\"><summary>O modelu</summary><p class=\"note-s\" data-model-method-boundary>Ten opis przedstawia możliwości modelu. Dane wejściowe, wyniki i opcje dostępne w Ailoot podano poniżej dla wybranej metody.</p><div class=\"mabout\" id=\"m-about\"><p>Gemini Embedding 2 to multimodalny model osadzeń Google do liczbowej reprezentacji tekstu, obrazów, wideo, dźwięku i PDF. Odwzorowuje różne typy mediów we wspólnej przestrzeni, dzięki czemu aplikacja może porównywać ich znaczenie. Wynikiem jest wektor liczb przydatny do wyszukiwania semantycznego, wyszukiwania dokumentów, rekomendacji, klasyfikacji lub grupowania w klastry; nie jest to pisemna odpowiedź ani wygenerowany plik multimedialny. Google dokumentuje pokrycie semantyczne ponad 100 języków.</p><p>Dla bazy wiedzy utwórz wektory fragmentów źródłowych, porównaj z nimi zapytanie użytkownika i znajdź odpowiedni materiał. Osobny model tekstowy może następnie ułożyć odpowiedź z wykorzystaniem tych źródeł. W kolekcji mediów opis tekstowy może wyszukiwać powiązane obrazy lub wideo; obraz także może stanowić zapytanie. Zachowaj powiązanie każdego wektora z oryginalną treścią, w tym odwołanie do strony lub klipu, aby znaleziony wynik można było sprawdzić i pokazać w pierwotnym kontekście.</p><p>Łączny limit wejścia wynosi 8192 tokeny. Przewodnik po stabilnym modelu dopuszcza do sześciu obrazów PNG lub JPEG, do 180 sekund dźwięku MP3 lub WAV oraz do 120 sekund wideo MP4 lub MOV. Udokumentowane kodeki wideo to H264, H265, AV1 i VP9. Przetwarzanie wideo wykorzystuje najwyżej 32 klatki: klipy do 32 sekund są próbkowane z częstotliwością jednej klatki na sekundę, a dłuższe klipy są próbkowane równomiernie do 32 klatek. Ścieżka dźwiękowa filmu nie jest przetwarzana w tym wejściu wideo; utwórz osadzenie dźwięku osobno, gdy ma on znaczenie dla wyszukiwania.</p><p>Wejście PDF przyjmuje jeden plik o najwyżej sześciu stronach. Google zaleca jedną stronę na plik PDF dla najlepszej jakości. Dziel większe źródło na znaczące strony lub sekcje i zachowuj ich relację z oryginalnym dokumentem. Wybierz fragment reprezentujący to, co powinno dać się znaleźć, zamiast łączyć niepowiązane materiały tylko dlatego, że mieszczą się w limicie. Wspólna granica tokenów nadal dotyczy żądania z różnymi mediami. Każda strona PDF zużywa 258 tokenów wizualnych oprócz tokenów wyodrębnionego tekstu. W udokumentowanym procesie Google treść przekraczająca wspólny limit 8192 tokenów jest obcinana bez błędu.</p><p>Liczba wymiarów wyjścia jest elastyczna, od 128 do 3072, przy domyślnej wartości 3072 i zalecanych rozmiarach 768, 1536 i 3072. Model używa Matryoshka Representation Learning, więc początkowe części wektora pozostają użyteczne przy mniejszej liczbie wymiarów. Przewodnik dokumentuje automatyczną normalizację zarówno domyślnych, jak i skróconych wektorów. Wybierz spójną liczbę wymiarów dla rekordów i zapytań porównywanych przez aplikację; żądany rozmiar zmienia reprezentację liczbową, a nie samą treść źródłową.</p><p>W zadaniach wyłącznie tekstowych uwzględniaj cel w tekście, zamiast używać starszego pola task_type. Google rozróżnia wyszukiwanie asymetryczne i porównywanie symetryczne. Zapytanie wyszukiwania używa „task: search result | query: {content}”, a dokument źródłowy – „title: {title} | text: {content}”; użyj „title: none”, jeśli nie ma tytułu. Zadania odpowiadania na pytania, sprawdzania faktów i wyszukiwania kodu mają własne prefiksy zapytań. Dla klasyfikacji, grupowania w klastry lub oceny podobieństwa zdań stosuj konsekwentnie ten sam format zadania po obu stronach. Przewodnik zasadniczo odradza dodawanie prefiksu zadania do części tekstowej łącznej reprezentacji multimodalnej.</p><p>Struktura wejścia decyduje, czy wynik reprezentuje jeden połączony obiekt, czy osobne elementy. Wiele części podanych razem tworzy zagregowane osadzenie; osobne obiekty Content tworzą osobne osadzenia dla każdego wpisu. W poście zawierającym tekst i obraz łączna reprezentacja może uchwycić ich relację. Rekordy przeznaczone do niezależnego wyszukiwania zachowaj osobno. Ten wybór wpływa na szczegółowość wyszukiwania: jeden wektor całego posta różni się od jednego wektora dla każdego fragmentu lub obrazu.</p><p>Przewodnik podaje, że wektory z Gemini Embedding 001 i Gemini Embedding 2 zajmują niezgodne przestrzenie i nie można ich bezpośrednio porównywać. Kolekcja migrowana ze starszego modelu wymaga ponownego utworzenia osadzeń w nowej przestrzeni. Utrzymuj spójny wybór modelu i liczby wymiarów dla porównywanych wektorów oraz przechowuj oryginalny tekst i media osobno od indeksu liczbowego. Podobieństwo osadzeń jest sygnałem do wyszukiwania, a nie rzeczowym wyjaśnieniem, dlaczego dokument odpowiada na pytanie użytkownika.</p><p>W praktycznym katalogu twórz osadzenie fotografii produktu wraz z zatwierdzonym opisem, gdy para ma być wyszukiwana jako jeden obiekt. W kolekcji dokumentów twórz osadzenia fragmentów dotyczących konkretnych zagadnień i porównuj je z zapytaniem sformatowanym według celu, a następnie prezentuj fragmenty źródłowe obok wyniku wyszukiwania. Dla dźwięku lub wideo wybierz fragment opisujący wyszukiwane zdarzenie i zachowaj jego pierwotny przedział czasowy. Użytecznym rezultatem jest reprezentacja liczbowa powiązana z materiałem źródłowym, wspierająca kolejny krok wyszukiwania lub analizy w aplikacji.</p></div></details></section><section class=\"card-section\" data-card-section=\"methods\"><h3 tabindex=\"-1\">Dostępne w Ailoot · dane wejściowe i metody</h3><details class=\"card-method\" open><summary><b>Ailoot Ultra · Reprezentacje wektorowe</b> <code>POST /v1/embeddings</code></summary><dl class=\"method-capabilities\"><div><dt>Wejście</dt><dd><code>text</code>, <code>token_ids</code></dd></div><div><dt>Wyjście</dt><dd><code>embedding</code></dd></div><div><dt>Kontekst</dt><dd>8192 tokens</dd></div><div><dt>Format wyjściowy</dt><dd>json</dd></div></dl><div class=\"tw\" data-card-parameters data-typed-parameters><table><thead><tr><th>Pole</th><th>Typ</th><th>Wymaganie</th><th>Wartości i limity</th><th>Domyślnie</th></tr></thead><tbody><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"Pole\" scope=\"row\"><span class=\"card-cell-label\">Pole</span><code class=\"card-field-name\">model</code></th><td data-cell-label=\"Typ\" data-field-type><span class=\"card-cell-label\">Typ</span><code>string</code></td><td data-cell-label=\"Wymaganie\"><span class=\"card-cell-label\">Wymaganie</span>Wymagane</td><td data-cell-label=\"Wartości i limity\"><span class=\"card-cell-label\">Wartości i limity</span><div>google/gemini-embedding-2</div></td><td data-cell-label=\"Domyślnie\" data-default=\"unspecified\"><span class=\"card-cell-label\">Domyślnie</span>—</td></tr><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"Pole\" scope=\"row\"><span class=\"card-cell-label\">Pole</span><code class=\"card-field-name\">input</code></th><td data-cell-label=\"Typ\" data-field-type><span class=\"card-cell-label\">Typ</span><code>string|string[]|integer[]|integer[][]</code></td><td data-cell-label=\"Wymaganie\"><span class=\"card-cell-label\">Wymaganie</span>Wymagane</td><td data-cell-label=\"Wartości i limity\"><span class=\"card-cell-label\">Wartości i limity</span><div>Minimalna liczba elementów: 1</div><div>Warunki: Niepusta, jednorodna partia danych. Identyfikatory tokenów są nieujemnymi liczbami całkowitymi.</div><div>Budżet wejścia: Maksimum: 8192 · Jednostka tekstu: bajty UTF8 · Jednostka tokenów: elementy tablicy tokenów</div></td><td data-cell-label=\"Domyślnie\" data-default=\"unspecified\"><span class=\"card-cell-label\">Domyślnie</span>—</td></tr><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"Pole\" scope=\"row\"><span class=\"card-cell-label\">Pole</span><code class=\"card-field-name\">encoding_format</code></th><td data-cell-label=\"Typ\" data-field-type><span class=\"card-cell-label\">Typ</span><code>string</code></td><td data-cell-label=\"Wymaganie\"><span class=\"card-cell-label\">Wymaganie</span>Opcjonalne</td><td data-cell-label=\"Wartości i limity\"><span class=\"card-cell-label\">Wartości i limity</span><div>float</div></td><td data-cell-label=\"Domyślnie\" data-default=\"known\"><span class=\"card-cell-label\">Domyślnie</span>float</td></tr><tr data-parameter-availability=\"unsupported\"><th data-cell-label=\"Pole\" scope=\"row\"><span class=\"card-cell-label\">Pole</span><code class=\"card-field-name\">dimensions</code></th><td data-cell-label=\"Typ\" data-field-type><span class=\"card-cell-label\">Typ</span><code>integer</code></td><td data-cell-label=\"Wymaganie\"><span class=\"card-cell-label\">Wymaganie</span>Nieobsługiwane</td><td data-cell-label=\"Wartości i limity\"><span class=\"card-cell-label\">Wartości i limity</span><div>Minimum: 1</div></td><td data-cell-label=\"Domyślnie\" data-default=\"unspecified\"><span class=\"card-cell-label\">Domyślnie</span>—</td></tr><tr data-parameter-availability=\"pass_through_metadata\"><th data-cell-label=\"Pole\" scope=\"row\"><span class=\"card-cell-label\">Pole</span><code class=\"card-field-name\">user</code></th><td data-cell-label=\"Typ\" data-field-type><span class=\"card-cell-label\">Typ</span><code>json_value</code></td><td data-cell-label=\"Wymaganie\"><span class=\"card-cell-label\">Wymaganie</span>Opcjonalne</td><td data-cell-label=\"Wartości i limity\"><span class=\"card-cell-label\">Wartości i limity</span><div>Warunki: Źródło dopuszcza to pole metadanych JSON; dokładna semantyka po stronie dostawcy zależy od modelu.</div></td><td data-cell-label=\"Domyślnie\" data-default=\"unspecified\"><span class=\"card-cell-label\">Domyślnie</span>—</td></tr><tr data-parameter-availability=\"pass_through_metadata\"><th data-cell-label=\"Pole\" scope=\"row\"><span class=\"card-cell-label\">Pole</span><code class=\"card-field-name\">session_id</code></th><td data-cell-label=\"Typ\" data-field-type><span class=\"card-cell-label\">Typ</span><code>json_value</code></td><td data-cell-label=\"Wymaganie\"><span class=\"card-cell-label\">Wymaganie</span>Opcjonalne</td><td data-cell-label=\"Wartości i limity\"><span class=\"card-cell-label\">Wartości i limity</span><div>Warunki: Źródło dopuszcza to pole metadanych JSON; dokładna semantyka po stronie dostawcy zależy od modelu.</div></td><td data-cell-label=\"Domyślnie\" data-default=\"unspecified\"><span class=\"card-cell-label\">Domyślnie</span>—</td></tr><tr data-parameter-availability=\"pass_through_metadata\"><th data-cell-label=\"Pole\" scope=\"row\"><span class=\"card-cell-label\">Pole</span><code class=\"card-field-name\">trace</code></th><td data-cell-label=\"Typ\" data-field-type><span class=\"card-cell-label\">Typ</span><code>json_value</code></td><td data-cell-label=\"Wymaganie\"><span class=\"card-cell-label\">Wymaganie</span>Opcjonalne</td><td data-cell-label=\"Wartości i limity\"><span class=\"card-cell-label\">Wartości i limity</span><div>Warunki: Źródło dopuszcza to pole metadanych JSON; dokładna semantyka po stronie dostawcy zależy od modelu.</div></td><td data-cell-label=\"Domyślnie\" data-default=\"unspecified\"><span class=\"card-cell-label\">Domyślnie</span>—</td></tr><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"Pole\" scope=\"row\"><span class=\"card-cell-label\">Pole</span><code class=\"card-field-name\">provider</code></th><td data-cell-label=\"Typ\" data-field-type><span class=\"card-cell-label\">Typ</span><code>object</code></td><td data-cell-label=\"Wymaganie\"><span class=\"card-cell-label\">Wymaganie</span>Opcjonalne</td><td data-cell-label=\"Wartości i limity\"><span class=\"card-cell-label\">Wartości i limity</span><div>Warunki: Odrzucono provider.options</div></td><td data-cell-label=\"Domyślnie\" data-default=\"unspecified\"><span class=\"card-cell-label\">Domyślnie</span>—</td></tr></tbody></table></div><details class=\"card-about\" data-material-combinations><summary>Kombinacje materiałów wejściowych</summary><p class=\"note-s\"><b>text_to_embedding</b></p></details><details class=\"note-s\" data-method-contract><summary>Parametry i cykl życia metody</summary><div class=\"tw\" data-card-table=\"contract\"><table><thead><tr><th>Parametr</th><th>Kontrakt</th></tr></thead><tbody><tr><th data-cell-label=\"Parametr\" scope=\"row\"><span class=\"card-cell-label\">Parametr</span><code>content_type</code></th><td data-cell-label=\"Kontrakt\"><span class=\"card-cell-label\">Kontrakt</span>application/json</td></tr><tr><th data-cell-label=\"Parametr\" scope=\"row\"><span class=\"card-cell-label\">Parametr</span><code>required</code></th><td data-cell-label=\"Kontrakt\"><span class=\"card-cell-label\">Kontrakt</span>model, input</td></tr><tr><th data-cell-label=\"Parametr\" scope=\"row\"><span class=\"card-cell-label\">Parametr</span><code>input_shapes</code></th><td data-cell-label=\"Kontrakt\"><span class=\"card-cell-label\">Kontrakt</span>string, string[], nonnegative_integer_token_array, nonnegative_integer_token_array[]</td></tr><tr><th data-cell-label=\"Parametr\" scope=\"row\"><span class=\"card-cell-label\">Parametr</span><code>encoding_format</code></th><td data-cell-label=\"Kontrakt\"><span class=\"card-cell-label\">Kontrakt</span>float</td></tr><tr><th data-cell-label=\"Parametr\" scope=\"row\"><span class=\"card-cell-label\">Parametr</span><code>dimensions_override</code></th><td data-cell-label=\"Kontrakt\"><span class=\"card-cell-label\">Kontrakt</span>false</td></tr><tr><th data-cell-label=\"Parametr\" scope=\"row\"><span class=\"card-cell-label\">Parametr</span><code>max_input_budget_units</code></th><td data-cell-label=\"Kontrakt\"><span class=\"card-cell-label\">Kontrakt</span>8192</td></tr><tr><th data-cell-label=\"Parametr\" scope=\"row\"><span class=\"card-cell-label\">Parametr</span><code>multimodal_objects</code></th><td data-cell-label=\"Kontrakt\"><span class=\"card-cell-label\">Kontrakt</span>false</td></tr><tr><th data-cell-label=\"Parametr\" scope=\"row\"><span class=\"card-cell-label\">Parametr</span><code>material_types</code></th><td data-cell-label=\"Kontrakt\"><span class=\"card-cell-label\">Kontrakt</span>text, token_ids</td></tr></tbody></table></div><p>Cykl życia: <code>synchronous_json</code></p><p class=\"note-s\">Zachowaj indeks i liczbę wymiarów każdego wektora.</p><p class=\"note-s\">Nawet jeśli nazwa modelu wskazuje na multimodalność, ta konkretna ścieżka nie obsługuje obiektów obrazów.</p></details></details></section><section class=\"card-section\" data-card-section=\"pricing\"><h3 tabindex=\"-1\">Cennik</h3><div data-native-semantic-method=\"v1\" data-tariff-reference-only><p class=\"note-s\" data-rate-support-note>Informacje taryfowe nie dodają opcji żądania. Obsługiwane parametry podano przy wybranej metodzie.</p><dl data-price-conditions><dt>Tryb szybki</dt><dd>Stawka standardowa <span class=\"note-s\">Gdy wybrany jest tryb szybki</span></dd><dt>Tryb flex</dt><dd>Stawka standardowa <span class=\"note-s\">Gdy wybrany jest tryb flex</span></dd><dt>Maksymalna intensywność rozumowania</dt><dd>Stawka standardowa <span class=\"note-s\">Gdy dla maksymalnej intensywności rozumowania stosowana jest domyślna korekta (default)</span></dd></dl></div><div data-declared-tariff-pricing><h4>Stawki Ailoot</h4><h4>Ceny według konfiguracji</h4><div class=\"tw\" data-pricing-profiles><table><thead><tr><th>Konfiguracja</th><th>Tabela stawek</th><th>Opłata</th></tr></thead><tbody><tr><th data-cell-label=\"Konfiguracja\" scope=\"row\"><span class=\"card-cell-label\">Konfiguracja</span>Podstawowe stawki za tokeny</th><td data-cell-label=\"Tabela stawek\"><span class=\"card-cell-label\">Tabela stawek</span>Stawka podstawowa</td><td data-cell-label=\"Opłata\"><span class=\"card-cell-label\">Opłata</span><div><span>Wejście · Tokeny wejściowe</span> <b>$0.0004</b> <span class=\"price-unit\">/ 1K tokenów</span></div><div><span>Wyjście · Tokeny wyjściowe</span> <b>$0</b> <span class=\"price-unit\">/ 1K tokenów</span></div><div><span>Wejście · Odczyt cache</span> <b>—</b> <span class=\"price-unit\">/ 1K tokenów</span></div><div><span>Wejście · Zapis do cache</span> <b>—</b> <span class=\"price-unit\">/ 1K tokenów</span></div><div><span>Wejście · Zapis do cache, 1 godz.</span> <b>—</b> <span class=\"price-unit\">/ 1K tokenów</span></div></td></tr></tbody></table></div></div><p class=\"note-s\">Ailoot rezerwuje szacowaną kwotę przed żądaniem. Po otrzymaniu wyniku rozlicza ostateczną opłatę według zmierzonego użycia. Rozliczenie strumieniowania korzysta z końcowego rekordu użycia. <a href=\"/docs/pl/billing/reserve/\">Jak działają rezerwacja i rozliczenie →</a></p></section><section class=\"card-section\" data-card-section=\"examples\"><h3 tabindex=\"-1\">Przykładowe żądania</h3><h4>Ailoot Ultra · Reprezentacje wektorowe</h4><div class=\"code-group\"><div class=\"cg-bar\"><div class=\"cg-tabs\" role=\"tablist\" aria-label=\"Warianty kodu\"><button class=\"cg-tab\" id=\"model-code-1487-tab-0\" role=\"tab\" type=\"button\" aria-controls=\"model-code-1487-panel-0\" aria-selected=\"true\" tabindex=\"0\">curl</button><button class=\"cg-tab\" id=\"model-code-1487-tab-1\" role=\"tab\" type=\"button\" aria-controls=\"model-code-1487-panel-1\" aria-selected=\"false\" tabindex=\"-1\">Python SDK</button></div><div class=\"cg-tools\"><button class=\"cg-btn cg-copy\" type=\"button\" aria-label=\"Kopiuj kod\"><svg class=\"cp\" viewBox=\"0 0 16 16\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.4\"><rect x=\"5.25\" y=\"5.25\" width=\"8.5\" height=\"8.5\" rx=\"1.75\"/><path d=\"M10.75 5.25V3.5a1.25 1.25 0 0 0-1.25-1.25H3.5A1.25 1.25 0 0 0 2.25 3.5v6a1.25 1.25 0 0 0 1.25 1.25h1.75\"/></svg><svg class=\"ok\" viewBox=\"0 0 16 16\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.4\"><path d=\"m3 8.5 3.25 3.25L13 5\"/></svg></button></div></div><div class=\"cg-body\"><div class=\"cg-pane\" id=\"model-code-1487-panel-0\" role=\"tabpanel\" aria-labelledby=\"model-code-1487-tab-0\"><pre data-lang=\"bash\"><code>set -eu\n: &quot;${AILOOT_API_KEY:?Set your Ailoot API key}&quot;\npython3 - &lt;&lt;&#39;PY_REQUEST&#39;\nimport json,os\nfrom pathlib import Path\np=json.loads(&#39;{&quot;model&quot;: &quot;google/gemini-embedding-2&quot;, &quot;input&quot;: [&quot;First document&quot;, &quot;Second document&quot;]}&#39;)\n\nPath(&quot;request.json&quot;).write_text(json.dumps(p,ensure_ascii=False))\nPY_REQUEST\ncurl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/embeddings \\\n  -H &quot;Authorization: Bearer $AILOOT_API_KEY&quot; -H &#39;Content-Type: application/json&#39; \\\n  --data-binary @request.json -D response-headers.txt -o result.json\npython3 - &lt;&lt;&#39;PY_RESULT&#39;\nimport json\nfrom pathlib import Path\nr=json.loads(Path(&quot;result.json&quot;).read_text())\nfor x in r.get(&quot;data&quot;,[]): print(json.dumps({&quot;index&quot;:x.get(&quot;index&quot;),&quot;embedding&quot;:x.get(&quot;embedding&quot;)}))\nPY_RESULT\n</code></pre></div><div class=\"cg-pane\" id=\"model-code-1487-panel-1\" role=\"tabpanel\" aria-labelledby=\"model-code-1487-tab-1\" hidden><pre data-lang=\"python\"><code>from openai import OpenAI\nimport os\n\nclient=OpenAI(base_url=&quot;https://api.ailoot.ai/v1&quot;,api_key=os.environ[&quot;AILOOT_API_KEY&quot;],max_retries=0)\nresult=client.embeddings.create(model=&#39;google/gemini-embedding-2&#39;,input=[&quot;First document&quot;,&quot;Second document&quot;])\nprint(result)\nfor item in result.data:print(item.index,item.embedding)\n</code></pre></div></div></div></section><section class=\"card-section\" data-card-section=\"results\"><h3 tabindex=\"-1\">Odbieranie i zapisywanie wyników</h3><h4>Ailoot Ultra · Reprezentacje wektorowe</h4><p class=\"note-s\">json</p><div class=\"card-result-process\" data-all-results><h5>Zachowaj wszystkie ukończone wyniki</h5><p class=\"note-s\">Zachowaj każdą kompletną zwróconą odpowiedź, plik i część treści.</p><p class=\"note-s\">Zachowaj każdy wektor wraz z jego indeksem. Liczba wektorów musi być równa liczbie elementów wejściowych; wszystkie wektory muszą mieć tę samą liczbę wymiarów.</p></div><div class=\"card-result-process\" data-unknown-recovery><h5>Jeśli trzeba sprawdzić pierwotną odpowiedź</h5><p class=\"note-s\">Nie wprowadzono endpointu zadań generowania osadzeń.</p></div><details class=\"card-about\" data-output-fields><summary>Pola odpowiedzi</summary><div class=\"tw\" data-card-table=\"output\"><table><thead><tr><th>Pole</th><th>Typ</th></tr></thead><tbody><tr><th data-cell-label=\"Pole\" scope=\"row\"><span class=\"card-cell-label\">Pole</span><code class=\"card-field-name\">object</code></th><td data-cell-label=\"Typ\" data-field-type><span class=\"card-cell-label\">Typ</span>string</td></tr><tr><th data-cell-label=\"Pole\" scope=\"row\"><span class=\"card-cell-label\">Pole</span><code class=\"card-field-name\">model</code></th><td data-cell-label=\"Typ\" data-field-type><span class=\"card-cell-label\">Typ</span>string</td></tr><tr><th data-cell-label=\"Pole\" scope=\"row\"><span class=\"card-cell-label\">Pole</span><code class=\"card-field-name\">data[].index</code></th><td data-cell-label=\"Typ\" data-field-type><span class=\"card-cell-label\">Typ</span>integer</td></tr><tr><th data-cell-label=\"Pole\" scope=\"row\"><span class=\"card-cell-label\">Pole</span><code class=\"card-field-name\">data[].embedding</code></th><td data-cell-label=\"Typ\" data-field-type><span class=\"card-cell-label\">Typ</span>finite float[]</td></tr><tr><th data-cell-label=\"Pole\" scope=\"row\"><span class=\"card-cell-label\">Pole</span><code class=\"card-field-name\">usage</code></th><td data-cell-label=\"Typ\" data-field-type><span class=\"card-cell-label\">Typ</span>object</td></tr></tbody></table></div></details><details class=\"card-about\" data-method-errors><summary>Błędy i dalsze kroki</summary><div class=\"tw\" data-card-table=\"errors\"><table><thead><tr><th>Odpowiedź</th><th>Warunek</th><th>Następny krok</th></tr></thead><tbody><tr><th data-cell-label=\"Odpowiedź\" scope=\"row\"><span class=\"card-cell-label\">Odpowiedź</span>400 · <code>invalid_request_error</code></th><td data-cell-label=\"Warunek\"><span class=\"card-cell-label\">Warunek</span>Nieprawidłowe wymagane pola, sposób reprezentacji materiału lub wartość parametru</td><td data-cell-label=\"Następny krok\"><span class=\"card-cell-label\">Następny krok</span>Popraw wskazane pola przed nowym żądaniem utworzenia.</td></tr></tbody></table></div></details></section><section class=\"card-section\" data-card-section=\"aliases\"><h3 tabindex=\"-1\">Aliasy</h3><h4>Aliasy modelu</h4><p class=\"note-s\"><span data-model-alias-route=\"Ultra\"><b>Ailoot Ultra</b> <a href=\"#m=google%2Fgemini-embedding-2&amp;route=Ultra&amp;caller=google%2Fgemini-embedding-2&amp;fmt=embeddings\"><code>google/gemini-embedding-2</code></a></span></p><h4>Aliasy ścieżek metod</h4><p class=\"note-s\">Użyj ścieżek metod podanych powyżej.</p><h4>Powiązane ID modeli</h4><p class=\"note-s\"><a href=\"#m=google%2Fgemini-embedding-2&amp;route=Ultra&amp;caller=google%2Fgemini-embedding-2&amp;fmt=embeddings\"><code>google/gemini-embedding-2</code></a></p></section></div>",
      "method_identity": {
        "effective_request_model_id": "google/gemini-embedding-2",
        "fmt": "embeddings",
        "http": "POST",
        "path": "/v1/embeddings",
        "request_model_id": "google/gemini-embedding-2",
        "route_label": "Ultra"
      },
      "method_key": "Ultra|embeddings|/v1/embeddings|google%2Fgemini-embedding-2",
      "ordinal": 0,
      "rawMethod": {
        "available": null,
        "cache_read": null,
        "cache_write": null,
        "cache_write_1h": null,
        "contract": {
          "data": {
            "all_results": "Keep every vector with its index. Vector count must equal input count; dimensions must be consistent.",
            "errors": [
              {
                "code": null,
                "condition": "Nieprawidłowe wymagane pola, sposób reprezentacji materiału lub wartość parametru",
                "http_status": 400,
                "recovery": "Popraw wskazane pola przed nowym żądaniem utworzenia.",
                "type": "invalid_request_error"
              }
            ],
            "hints": [],
            "ignored_fields": [],
            "lifecycle": {
              "create": {
                "http": "POST",
                "path": "/v1/embeddings"
              },
              "job_read": null,
              "mode": "synchronous_json",
              "unknown": "Nie wprowadzono endpointu zadań generowania osadzeń."
            },
            "material_combinations": [
              {
                "alternatives": [
                  "string",
                  "string[]",
                  "nonnegative_integer_token_array",
                  "nonnegative_integer_token_array[]"
                ],
                "mode": "text_to_embedding"
              }
            ],
            "operation_modes": [
              "single_embedding",
              "batched_embeddings"
            ],
            "outputs": {
              "all_results": "Zachowaj każdy wektor wraz z jego indeksem. Liczba wektorów musi być równa liczbie elementów wejściowych; wszystkie wektory muszą mieć tę samą liczbę wymiarów.",
              "default_dimensions": null,
              "family": "embedding",
              "fields": [
                {
                  "description": null,
                  "name": "object",
                  "type": "string"
                },
                {
                  "description": null,
                  "name": "model",
                  "type": "string"
                },
                {
                  "description": null,
                  "name": "data[].index",
                  "type": "integer"
                },
                {
                  "description": null,
                  "name": "data[].embedding",
                  "type": "finite float[]"
                },
                {
                  "description": null,
                  "name": "usage",
                  "type": "object"
                }
              ],
              "format": "json"
            },
            "parameters": [
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": [
                  "google/gemini-embedding-2"
                ],
                "enum_known": true,
                "name": "model",
                "required": true,
                "type": "string"
              },
              {
                "availability": "source_interface",
                "budget": {
                  "maximum": 8192,
                  "text_unit": "bajty UTF8",
                  "token_unit": "elementy tablicy tokenów"
                },
                "conditions": "Niepusta, jednorodna partia danych. Identyfikatory tokenów są nieujemnymi liczbami całkowitymi.",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "min_items": 1,
                "name": "input",
                "required": true,
                "type": "string|string[]|integer[]|integer[][]"
              },
              {
                "availability": "source_interface",
                "default": "float",
                "default_known": true,
                "enum": [
                  "float"
                ],
                "enum_known": true,
                "name": "encoding_format",
                "required": false,
                "type": "string"
              },
              {
                "availability": "unsupported",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "minimum": 1,
                "name": "dimensions",
                "required": false,
                "type": "integer"
              },
              {
                "availability": "pass_through_metadata",
                "conditions": "Źródło dopuszcza to pole metadanych JSON; dokładna semantyka po stronie dostawcy zależy od modelu.",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "name": "user",
                "required": false,
                "type": "json_value"
              },
              {
                "availability": "pass_through_metadata",
                "conditions": "Źródło dopuszcza to pole metadanych JSON; dokładna semantyka po stronie dostawcy zależy od modelu.",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "name": "session_id",
                "required": false,
                "type": "json_value"
              },
              {
                "availability": "pass_through_metadata",
                "conditions": "Źródło dopuszcza to pole metadanych JSON; dokładna semantyka po stronie dostawcy zależy od modelu.",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "name": "trace",
                "required": false,
                "type": "json_value"
              },
              {
                "availability": "source_interface",
                "conditions": "Odrzucono provider.options",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "name": "provider",
                "required": false,
                "type": "object"
              }
            ],
            "profile_binding": "Exact existing Ailoot model and method; interface constraints below do not assert provider qualification.",
            "unsupported": [
              "mixed input kinds",
              "empty input",
              "image/audio/file objects",
              "encoding_format=base64",
              "dimensions override"
            ]
          },
          "hints": [
            "Zachowaj indeks i liczbę wymiarów każdego wektora.",
            "Nawet jeśli nazwa modelu wskazuje na multimodalność, ta konkretna ścieżka nie obsługuje obiektów obrazów."
          ],
          "input": {
            "content_type": "application/json",
            "dimensions_override": false,
            "encoding_format": [
              "float"
            ],
            "input_shapes": [
              "string",
              "string[]",
              "nonnegative_integer_token_array",
              "nonnegative_integer_token_array[]"
            ],
            "material_types": [
              "text",
              "token_ids"
            ],
            "max_input_budget_units": 8192,
            "multimodal_objects": false,
            "required": [
              "model",
              "input"
            ]
          },
          "lifecycle": {
            "mode": "synchronous_json",
            "unknown": "no embedding job endpoint inferred"
          },
          "manufacturer_capability": null,
          "method": {
            "http": "POST",
            "path": "/v1/embeddings"
          },
          "method_aliases": [],
          "operation_modes": [
            "text_to_embedding"
          ],
          "output": {
            "default_dimensions": null,
            "family": "embedding",
            "format": "json",
            "http_success": 200,
            "vectors": "one dense float vector per input; indices/model/usage validated"
          }
        },
        "ctx": 8192,
        "declared_pricing_profiles": [
          {
            "dimensions": {
              "regime": "base"
            },
            "label": "Podstawowe stawki za tokeny",
            "units": [
              {
                "amount": "0.0004000",
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "input_price",
                "label": "Input tokens",
                "native_amount_usd_per_unit": "0.0000004",
                "native_quantity": 1,
                "native_unit": "input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "input_token"
              },
              {
                "amount": "0",
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "output_price",
                "label": "Output tokens",
                "native_amount_usd_per_unit": "0",
                "native_quantity": 1,
                "native_unit": "output_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "output_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_read_price",
                "label": "Cache read",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "cached_input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "cached_input_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_write_price",
                "label": "Cache write",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "generic_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "generic_cache_creation_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_write_1h_price",
                "label": "Cache write, 1 hour",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "one_hour_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "one_hour_cache_creation_token"
              }
            ]
          }
        ],
        "examples": [
          {
            "code": "set -eu\n: \"${AILOOT_API_KEY:?Set your Ailoot API key}\"\npython3 - <<'PY_REQUEST'\nimport json,os\nfrom pathlib import Path\np=json.loads('{\"model\": \"google/gemini-embedding-2\", \"input\": [\"First document\", \"Second document\"]}')\n\nPath(\"request.json\").write_text(json.dumps(p,ensure_ascii=False))\nPY_REQUEST\ncurl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/embeddings \\\n  -H \"Authorization: Bearer $AILOOT_API_KEY\" -H 'Content-Type: application/json' \\\n  --data-binary @request.json -D response-headers.txt -o result.json\npython3 - <<'PY_RESULT'\nimport json\nfrom pathlib import Path\nr=json.loads(Path(\"result.json\").read_text())\nfor x in r.get(\"data\",[]): print(json.dumps({\"index\":x.get(\"index\"),\"embedding\":x.get(\"embedding\")}))\nPY_RESULT\n",
            "label": "curl · retained exact creation",
            "language": "bash"
          },
          {
            "code": "from openai import OpenAI\nimport os\n\nclient=OpenAI(base_url=\"https://api.ailoot.ai/v1\",api_key=os.environ[\"AILOOT_API_KEY\"],max_retries=0)\nresult=client.embeddings.create(model='google/gemini-embedding-2',input=[\"First document\",\"Second document\"])\nprint(result)\nfor item in result.data:print(item.index,item.embedding)\n",
            "label": "Python SDK · all vectors",
            "language": "python"
          }
        ],
        "family": "openai",
        "fast_multiplier": 1,
        "flex_multiplier": 1,
        "fmt": "embeddings",
        "hints": [
          "Keep every vector index and dimension.",
          "Multimodal model name does not admit image objects on this exact path."
        ],
        "http": "POST",
        "in": 0.4,
        "input": [
          "text",
          "token_ids"
        ],
        "label": "Эмбеддинги",
        "max_out": null,
        "max_reasoning_effort_multiplier": 1,
        "method_aliases": [],
        "out": 0,
        "output": [
          "embedding"
        ],
        "path": "/v1/embeddings",
        "price_conditions": [
          {
            "label": "Tryb szybki",
            "value": "Stawka standardowa",
            "when": "Gdy wybrany jest tryb szybki"
          },
          {
            "label": "Tryb flex",
            "value": "Stawka standardowa",
            "when": "Gdy wybrany jest tryb flex"
          },
          {
            "label": "Maksymalna intensywność rozumowania",
            "value": "Stawka standardowa",
            "when": "Gdy dla maksymalnej intensywności rozumowania stosowana jest domyślna korekta (default)"
          }
        ],
        "pricing": {
          "billing_mode": "token",
          "image_input_price": null,
          "image_output_price": null,
          "per_request_price": null
        },
        "pricing_profiles": [
          {
            "dimensions": {
              "regime": "base"
            },
            "label": "Base token rates",
            "units": [
              {
                "amount": "0.0004000",
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "input_price",
                "label": "Input tokens",
                "native_amount_usd_per_unit": "0.0000004",
                "native_quantity": 1,
                "native_unit": "input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "input_token"
              },
              {
                "amount": "0",
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "output_price",
                "label": "Output tokens",
                "native_amount_usd_per_unit": "0",
                "native_quantity": 1,
                "native_unit": "output_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "output_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_read_price",
                "label": "Cache read",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "cached_input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "cached_input_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_write_price",
                "label": "Cache write",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "generic_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "generic_cache_creation_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_write_1h_price",
                "label": "Cache write, 1 hour",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "one_hour_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "one_hour_cache_creation_token"
              }
            ]
          }
        ],
        "request_model_id": "google/gemini-embedding-2",
        "route_label": "Ultra",
        "status_reads": [],
        "tiers": [],
        "units": [
          {
            "amount": "0.0004000",
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": true,
            "estimate_only": false,
            "key": "input_price",
            "label": "Input tokens",
            "native_amount_usd_per_unit": "0.0000004",
            "native_quantity": 1,
            "native_unit": "input_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": false,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "input_token"
          },
          {
            "amount": "0",
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": true,
            "estimate_only": false,
            "key": "output_price",
            "label": "Output tokens",
            "native_amount_usd_per_unit": "0",
            "native_quantity": 1,
            "native_unit": "output_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": false,
            "rate_role": "typed_native_retail_rate",
            "side": "out",
            "unit": "output_token"
          },
          {
            "amount": null,
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": true,
            "estimate_only": false,
            "key": "cache_read_price",
            "label": "Cache read",
            "native_amount_usd_per_unit": null,
            "native_quantity": 1,
            "native_unit": "cached_input_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": false,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "cached_input_token"
          },
          {
            "amount": null,
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": true,
            "estimate_only": false,
            "key": "cache_write_price",
            "label": "Cache write",
            "native_amount_usd_per_unit": null,
            "native_quantity": 1,
            "native_unit": "generic_cache_creation_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": false,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "generic_cache_creation_token"
          },
          {
            "amount": null,
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": true,
            "estimate_only": false,
            "key": "cache_write_1h_price",
            "label": "Cache write, 1 hour",
            "native_amount_usd_per_unit": null,
            "native_quantity": 1,
            "native_unit": "one_hour_cache_creation_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": false,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "one_hour_cache_creation_token"
          }
        ]
      }
    }
  ],
  "model_id": "google/gemini-embedding-2",
  "nativeProvenance": {
    "input_facts_canonical_sha256": "573bf378c4f9d816534fbc921cad4398119497b8d4e42a776f6a7cfac69147ba",
    "input_html_sha256": "be6d17b03508eb068c383c7699133d56a9934cff86043f6cb384d4596710fd15",
    "private_audit_sha256": "07f831f9104827ebea8a89a6c1bbcc58696a4fcee7029d333118d85b147fbc0d",
    "role": "historical-normalized-input-audit-hashes",
    "schema": "ailoot-native-model-provenance-v2"
  },
  "page": {
    "canonical": "https://ailoot.ai/models/pl/google-gemini-embedding-2/",
    "description": "Gemini Embedding 2 odwzorowuje tekst, obrazy, dźwięk, wideo i PDF we wspólnej przestrzeni liczbowej. Jego wektory wspierają wyszukiwanie między modalnościami, wyszukiwanie materiałów źródłowych, klasyfikację i grupowanie w klastry, z elastyczną liczbą wymiarów i limitem wejścia 8192 tokenów.",
    "locale": "pl",
    "md_url": "https://ailoot.ai/models/pl/google-gemini-embedding-2/index.md",
    "title": "Google: Gemini Embedding 2 — Ailoot",
    "url": "https://ailoot.ai/models/pl/google-gemini-embedding-2/"
  },
  "rawModel": {
    "about": "Gemini Embedding 2 to multimodalny model osadzeń Google do liczbowej reprezentacji tekstu, obrazów, wideo, dźwięku i PDF. Odwzorowuje różne typy mediów we wspólnej przestrzeni, dzięki czemu aplikacja może porównywać ich znaczenie. Wynikiem jest wektor liczb przydatny do wyszukiwania semantycznego, wyszukiwania dokumentów, rekomendacji, klasyfikacji lub grupowania w klastry; nie jest to pisemna odpowiedź ani wygenerowany plik multimedialny. Google dokumentuje pokrycie semantyczne ponad 100 języków.\n\nDla bazy wiedzy utwórz wektory fragmentów źródłowych, porównaj z nimi zapytanie użytkownika i znajdź odpowiedni materiał. Osobny model tekstowy może następnie ułożyć odpowiedź z wykorzystaniem tych źródeł. W kolekcji mediów opis tekstowy może wyszukiwać powiązane obrazy lub wideo; obraz także może stanowić zapytanie. Zachowaj powiązanie każdego wektora z oryginalną treścią, w tym odwołanie do strony lub klipu, aby znaleziony wynik można było sprawdzić i pokazać w pierwotnym kontekście.\n\nŁączny limit wejścia wynosi 8192 tokeny. Przewodnik po stabilnym modelu dopuszcza do sześciu obrazów PNG lub JPEG, do 180 sekund dźwięku MP3 lub WAV oraz do 120 sekund wideo MP4 lub MOV. Udokumentowane kodeki wideo to H264, H265, AV1 i VP9. Przetwarzanie wideo wykorzystuje najwyżej 32 klatki: klipy do 32 sekund są próbkowane z częstotliwością jednej klatki na sekundę, a dłuższe klipy są próbkowane równomiernie do 32 klatek. Ścieżka dźwiękowa filmu nie jest przetwarzana w tym wejściu wideo; utwórz osadzenie dźwięku osobno, gdy ma on znaczenie dla wyszukiwania.\n\nWejście PDF przyjmuje jeden plik o najwyżej sześciu stronach. Google zaleca jedną stronę na plik PDF dla najlepszej jakości. Dziel większe źródło na znaczące strony lub sekcje i zachowuj ich relację z oryginalnym dokumentem. Wybierz fragment reprezentujący to, co powinno dać się znaleźć, zamiast łączyć niepowiązane materiały tylko dlatego, że mieszczą się w limicie. Wspólna granica tokenów nadal dotyczy żądania z różnymi mediami. Każda strona PDF zużywa 258 tokenów wizualnych oprócz tokenów wyodrębnionego tekstu. W udokumentowanym procesie Google treść przekraczająca wspólny limit 8192 tokenów jest obcinana bez błędu.\n\nLiczba wymiarów wyjścia jest elastyczna, od 128 do 3072, przy domyślnej wartości 3072 i zalecanych rozmiarach 768, 1536 i 3072. Model używa Matryoshka Representation Learning, więc początkowe części wektora pozostają użyteczne przy mniejszej liczbie wymiarów. Przewodnik dokumentuje automatyczną normalizację zarówno domyślnych, jak i skróconych wektorów. Wybierz spójną liczbę wymiarów dla rekordów i zapytań porównywanych przez aplikację; żądany rozmiar zmienia reprezentację liczbową, a nie samą treść źródłową.\n\nW zadaniach wyłącznie tekstowych uwzględniaj cel w tekście, zamiast używać starszego pola task_type. Google rozróżnia wyszukiwanie asymetryczne i porównywanie symetryczne. Zapytanie wyszukiwania używa „task: search result | query: {content}”, a dokument źródłowy – „title: {title} | text: {content}”; użyj „title: none”, jeśli nie ma tytułu. Zadania odpowiadania na pytania, sprawdzania faktów i wyszukiwania kodu mają własne prefiksy zapytań. Dla klasyfikacji, grupowania w klastry lub oceny podobieństwa zdań stosuj konsekwentnie ten sam format zadania po obu stronach. Przewodnik zasadniczo odradza dodawanie prefiksu zadania do części tekstowej łącznej reprezentacji multimodalnej.\n\nStruktura wejścia decyduje, czy wynik reprezentuje jeden połączony obiekt, czy osobne elementy. Wiele części podanych razem tworzy zagregowane osadzenie; osobne obiekty Content tworzą osobne osadzenia dla każdego wpisu. W poście zawierającym tekst i obraz łączna reprezentacja może uchwycić ich relację. Rekordy przeznaczone do niezależnego wyszukiwania zachowaj osobno. Ten wybór wpływa na szczegółowość wyszukiwania: jeden wektor całego posta różni się od jednego wektora dla każdego fragmentu lub obrazu.\n\nPrzewodnik podaje, że wektory z Gemini Embedding 001 i Gemini Embedding 2 zajmują niezgodne przestrzenie i nie można ich bezpośrednio porównywać. Kolekcja migrowana ze starszego modelu wymaga ponownego utworzenia osadzeń w nowej przestrzeni. Utrzymuj spójny wybór modelu i liczby wymiarów dla porównywanych wektorów oraz przechowuj oryginalny tekst i media osobno od indeksu liczbowego. Podobieństwo osadzeń jest sygnałem do wyszukiwania, a nie rzeczowym wyjaśnieniem, dlaczego dokument odpowiada na pytanie użytkownika.\n\nW praktycznym katalogu twórz osadzenie fotografii produktu wraz z zatwierdzonym opisem, gdy para ma być wyszukiwana jako jeden obiekt. W kolekcji dokumentów twórz osadzenia fragmentów dotyczących konkretnych zagadnień i porównuj je z zapytaniem sformatowanym według celu, a następnie prezentuj fragmenty źródłowe obok wyniku wyszukiwania. Dla dźwięku lub wideo wybierz fragment opisujący wyszukiwane zdarzenie i zachowaj jego pierwotny przedział czasowy. Użytecznym rezultatem jest reprezentacja liczbowa powiązana z materiałem źródłowym, wspierająca kolejny krok wyszukiwania lub analizy w aplikacji.",
    "alias_of": null,
    "aliases": [],
    "author": "Google",
    "available": null,
    "canonical_model": "google/gemini-embedding-2",
    "capabilities": {
      "context_length": 8192,
      "manufacturer_input": [
        "text",
        "image",
        "file",
        "audio",
        "video"
      ],
      "manufacturer_output": [
        "embeddings"
      ]
    },
    "card_routes": [
      {
        "label": "Ultra",
        "rates": [
          {
            "amount": "0.0004000",
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": true,
            "estimate_only": false,
            "key": "input_price",
            "label": "Input tokens",
            "native_amount_usd_per_unit": "0.0000004",
            "native_quantity": 1,
            "native_unit": "input_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": false,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "input_token"
          },
          {
            "amount": "0",
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": true,
            "estimate_only": false,
            "key": "output_price",
            "label": "Output tokens",
            "native_amount_usd_per_unit": "0",
            "native_quantity": 1,
            "native_unit": "output_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": false,
            "rate_role": "typed_native_retail_rate",
            "side": "out",
            "unit": "output_token"
          }
        ],
        "summary": "Pełny cennik konfiguracji w szczegółach."
      }
    ],
    "ctx": 8192,
    "entity_type": "model",
    "formats": [
      "embeddings"
    ],
    "id": "google/gemini-embedding-2",
    "input": [
      "text",
      "token_ids"
    ],
    "kind": "embedding",
    "max_out": null,
    "methods": [
      {
        "available": null,
        "cache_read": null,
        "cache_write": null,
        "cache_write_1h": null,
        "contract": {
          "data": {
            "all_results": "Keep every vector with its index. Vector count must equal input count; dimensions must be consistent.",
            "errors": [
              {
                "code": null,
                "condition": "Nieprawidłowe wymagane pola, sposób reprezentacji materiału lub wartość parametru",
                "http_status": 400,
                "recovery": "Popraw wskazane pola przed nowym żądaniem utworzenia.",
                "type": "invalid_request_error"
              }
            ],
            "hints": [],
            "ignored_fields": [],
            "lifecycle": {
              "create": {
                "http": "POST",
                "path": "/v1/embeddings"
              },
              "job_read": null,
              "mode": "synchronous_json",
              "unknown": "Nie wprowadzono endpointu zadań generowania osadzeń."
            },
            "material_combinations": [
              {
                "alternatives": [
                  "string",
                  "string[]",
                  "nonnegative_integer_token_array",
                  "nonnegative_integer_token_array[]"
                ],
                "mode": "text_to_embedding"
              }
            ],
            "operation_modes": [
              "single_embedding",
              "batched_embeddings"
            ],
            "outputs": {
              "all_results": "Zachowaj każdy wektor wraz z jego indeksem. Liczba wektorów musi być równa liczbie elementów wejściowych; wszystkie wektory muszą mieć tę samą liczbę wymiarów.",
              "default_dimensions": null,
              "family": "embedding",
              "fields": [
                {
                  "description": null,
                  "name": "object",
                  "type": "string"
                },
                {
                  "description": null,
                  "name": "model",
                  "type": "string"
                },
                {
                  "description": null,
                  "name": "data[].index",
                  "type": "integer"
                },
                {
                  "description": null,
                  "name": "data[].embedding",
                  "type": "finite float[]"
                },
                {
                  "description": null,
                  "name": "usage",
                  "type": "object"
                }
              ],
              "format": "json"
            },
            "parameters": [
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": [
                  "google/gemini-embedding-2"
                ],
                "enum_known": true,
                "name": "model",
                "required": true,
                "type": "string"
              },
              {
                "availability": "source_interface",
                "budget": {
                  "maximum": 8192,
                  "text_unit": "bajty UTF8",
                  "token_unit": "elementy tablicy tokenów"
                },
                "conditions": "Niepusta, jednorodna partia danych. Identyfikatory tokenów są nieujemnymi liczbami całkowitymi.",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "min_items": 1,
                "name": "input",
                "required": true,
                "type": "string|string[]|integer[]|integer[][]"
              },
              {
                "availability": "source_interface",
                "default": "float",
                "default_known": true,
                "enum": [
                  "float"
                ],
                "enum_known": true,
                "name": "encoding_format",
                "required": false,
                "type": "string"
              },
              {
                "availability": "unsupported",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "minimum": 1,
                "name": "dimensions",
                "required": false,
                "type": "integer"
              },
              {
                "availability": "pass_through_metadata",
                "conditions": "Źródło dopuszcza to pole metadanych JSON; dokładna semantyka po stronie dostawcy zależy od modelu.",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "name": "user",
                "required": false,
                "type": "json_value"
              },
              {
                "availability": "pass_through_metadata",
                "conditions": "Źródło dopuszcza to pole metadanych JSON; dokładna semantyka po stronie dostawcy zależy od modelu.",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "name": "session_id",
                "required": false,
                "type": "json_value"
              },
              {
                "availability": "pass_through_metadata",
                "conditions": "Źródło dopuszcza to pole metadanych JSON; dokładna semantyka po stronie dostawcy zależy od modelu.",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "name": "trace",
                "required": false,
                "type": "json_value"
              },
              {
                "availability": "source_interface",
                "conditions": "Odrzucono provider.options",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "name": "provider",
                "required": false,
                "type": "object"
              }
            ],
            "profile_binding": "Exact existing Ailoot model and method; interface constraints below do not assert provider qualification.",
            "unsupported": [
              "mixed input kinds",
              "empty input",
              "image/audio/file objects",
              "encoding_format=base64",
              "dimensions override"
            ]
          },
          "hints": [
            "Zachowaj indeks i liczbę wymiarów każdego wektora.",
            "Nawet jeśli nazwa modelu wskazuje na multimodalność, ta konkretna ścieżka nie obsługuje obiektów obrazów."
          ],
          "input": {
            "content_type": "application/json",
            "dimensions_override": false,
            "encoding_format": [
              "float"
            ],
            "input_shapes": [
              "string",
              "string[]",
              "nonnegative_integer_token_array",
              "nonnegative_integer_token_array[]"
            ],
            "material_types": [
              "text",
              "token_ids"
            ],
            "max_input_budget_units": 8192,
            "multimodal_objects": false,
            "required": [
              "model",
              "input"
            ]
          },
          "lifecycle": {
            "mode": "synchronous_json",
            "unknown": "no embedding job endpoint inferred"
          },
          "manufacturer_capability": null,
          "method": {
            "http": "POST",
            "path": "/v1/embeddings"
          },
          "method_aliases": [],
          "operation_modes": [
            "text_to_embedding"
          ],
          "output": {
            "default_dimensions": null,
            "family": "embedding",
            "format": "json",
            "http_success": 200,
            "vectors": "one dense float vector per input; indices/model/usage validated"
          }
        },
        "ctx": 8192,
        "declared_pricing_profiles": [
          {
            "dimensions": {
              "regime": "base"
            },
            "label": "Podstawowe stawki za tokeny",
            "units": [
              {
                "amount": "0.0004000",
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "input_price",
                "label": "Input tokens",
                "native_amount_usd_per_unit": "0.0000004",
                "native_quantity": 1,
                "native_unit": "input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "input_token"
              },
              {
                "amount": "0",
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "output_price",
                "label": "Output tokens",
                "native_amount_usd_per_unit": "0",
                "native_quantity": 1,
                "native_unit": "output_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "output_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_read_price",
                "label": "Cache read",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "cached_input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "cached_input_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_write_price",
                "label": "Cache write",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "generic_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "generic_cache_creation_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_write_1h_price",
                "label": "Cache write, 1 hour",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "one_hour_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "one_hour_cache_creation_token"
              }
            ]
          }
        ],
        "examples": [
          {
            "code": "set -eu\n: \"${AILOOT_API_KEY:?Set your Ailoot API key}\"\npython3 - <<'PY_REQUEST'\nimport json,os\nfrom pathlib import Path\np=json.loads('{\"model\": \"google/gemini-embedding-2\", \"input\": [\"First document\", \"Second document\"]}')\n\nPath(\"request.json\").write_text(json.dumps(p,ensure_ascii=False))\nPY_REQUEST\ncurl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/embeddings \\\n  -H \"Authorization: Bearer $AILOOT_API_KEY\" -H 'Content-Type: application/json' \\\n  --data-binary @request.json -D response-headers.txt -o result.json\npython3 - <<'PY_RESULT'\nimport json\nfrom pathlib import Path\nr=json.loads(Path(\"result.json\").read_text())\nfor x in r.get(\"data\",[]): print(json.dumps({\"index\":x.get(\"index\"),\"embedding\":x.get(\"embedding\")}))\nPY_RESULT\n",
            "label": "curl · retained exact creation",
            "language": "bash"
          },
          {
            "code": "from openai import OpenAI\nimport os\n\nclient=OpenAI(base_url=\"https://api.ailoot.ai/v1\",api_key=os.environ[\"AILOOT_API_KEY\"],max_retries=0)\nresult=client.embeddings.create(model='google/gemini-embedding-2',input=[\"First document\",\"Second document\"])\nprint(result)\nfor item in result.data:print(item.index,item.embedding)\n",
            "label": "Python SDK · all vectors",
            "language": "python"
          }
        ],
        "family": "openai",
        "fast_multiplier": 1,
        "flex_multiplier": 1,
        "fmt": "embeddings",
        "hints": [
          "Keep every vector index and dimension.",
          "Multimodal model name does not admit image objects on this exact path."
        ],
        "http": "POST",
        "in": 0.4,
        "input": [
          "text",
          "token_ids"
        ],
        "label": "Эмбеддинги",
        "max_out": null,
        "max_reasoning_effort_multiplier": 1,
        "method_aliases": [],
        "out": 0,
        "output": [
          "embedding"
        ],
        "path": "/v1/embeddings",
        "price_conditions": [
          {
            "label": "Tryb szybki",
            "value": "Stawka standardowa",
            "when": "Gdy wybrany jest tryb szybki"
          },
          {
            "label": "Tryb flex",
            "value": "Stawka standardowa",
            "when": "Gdy wybrany jest tryb flex"
          },
          {
            "label": "Maksymalna intensywność rozumowania",
            "value": "Stawka standardowa",
            "when": "Gdy dla maksymalnej intensywności rozumowania stosowana jest domyślna korekta (default)"
          }
        ],
        "pricing": {
          "billing_mode": "token",
          "image_input_price": null,
          "image_output_price": null,
          "per_request_price": null
        },
        "pricing_profiles": [
          {
            "dimensions": {
              "regime": "base"
            },
            "label": "Base token rates",
            "units": [
              {
                "amount": "0.0004000",
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "input_price",
                "label": "Input tokens",
                "native_amount_usd_per_unit": "0.0000004",
                "native_quantity": 1,
                "native_unit": "input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "input_token"
              },
              {
                "amount": "0",
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "output_price",
                "label": "Output tokens",
                "native_amount_usd_per_unit": "0",
                "native_quantity": 1,
                "native_unit": "output_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "output_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_read_price",
                "label": "Cache read",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "cached_input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "cached_input_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_write_price",
                "label": "Cache write",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "generic_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "generic_cache_creation_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_write_1h_price",
                "label": "Cache write, 1 hour",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "one_hour_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "one_hour_cache_creation_token"
              }
            ]
          }
        ],
        "request_model_id": "google/gemini-embedding-2",
        "route_label": "Ultra",
        "status_reads": [],
        "tiers": [],
        "units": [
          {
            "amount": "0.0004000",
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": true,
            "estimate_only": false,
            "key": "input_price",
            "label": "Input tokens",
            "native_amount_usd_per_unit": "0.0000004",
            "native_quantity": 1,
            "native_unit": "input_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": false,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "input_token"
          },
          {
            "amount": "0",
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": true,
            "estimate_only": false,
            "key": "output_price",
            "label": "Output tokens",
            "native_amount_usd_per_unit": "0",
            "native_quantity": 1,
            "native_unit": "output_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": false,
            "rate_role": "typed_native_retail_rate",
            "side": "out",
            "unit": "output_token"
          },
          {
            "amount": null,
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": true,
            "estimate_only": false,
            "key": "cache_read_price",
            "label": "Cache read",
            "native_amount_usd_per_unit": null,
            "native_quantity": 1,
            "native_unit": "cached_input_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": false,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "cached_input_token"
          },
          {
            "amount": null,
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": true,
            "estimate_only": false,
            "key": "cache_write_price",
            "label": "Cache write",
            "native_amount_usd_per_unit": null,
            "native_quantity": 1,
            "native_unit": "generic_cache_creation_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": false,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "generic_cache_creation_token"
          },
          {
            "amount": null,
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": true,
            "estimate_only": false,
            "key": "cache_write_1h_price",
            "label": "Cache write, 1 hour",
            "native_amount_usd_per_unit": null,
            "native_quantity": 1,
            "native_unit": "one_hour_cache_creation_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": false,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "one_hour_cache_creation_token"
          }
        ]
      }
    ],
    "model_aliases": [
      {
        "canonical_model_id": "google/gemini-embedding-2",
        "request_model_id": "google/gemini-embedding-2",
        "route_label": "Ultra"
      }
    ],
    "name": "Google: Gemini Embedding 2",
    "price": {
      "in": 0.4,
      "in_label": null,
      "out": 0,
      "out_label": null,
      "scope_label": "Token rates",
      "sort_in": 0.4,
      "sort_out": 0,
      "varies": false
    },
    "pricing_profiles": [
      {
        "dimensions": {
          "regime": "base"
        },
        "label": "Эмбеддинги · Base token rates",
        "units": [
          {
            "amount": "0.0004000",
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": true,
            "estimate_only": false,
            "key": "input_price",
            "label": "Input tokens",
            "native_amount_usd_per_unit": "0.0000004",
            "native_quantity": 1,
            "native_unit": "input_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": false,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "input_token"
          },
          {
            "amount": "0",
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": true,
            "estimate_only": false,
            "key": "output_price",
            "label": "Output tokens",
            "native_amount_usd_per_unit": "0",
            "native_quantity": 1,
            "native_unit": "output_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": false,
            "rate_role": "typed_native_retail_rate",
            "side": "out",
            "unit": "output_token"
          },
          {
            "amount": null,
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": true,
            "estimate_only": false,
            "key": "cache_read_price",
            "label": "Cache read",
            "native_amount_usd_per_unit": null,
            "native_quantity": 1,
            "native_unit": "cached_input_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": false,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "cached_input_token"
          },
          {
            "amount": null,
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": true,
            "estimate_only": false,
            "key": "cache_write_price",
            "label": "Cache write",
            "native_amount_usd_per_unit": null,
            "native_quantity": 1,
            "native_unit": "generic_cache_creation_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": false,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "generic_cache_creation_token"
          },
          {
            "amount": null,
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": true,
            "estimate_only": false,
            "key": "cache_write_1h_price",
            "label": "Cache write, 1 hour",
            "native_amount_usd_per_unit": null,
            "native_quantity": 1,
            "native_unit": "one_hour_cache_creation_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": false,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "one_hour_cache_creation_token"
          }
        ]
      }
    ],
    "public_id": "google/gemini-embedding-2",
    "short": "Gemini Embedding 2 odwzorowuje tekst, obrazy, dźwięk, wideo i PDF we wspólnej przestrzeni liczbowej. Jego wektory wspierają wyszukiwanie między modalnościami, wyszukiwanie materiałów źródłowych, klasyfikację i grupowanie w klastry, z elastyczną liczbą wymiarów i limitem wejścia 8192 tokenów."
  },
  "renderer_schema": {
    "method_order": "Original DTO methods order; every exact route/format/path/caller survives.",
    "prices": "Original public DTO fields and original native display HTML; no flattened or normalized offers."
  },
  "representation": "exact-public-dto-and-native-renderer-html",
  "representationNotes": {
    "current_reference": {
      "about_json_pointer": "/aboutHtml",
      "methods": [
        {
          "contract_json_pointer": "/methods/0/rawMethod/contract",
          "html_json_pointer": "/methods/0/html",
          "method_ordinal": 0
        }
      ],
      "role": "current-semantic-reference"
    },
    "raw_input": {
      "examples_role": "historical-input-not-current-ready-examples",
      "json_pointers": [
        "/rawModel",
        "/methods/0/rawMethod"
      ],
      "role": "historical-owner-input"
    },
    "schema": "ailoot-native-model-representations-v1"
  },
  "schema": "ailoot-static-model-facts-v1",
  "schema_version": 1,
  "shortText": "Gemini Embedding 2 odwzorowuje tekst, obrazy, dźwięk, wideo i PDF we wspólnej przestrzeni liczbowej. Jego wektory wspierają wyszukiwanie między modalnościami, wyszukiwanie materiałów źródłowych, klasyfikację i grupowanie w klastry, z elastyczną liczbą wymiarów i limitem wejścia 8192 tokenów.",
  "source": {
    "audit_sha256": "2e00086bcbfc28e64d0cebe97aa47c17d8d5618963027f8ffb9dc6123d7d25b1",
    "bridge_map_sha256": "1125275768b9636fc8461bc7da5061239a81ddfe508e2557843ca42c58ab0036",
    "raw_model_json_sha256": "6107ba5c49f7df9b4b1cdc0aef42ec6f21fae25b742ab693f6946477cf12d271",
    "renderer_sha256": "1217dcf19a93e99ac1d6fd7bf974dc19adc12fea4bd4470c2601f04e48f688cb"
  },
  "sourceRevision": "f5a1d31e9264d7e95d2295086e4a3498de680502680c92d5ab999283675e5b3e"
}
