{
  "aboutHtml": "<p>google/lyria /v1/music/generations арқылы жазбаша промпттан музыка жасайды. Өнім демонстрациясына ұстамды аспаптық фон сұрап, алдыңғы аспаптарды және диктор дауысына қанша орын керек екенін сипаттауға болады. Қажетті нәтиже жасалған музыкалық клип болса таңдаңыз.</p><p>model мен prompt міндетті. n не count бірден сегізге дейін клип қабылдайды, әдіс генерация нәтижесін синхронды қайтарады. Әр клип пен нақты метадерегін сақтаңыз. Audio-reference кірісі, duration баптауы не tempo өрісі жоқ, сондықтан олар бөлек таңдалатын басқарулар емес. Музыкалық ойды промптта беріңіз, бірақ оны шығыстың кепілді өлшенген қасиеті деп санамаңыз.</p>",
  "aboutText": "google/lyria /v1/music/generations арқылы жазбаша промпттан музыка жасайды. Өнім демонстрациясына ұстамды аспаптық фон сұрап, алдыңғы аспаптарды және диктор дауысына қанша орын керек екенін сипаттауға болады. Қажетті нәтиже жасалған музыкалық клип болса таңдаңыз. model мен prompt міндетті. n не count бірден сегізге дейін клип қабылдайды, әдіс генерация нәтижесін синхронды қайтарады. Әр клип пен нақты метадерегін сақтаңыз. Audio-reference кірісі, duration баптауы не tempo өрісі жоқ, сондықтан олар бөлек таңдалатын басқарулар емес. Музыкалық ойды промптта беріңіз, бірақ оны шығыстың кепілді өлшенген қасиеті деп санамаңыз.",
  "editorialOverlay": {
    "copy_fields": {
      "about_html": "<p>google/lyria /v1/music/generations арқылы жазбаша промпттан музыка жасайды. Өнім демонстрациясына ұстамды аспаптық фон сұрап, алдыңғы аспаптарды және диктор дауысына қанша орын керек екенін сипаттауға болады. Қажетті нәтиже жасалған музыкалық клип болса таңдаңыз.</p><p>model мен prompt міндетті. n не count бірден сегізге дейін клип қабылдайды, әдіс генерация нәтижесін синхронды қайтарады. Әр клип пен нақты метадерегін сақтаңыз. Audio-reference кірісі, duration баптауы не tempo өрісі жоқ, сондықтан олар бөлек таңдалатын басқарулар емес. Музыкалық ойды промптта беріңіз, бірақ оны шығыстың кепілді өлшенген қасиеті деп санамаңыз.</p>",
      "short_text": "Мәтіннен музыка жасау: бірден сегізге дейін клип сұрау және нәтижені синхронды алу."
    },
    "copy_sha256": "a8d99450109dd04778950660f5f87b3aa68bba6ed87137fe883d60dd24686d62",
    "copy_source": {
      "locale": "kk",
      "pack_sha256": "0f56d90ba41881e1134accf82e57338f246f8753ca4c0cee929aaffada5d10e7",
      "record_model_id": "google/lyria",
      "source_facts_sha256": "b5ac3e3f61166b3af309833f54e42b7a69dfee98f4ad75ca2b0e309a1175a7c6",
      "validation_sha256": "a2ac2f28056280fc0b2ea34a501bf156d5ce155406e57e708edf30bfdf6bfdc6"
    },
    "html_sha256": "475ecc774cc1bcdacd8897d122f62476e1d6e98ebbc865870cc51f29923aa624",
    "module_sha256": "ee9dc1c50b1e6a8fb7fa062030fcb4646b9aaaeb08be513b723a5a92a7290f06",
    "raw_model_unchanged": true,
    "schema": "ailoot-native-model-editorial-v1"
  },
  "locale": "kk",
  "methods": [
    {
      "html": "<div class=\"sheet-head\"><span class=\"mav\" aria-hidden=\"true\">G</span><h2 id=\"sheet-title\">Lyria</h2><button class=\"icon-btn\" type=\"button\" data-close-sheet aria-label=\"Жабу\">×</button></div><div class=\"idline\"><span>Google /</span><code>google/lyria</code><button type=\"button\" id=\"copy-id\">ID көшіру</button></div><nav class=\"card-jump-nav\" aria-label=\"Модель карточкасының бөлімдері\"><button type=\"button\" data-card-jump=\"overview\">Бастау</button><button type=\"button\" data-card-jump=\"methods\">Кіріс деректері мен әдістер</button><button type=\"button\" data-card-jump=\"pricing\">Тарифтер</button><button type=\"button\" data-card-jump=\"examples\">Мысалдар</button><button type=\"button\" data-card-jump=\"results\">Нәтижелер</button><button type=\"button\" data-card-jump=\"aliases\">Балама атаулар</button></nav><div class=\"card-method-tabs\" role=\"tablist\" aria-label=\"API әдістері\"><button type=\"button\" role=\"tab\" tabindex=\"0\" aria-controls=\"card-method-content\" aria-selected=\"true\" id=\"card-method-tab-0\" data-card-method=\"Core|music|/v1/music/generations|google%2Flyria\">Музыка</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\">Бастау</h3><p class=\"mdesc-full\">Мәтіннен музыка жасау: бірден сегізге дейін клип сұрау және нәтижені синхронды алу.</p><dl class=\"card-io\" data-card-io><div><dt>Қабылданатын кіріс деректері</dt><dd>Мәтін</dd></div><div><dt>Нәтижелер</dt><dd>music</dd></div></dl><details class=\"card-about\"><summary>Модель туралы</summary><p class=\"note-s\" data-model-method-boundary>Бұл сипаттама модель мүмкіндіктерін қамтиды. Ailoot жүйесінде таңдалған әдіс үшін қолжетімді кіріс, шығыс және параметрлер төменде берілген.</p><div class=\"mabout\" id=\"m-about\"><p>google/lyria /v1/music/generations арқылы жазбаша промпттан музыка жасайды. Өнім демонстрациясына ұстамды аспаптық фон сұрап, алдыңғы аспаптарды және диктор дауысына қанша орын керек екенін сипаттауға болады. Қажетті нәтиже жасалған музыкалық клип болса таңдаңыз.</p><p>model мен prompt міндетті. n не count бірден сегізге дейін клип қабылдайды, әдіс генерация нәтижесін синхронды қайтарады. Әр клип пен нақты метадерегін сақтаңыз. Audio-reference кірісі, duration баптауы не tempo өрісі жоқ, сондықтан олар бөлек таңдалатын басқарулар емес. Музыкалық ойды промптта беріңіз, бірақ оны шығыстың кепілді өлшенген қасиеті деп санамаңыз.</p></div></details></section><section class=\"card-section\" data-card-section=\"methods\"><h3 tabindex=\"-1\">Ailoot жүйесінде қолжетімді · кіріс деректері мен әдістер</h3><details class=\"card-method\" open><summary><b>Ailoot · Музыка</b> <code>POST /v1/music/generations</code></summary><dl class=\"method-capabilities\"><div><dt>Кіріс</dt><dd><code>text</code></dd></div><div><dt>Шығыс</dt><dd><code>music</code></dd></div><div><dt>Шығыс пішімі</dt><dd>иелігіңіздегі толық аудиоүзінділер / JSON сілтемелері</dd></div></dl><div class=\"tw\" data-card-parameters data-typed-parameters><table><thead><tr><th>Өріс</th><th>Түрі</th><th>Талап</th><th>Мәндер мен шектеулер</th><th>Әдепкі</th></tr></thead><tbody><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"Өріс\" scope=\"row\"><span class=\"card-cell-label\">Өріс</span><code class=\"card-field-name\">model</code></th><td data-cell-label=\"Түрі\" data-field-type><span class=\"card-cell-label\">Түрі</span><code>string</code></td><td data-cell-label=\"Талап\"><span class=\"card-cell-label\">Талап</span>Міндетті</td><td data-cell-label=\"Мәндер мен шектеулер\"><span class=\"card-cell-label\">Мәндер мен шектеулер</span><div>google/lyria</div></td><td data-cell-label=\"Әдепкі\" data-default=\"unspecified\"><span class=\"card-cell-label\">Әдепкі</span>—</td></tr><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"Өріс\" scope=\"row\"><span class=\"card-cell-label\">Өріс</span><code class=\"card-field-name\">prompt</code></th><td data-cell-label=\"Түрі\" data-field-type><span class=\"card-cell-label\">Түрі</span><code>string</code></td><td data-cell-label=\"Талап\"><span class=\"card-cell-label\">Талап</span>Міндетті</td><td data-cell-label=\"Мәндер мен шектеулер\"><span class=\"card-cell-label\">Мәндер мен шектеулер</span><div>Ең аз ұзындық: 1</div></td><td data-cell-label=\"Әдепкі\" data-default=\"unspecified\"><span class=\"card-cell-label\">Әдепкі</span>—</td></tr><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"Өріс\" scope=\"row\"><span class=\"card-cell-label\">Өріс</span><code class=\"card-field-name\">n</code></th><td data-cell-label=\"Түрі\" data-field-type><span class=\"card-cell-label\">Түрі</span><code>integer</code></td><td data-cell-label=\"Талап\"><span class=\"card-cell-label\">Талап</span>Міндетті емес</td><td data-cell-label=\"Мәндер мен шектеулер\"><span class=\"card-cell-label\">Мәндер мен шектеулер</span><div>Ең азы: 1</div><div>Ең көбі: 8</div></td><td data-cell-label=\"Әдепкі\" data-default=\"known\"><span class=\"card-cell-label\">Әдепкі</span>1</td></tr><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"Өріс\" scope=\"row\"><span class=\"card-cell-label\">Өріс</span><code class=\"card-field-name\">count</code></th><td data-cell-label=\"Түрі\" data-field-type><span class=\"card-cell-label\">Түрі</span><code>integer</code></td><td data-cell-label=\"Талап\"><span class=\"card-cell-label\">Талап</span>Міндетті емес</td><td data-cell-label=\"Мәндер мен шектеулер\"><span class=\"card-cell-label\">Мәндер мен шектеулер</span><div>Ең азы: 1</div><div>Ең көбі: 8</div><div>Шарттар: n өрісі де берілсе, сан сәйкес келуі керек</div></td><td data-cell-label=\"Әдепкі\" data-default=\"unspecified\"><span class=\"card-cell-label\">Әдепкі</span>—</td></tr></tbody></table></div><details class=\"card-about\" data-material-combinations><summary>Кіріс материалдарының үйлесімдері</summary><p class=\"note-s\"><b>text_to_music</b> · Міндетті: prompt</p></details><details class=\"note-s\" data-method-contract><summary>Әдіс параметрлері мен өмірлік циклі</summary><div class=\"tw\" data-card-table=\"contract\"><table><thead><tr><th>Параметр</th><th>Параметр талаптары</th></tr></thead><tbody><tr><th data-cell-label=\"Параметр\" scope=\"row\"><span class=\"card-cell-label\">Параметр</span><code>material_types</code></th><td data-cell-label=\"Параметр талаптары\"><span class=\"card-cell-label\">Параметр талаптары</span>text</td></tr><tr><th data-cell-label=\"Параметр\" scope=\"row\"><span class=\"card-cell-label\">Параметр</span><code>required</code></th><td data-cell-label=\"Параметр талаптары\"><span class=\"card-cell-label\">Параметр талаптары</span>null</td></tr><tr><th data-cell-label=\"Параметр\" scope=\"row\"><span class=\"card-cell-label\">Параметр</span><code>optional_controls</code></th><td data-cell-label=\"Параметр талаптары\"><span class=\"card-cell-label\">Параметр талаптары</span>null</td></tr></tbody></table></div><p>Өмірлік цикл: <code>synchronous_result_then_owned_library</code></p><p class=\"note-s\"><code>GET /v1/media/tasks/{task_id}</code> · Нақты қайтарылған task_id немесе медиатека жазбасы</p><p class=\"note-s\"><code>GET /v1/media/assets/{asset_id}/content</code></p><p class=\"note-s\"><code>GET /v1/media/assets</code></p><p class=\"note-s\"><code>GET /v1/media/assets/{asset_id}</code></p><p class=\"note-s\">Әдіс құрылымдары мен ID мәндері дәл берілген; жеткізушінің мүмкіндігі сұрауды қабылдаудан бөлек қаралады.</p></details></details></section><section class=\"card-section\" data-card-section=\"pricing\"><h3 tabindex=\"-1\">Тарифтер</h3><h4>Ailoot әдістерінің мөлшерлемелері</h4><section class=\"meth\" data-route=\"Core\"><header><b><span class=\"alias\">Ailoot</span> Музыка</b><code>POST /v1/music/generations</code></header><dl><div><dt>Шығыс</dt><dd>0,08 $ <em>клип үшін</em></dd></div><div data-billing-reference=\"not-added\"><dt>Тек анықтама · қосылмайды</dt><dd>0,08 $ <em>әр сұрау үшін</em></dd></div></dl><div data-music-clip-pricing=\"v1\"><p class=\"note-s\">Жеткізілген клиптер × әр клиптің базалық тарифі. Сұрау үшін анықтамалық тариф қосылмайды. Мысалдар қолданылатын түзетулерге дейін берілген.</p><p><code>1 × 0,08 $ = 0,08 $</code></p><p><code>4 × 0,08 $ = 0,32 $</code></p></div></section><p class=\"note-s\">Ailoot сұрау алдында болжамды соманы резервтейді. Нәтижеден кейін өлшенген пайдалану көлемі бойынша қорытынды төлемді шегереді. Ағындық жауап үшін төлем соңғы пайдалану жазбасы негізінде шегеріледі. <a href=\"/docs/kk/billing/reserve/\">Резервтеу мен төлемді есептеу тәртібі →</a></p></section><section class=\"card-section\" data-card-section=\"examples\"><h3 tabindex=\"-1\">Сұрау мысалдары</h3><h4>Ailoot · Музыка</h4><div class=\"code-group\"><div class=\"cg-bar\"><div class=\"cg-tabs\" role=\"tablist\" aria-label=\"Код нұсқалары\"><button class=\"cg-tab\" id=\"model-code-354-tab-0\" role=\"tab\" type=\"button\" aria-controls=\"model-code-354-panel-0\" aria-selected=\"true\" tabindex=\"0\">Музыка мысалы</button></div><div class=\"cg-tools\"><button class=\"cg-btn cg-copy\" type=\"button\" aria-label=\"Кодты көшіру\"><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-354-panel-0\" role=\"tabpanel\" aria-labelledby=\"model-code-354-tab-0\"><pre data-lang=\"bash\"><code>set -eu\n: &quot;${AILOOT_API_KEY:?Set your Ailoot API key}&quot;\n: &quot;${AILOOT_PROMPT_FILE:?Set your actual UTF-8 music brief}&quot;\nexport AILOOT_PROMPT_FILE\npython3 - &lt;&lt;&#39;PY_REQUEST&#39;\nimport json,os\nfrom pathlib import Path\np=json.loads(&#39;{&quot;model&quot;: &quot;google/lyria&quot;, &quot;prompt&quot;: &quot;&quot;}&#39;)\nf=Path(os.environ[&quot;AILOOT_PROMPT_FILE&quot;])\nif not f.is_file():raise SystemExit(&quot;Choose your actual UTF-8 brief&quot;)\np[&#39;prompt&#39;]=f.read_text(encoding=&quot;utf-8&quot;)\nif not p[&#39;prompt&#39;].strip():raise SystemExit(&quot;Brief must contain text&quot;)\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/music/generations \\\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\nexport AILOOT_API_KEY\npython3 - &lt;&lt;&#39;PY_RESULT&#39;\nimport json, os, subprocess\nfrom pathlib import Path\nfrom urllib.parse import urljoin, urlparse\nresult=json.loads(Path(&quot;result.json&quot;).read_text(encoding=&quot;utf-8&quot;))\nprint(json.dumps(result,ensure_ascii=False,indent=2))\nfor number,clip in enumerate(result.get(&quot;data&quot;) or []):\n    u=urlparse(urljoin(&quot;https://api.ailoot.ai&quot;,clip[&quot;url&quot;]))\n    if u.scheme!=&quot;https&quot; or not u.hostname or u.username or u.password:\n        raise SystemExit(&quot;Result URL must be HTTPS without embedded credentials&quot;)\n    owned=u.netloc==&quot;api.ailoot.ai&quot; and u.path.startswith(&quot;/v1/media/assets/&quot;) and u.path.endswith(&quot;/content&quot;)\n    args=[&quot;curl&quot;,&quot;--fail-with-body&quot;,&quot;--silent&quot;,&quot;--show-error&quot;,u.geturl()]\n    if owned: args += [&quot;-H&quot;,&quot;Authorization: Bearer &quot;+os.environ[&quot;AILOOT_API_KEY&quot;]]\n    raw=subprocess.check_output(args)\n    ext=&quot;wav&quot; if raw.startswith(b&quot;RIFF&quot;) and raw[8:12]==b&quot;WAVE&quot; else &quot;flac&quot; if raw.startswith(b&quot;fLaC&quot;) else &quot;ogg&quot; if raw.startswith(b&quot;OggS&quot;) else &quot;mp3&quot; if raw.startswith(b&quot;ID3&quot;) or raw[:1]==b&quot;\\xff&quot; else &quot;bin&quot;\n    f=Path(&quot;music-&quot;+str(number)+&quot;.&quot;+ext);f.write_bytes(raw)\n    print(&quot;Saved&quot;,f,clip.get(&quot;asset_id&quot;))\n\nPY_RESULT\n</code></pre></div></div></div></section><section class=\"card-section\" data-card-section=\"results\"><h3 tabindex=\"-1\">Нәтижелерді алу және сақтау</h3><h4>Ailoot · Музыка</h4><p class=\"note-s\">иелігіңіздегі толық аудиоүзінділер / JSON сілтемелері</p><ul class=\"card-result-paths\"><li><code>GET /v1/media/tasks/{task_id}</code></li><li><code>GET /v1/media/assets/{asset_id}/content</code></li><li><code>GET /v1/media/assets</code></li><li><code>GET /v1/media/assets/{asset_id}</code></li></ul><div class=\"card-result-process\" data-all-results><h5>Барлық дайын нәтижені сақтау</h5><p class=\"note-s\">Қайтарылған әр толық жауапты, файлды және мазмұн бөлігін сақтаңыз.</p><p class=\"note-s\">Қайтарылған әрбір аудиоүзіндіні сақтаңыз немесе жүктеп алыңыз және нақты ID, MIME түрін, метадеректерін сақтаңыз. Әдіс синхронды жұмыс істейді; Ailoot музыка генерациясының күйін сұрауға бөлек URL енгізілмейді.</p></div><div class=\"card-result-process\" data-unknown-recovery><h5>Бастапқы жауапты тексеру қажет болса</h5><p class=\"note-s\">Музыка нәтижесін тексеру қажет болса, бастапқы operation_id/X-Client-Request-ID мәндерін және қайтарылған аудиоүзінді мәліметін сақтаңыз. Иелігіңіздегі бар аудиоүзінділерді нақты task_id немесе asset_id мәндері арқылы медиатекадан қалпына келтіріңіз. Музыка сұрауын қайта жібермеңіз және operation_id мәнінен генерация күйін сұрайтын URL құрастырмаңыз.</p></div><details class=\"card-about\" data-output-fields><summary>Жауап өрістері</summary><div class=\"tw\" data-card-table=\"output\"><table><thead><tr><th>Өріс</th><th>Түрі</th></tr></thead><tbody><tr><th data-cell-label=\"Өріс\" scope=\"row\"><span class=\"card-cell-label\">Өріс</span><code class=\"card-field-name\">model</code></th><td data-cell-label=\"Түрі\" data-field-type><span class=\"card-cell-label\">Түрі</span>string</td></tr><tr><th data-cell-label=\"Өріс\" scope=\"row\"><span class=\"card-cell-label\">Өріс</span><code class=\"card-field-name\">response_id</code></th><td data-cell-label=\"Түрі\" data-field-type><span class=\"card-cell-label\">Түрі</span>string</td></tr><tr><th data-cell-label=\"Өріс\" scope=\"row\"><span class=\"card-cell-label\">Өріс</span><code class=\"card-field-name\">data[]</code></th><td data-cell-label=\"Түрі\" data-field-type><span class=\"card-cell-label\">Түрі</span>owned clip record</td></tr></tbody></table></div></details><details class=\"card-about\" data-method-errors><summary>Қателер және келесі қадамдар</summary><div class=\"tw\" data-card-table=\"errors\"><table><thead><tr><th>Жауап</th><th>Шарт</th><th>Келесі қадам</th></tr></thead><tbody><tr><th data-cell-label=\"Жауап\" scope=\"row\"><span class=\"card-cell-label\">Жауап</span>400 · <code>invalid_request_error</code></th><td data-cell-label=\"Шарт\"><span class=\"card-cell-label\">Шарт</span>Міндетті өрістер, материалды ұсыну тәсілі немесе параметр мәні қате</td><td data-cell-label=\"Келесі қадам\"><span class=\"card-cell-label\">Келесі қадам</span>Жаңадан жасау сұрауын жібермес бұрын көрсетілген өрістерді түзетіңіз.</td></tr><tr><th data-cell-label=\"Жауап\" scope=\"row\"><span class=\"card-cell-label\">Жауап</span><code>server_error</code></th><td data-cell-label=\"Шарт\"><span class=\"card-cell-label\">Шарт</span>Қайтарылған жауапта операцияны немесе нәтижені тексеру қажет екені көрсетілген</td><td data-cell-label=\"Келесі қадам\"><span class=\"card-cell-label\">Келесі қадам</span>Бастапқыда қайтарылған операцияның/тапсырманың ID мәнін, сұрау тақырыптарын және жауабын сақтаңыз; сол бастапқы операцияны қолдау көрсетілетін тәсілдермен оқуды жалғастырыңыз. Жасау сұрауын қайта жібермеңіз.</td></tr></tbody></table></div></details></section><section class=\"card-section\" data-card-section=\"aliases\"><h3 tabindex=\"-1\">Балама атаулар</h3><h4>Модельдердің балама атаулары</h4><p class=\"note-s\"><span data-model-alias-route=\"Core\"><b>Ailoot</b> <a href=\"#m=google%2Flyria&amp;route=Core&amp;caller=google%2Flyria&amp;fmt=music\"><code>google/lyria</code></a></span></p><h4>Әдіс жолдарының балама атаулары</h4><p class=\"note-s\">Жоғарыда көрсетілген әдіс жолдарын пайдаланыңыз.</p><h4>Шақыруға арналған байланысты ID</h4><p class=\"note-s\"><a href=\"#m=google%2Flyria&amp;route=Core&amp;caller=google%2Flyria&amp;fmt=music\"><code>google/lyria</code></a></p></section></div>",
      "method_identity": {
        "effective_request_model_id": "google/lyria",
        "fmt": "music",
        "http": "POST",
        "path": "/v1/music/generations",
        "request_model_id": "google/lyria",
        "route_label": "Core"
      },
      "method_key": "Core|music|/v1/music/generations|google%2Flyria",
      "ordinal": 0,
      "rawMethod": {
        "cache_read": null,
        "cache_write": null,
        "cache_write_1h": null,
        "cache_write_5m": null,
        "conditional_meter": null,
        "contract": {
          "data": {
            "all_results": "Save/fetch every returned clip and preserve actual ID, MIME and metadata. The method is synchronous; no separate Ailoot music generationpollingURL is introduced.",
            "errors": [
              {
                "code": null,
                "condition": "Міндетті өрістер, материалды ұсыну тәсілі немесе параметр мәні қате",
                "http_status": 400,
                "recovery": "Жаңадан жасау сұрауын жібермес бұрын көрсетілген өрістерді түзетіңіз.",
                "type": "invalid_request_error"
              },
              {
                "code": null,
                "condition": "Қайтарылған жауапта операцияны немесе нәтижені тексеру қажет екені көрсетілген",
                "http_status": null,
                "recovery": "Бастапқыда қайтарылған операцияның/тапсырманың ID мәнін, сұрау тақырыптарын және жауабын сақтаңыз; сол бастапқы операцияны қолдау көрсетілетін тәсілдермен оқуды жалғастырыңыз. Жасау сұрауын қайта жібермеңіз.",
                "type": "server_error"
              }
            ],
            "hints": [],
            "ignored_fields": [],
            "lifecycle": {
              "all_results": "Follow everyactualreturnedoutputandownedasset; no result is discardedbecauseindex0orcontent_urlalreadyexists.",
              "assets": [
                {
                  "http": "GET",
                  "path": "/v1/media/assets"
                },
                {
                  "http": "GET",
                  "path": "/v1/media/assets/{asset_id}"
                }
              ],
              "content": [
                {
                  "http": "GET",
                  "path": "/v1/media/assets/{asset_id}/content",
                  "url_source": "exact returned signed URL; never construct token"
                }
              ],
              "mode": "synchronous_result_then_owned_library",
              "operation_id_is_not_task_id": true,
              "status": [
                {
                  "http": "GET",
                  "id_source": "actual returned task_id or media library record",
                  "path": "/v1/media/tasks/{task_id}"
                }
              ],
              "unknown": "Музыка нәтижесін тексеру қажет болса, бастапқы operation_id/X-Client-Request-ID мәндерін және қайтарылған аудиоүзінді мәліметін сақтаңыз. Иелігіңіздегі бар аудиоүзінділерді нақты task_id немесе asset_id мәндері арқылы медиатекадан қалпына келтіріңіз. Музыка сұрауын қайта жібермеңіз және operation_id мәнінен генерация күйін сұрайтын URL құрастырмаңыз."
            },
            "material_combinations": [
              {
                "content_type": "application/json",
                "mode": "text_to_music",
                "required": [
                  "prompt"
                ]
              }
            ],
            "media_library": {
              "asset": {
                "fields": [
                  {
                    "description": null,
                    "name": "asset_id",
                    "type": "string"
                  },
                  {
                    "description": null,
                    "name": "task_id",
                    "type": "string"
                  },
                  {
                    "description": null,
                    "name": "output_key",
                    "type": "string"
                  },
                  {
                    "description": null,
                    "name": "family",
                    "type": "string"
                  },
                  {
                    "description": null,
                    "name": "model",
                    "type": "string"
                  },
                  {
                    "description": null,
                    "name": "method",
                    "type": "string"
                  },
                  {
                    "description": null,
                    "name": "status",
                    "type": "string"
                  },
                  {
                    "description": null,
                    "name": "content_type",
                    "type": "string"
                  },
                  {
                    "description": null,
                    "name": "sha256",
                    "type": "string"
                  },
                  {
                    "description": null,
                    "name": "size_bytes",
                    "type": "integer"
                  },
                  {
                    "description": null,
                    "name": "content_url",
                    "type": "string"
                  }
                ],
                "http": "GET",
                "id_source": "actual returned asset_id",
                "path": "/v1/media/assets/{asset_id}"
              },
              "content": {
                "http": "GET",
                "path": "/v1/media/assets/{asset_id}/content",
                "range_header_supported": true,
                "url_source": "Use exact returned signed content_url including its token; do not construct a token."
              },
              "expired_link": {
                "code": "link_expired",
                "http_status": 404,
                "recovery": "Read the asset again to obtain its refreshed signed content_url, then fetch that URL. Do not regenerate."
              },
              "list": {
                "all_pages": "Follow every returned next_cursor, then select records by their actual task_id/output_key.",
                "http": "GET",
                "output_fields": [
                  {
                    "description": null,
                    "name": "object",
                    "type": "string"
                  },
                  {
                    "description": null,
                    "name": "data",
                    "type": "asset[]"
                  },
                  {
                    "description": null,
                    "name": "next_cursor",
                    "type": "string|null"
                  }
                ],
                "parameters": [
                  {
                    "availability": "source_interface",
                    "default": null,
                    "default_known": false,
                    "enum": null,
                    "enum_known": false,
                    "name": "family",
                    "required": false,
                    "type": "string"
                  },
                  {
                    "availability": "source_interface",
                    "default": null,
                    "default_known": false,
                    "enum": null,
                    "enum_known": false,
                    "name": "cursor",
                    "required": false,
                    "type": "string"
                  },
                  {
                    "availability": "source_interface",
                    "default": 20,
                    "default_known": true,
                    "enum": null,
                    "enum_known": false,
                    "maximum": 100,
                    "minimum": 1,
                    "name": "limit",
                    "required": false,
                    "type": "integer"
                  }
                ],
                "path": "/v1/media/assets"
              },
              "revoke": {
                "http": "DELETE",
                "meaning": "Revokes/deletes the existing owned file; this is not generation cancellation.",
                "path": "/v1/media/assets/{asset_id}",
                "pending_status": "revoking",
                "success_statuses": [
                  202,
                  204
                ]
              },
              "task": {
                "http": "GET",
                "id_source": "actual returned task_id or media library record; operation_id is not task_id",
                "path": "/v1/media/tasks/{task_id}"
              }
            },
            "operation_modes": [
              "text_to_music"
            ],
            "outputs": {
              "all_results": "Қайтарылған әрбір аудиоүзіндіні сақтаңыз немесе жүктеп алыңыз және нақты ID, MIME түрін, метадеректерін сақтаңыз. Әдіс синхронды жұмыс істейді; Ailoot музыка генерациясының күйін сұрауға бөлек URL енгізілмейді.",
              "family": "music",
              "fields": [
                {
                  "description": null,
                  "name": "model",
                  "type": "string"
                },
                {
                  "description": null,
                  "name": "response_id",
                  "type": "string"
                },
                {
                  "description": null,
                  "name": "data[]",
                  "type": "owned clip record"
                }
              ],
              "format": "иелігіңіздегі толық аудиоүзінділер / JSON сілтемелері"
            },
            "parameters": [
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": [
                  "google/lyria"
                ],
                "enum_known": true,
                "name": "model",
                "required": true,
                "type": "string"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "min_length": 1,
                "name": "prompt",
                "required": true,
                "type": "string"
              },
              {
                "availability": "source_interface",
                "default": 1,
                "default_known": true,
                "enum": null,
                "enum_known": false,
                "maximum": 8,
                "minimum": 1,
                "name": "n",
                "required": false,
                "type": "integer"
              },
              {
                "availability": "source_interface",
                "conditions": "n өрісі де берілсе, сан сәйкес келуі керек",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "maximum": 8,
                "minimum": 1,
                "name": "count",
                "required": false,
                "type": "integer"
              }
            ],
            "profile_binding": "Exact existing Ailoot model and method; interface constraints below do not assert provider qualification.",
            "unsupported": []
          },
          "hints": [
            "Әдіс құрылымдары мен ID мәндері дәл берілген; жеткізушінің мүмкіндігі сұрауды қабылдаудан бөлек қаралады."
          ],
          "input": {
            "material_types": [
              "text"
            ],
            "optional_controls": null,
            "required": null
          },
          "lifecycle": {
            "assets": [
              {
                "http": "GET",
                "path": "/v1/media/assets"
              },
              {
                "http": "GET",
                "path": "/v1/media/assets/{asset_id}"
              }
            ],
            "content": [
              {
                "http": "GET",
                "path": "/v1/media/assets/{asset_id}/content",
                "url_source": "exact returned signed URL; never construct token"
              }
            ],
            "mode": "synchronous_result_then_owned_library",
            "operation_id_is_not_task_id": true,
            "status": [
              {
                "http": "GET",
                "id_source": "Нақты қайтарылған task_id немесе медиатека жазбасы",
                "path": "/v1/media/tasks/{task_id}"
              }
            ],
            "unknown": "If a music result requires a check, keep the original operation_id/X-Client-Request-ID and returned clip information. Recover existing owned clips through the media library using actual task_id or asset_id values. Do not resubmit the music request or construct a generation polling URL from operation_id."
          },
          "method": {
            "http": "POST",
            "path": "/v1/music/generations"
          },
          "operation_modes": [
            "music"
          ],
          "output": {
            "family": [
              "music"
            ],
            "format": null,
            "multioutputs": "retain every actual response output"
          }
        },
        "ctx": null,
        "examples": [
          {
            "code": "set -eu\n: \"${AILOOT_API_KEY:?Set your Ailoot API key}\"\n: \"${AILOOT_PROMPT_FILE:?Set your actual UTF-8 music brief}\"\nexport AILOOT_PROMPT_FILE\npython3 - <<'PY_REQUEST'\nimport json,os\nfrom pathlib import Path\np=json.loads('{\"model\": \"google/lyria\", \"prompt\": \"\"}')\nf=Path(os.environ[\"AILOOT_PROMPT_FILE\"])\nif not f.is_file():raise SystemExit(\"Choose your actual UTF-8 brief\")\np['prompt']=f.read_text(encoding=\"utf-8\")\nif not p['prompt'].strip():raise SystemExit(\"Brief must contain text\")\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/music/generations \\\n  -H \"Authorization: Bearer $AILOOT_API_KEY\" -H 'Content-Type: application/json' \\\n  --data-binary @request.json -D response-headers.txt -o result.json\nexport AILOOT_API_KEY\npython3 - <<'PY_RESULT'\nimport json, os, subprocess\nfrom pathlib import Path\nfrom urllib.parse import urljoin, urlparse\nresult=json.loads(Path(\"result.json\").read_text(encoding=\"utf-8\"))\nprint(json.dumps(result,ensure_ascii=False,indent=2))\nfor number,clip in enumerate(result.get(\"data\") or []):\n    u=urlparse(urljoin(\"https://api.ailoot.ai\",clip[\"url\"]))\n    if u.scheme!=\"https\" or not u.hostname or u.username or u.password:\n        raise SystemExit(\"Result URL must be HTTPS without embedded credentials\")\n    owned=u.netloc==\"api.ailoot.ai\" and u.path.startswith(\"/v1/media/assets/\") and u.path.endswith(\"/content\")\n    args=[\"curl\",\"--fail-with-body\",\"--silent\",\"--show-error\",u.geturl()]\n    if owned: args += [\"-H\",\"Authorization: Bearer \"+os.environ[\"AILOOT_API_KEY\"]]\n    raw=subprocess.check_output(args)\n    ext=\"wav\" if raw.startswith(b\"RIFF\") and raw[8:12]==b\"WAVE\" else \"flac\" if raw.startswith(b\"fLaC\") else \"ogg\" if raw.startswith(b\"OggS\") else \"mp3\" if raw.startswith(b\"ID3\") or raw[:1]==b\"\\xff\" else \"bin\"\n    f=Path(\"music-\"+str(number)+\".\"+ext);f.write_bytes(raw)\n    print(\"Saved\",f,clip.get(\"asset_id\"))\n\nPY_RESULT\n",
            "label": "Compose from your actual music brief",
            "language": "bash"
          }
        ],
        "family": "openai",
        "fast_multiplier": null,
        "flex_multiplier": null,
        "fmt": "music",
        "http": "POST",
        "img_in": null,
        "img_out": null,
        "in": null,
        "input": [
          "text"
        ],
        "label": "Музыка",
        "max_out": null,
        "max_tool_calls": null,
        "out": null,
        "output": [
          "music"
        ],
        "path": "/v1/music/generations",
        "pricing_profiles": [
          {
            "dimensions": {},
            "label": "Core",
            "units": [
              {
                "amount": 0.08,
                "amount_unit": "usd_per_display_unit",
                "key": "music_output_clip",
                "label": "per clip",
                "side": "out"
              },
              {
                "amount": 0.08,
                "amount_unit": "usd_per_display_unit",
                "key": "per_request",
                "label": "per request",
                "side": "out"
              }
            ]
          }
        ],
        "request_model_id": "google/lyria",
        "route_label": "Core",
        "status_reads": [],
        "tiers": [],
        "tool_prices": null,
        "unit": "music_output_clip",
        "units": [
          {
            "key": "music_output_clip",
            "label": "per clip",
            "side": "out",
            "usd": 0.08
          },
          {
            "key": "per_request",
            "label": "per request",
            "side": "out",
            "usd": 0.08
          }
        ]
      }
    }
  ],
  "model_id": "google/lyria",
  "nativeProvenance": {
    "input_facts_canonical_sha256": "98e916e485ed6b26f8bdce97337e7b1f5ec12ce9222cc8b41a330133caac0a6d",
    "input_html_sha256": "d5d9d93742677daedecc7cbd77e5f4c62d1eef89cadbd41c842a9435e6c8ed0f",
    "private_audit_sha256": "9fb203f5272214d84f0a8560260231d2565d1f2bb761be818f45620ca166e55b",
    "role": "historical-normalized-input-audit-hashes",
    "schema": "ailoot-native-model-provenance-v2"
  },
  "page": {
    "canonical": "https://ailoot.ai/models/kk/google-lyria/",
    "description": "Мәтіннен музыка жасау: бірден сегізге дейін клип сұрау және нәтижені синхронды алу.",
    "locale": "kk",
    "md_url": "https://ailoot.ai/models/kk/google-lyria/index.md",
    "title": "Lyria — Ailoot",
    "url": "https://ailoot.ai/models/kk/google-lyria/"
  },
  "rawModel": {
    "about": "Lyria — мұнда ұсынылған, мәтін қабылдап, музыка шығаратын атаулы музыка жасау профилі.\n\nТапсырманы тыңдаушының не естуі керегіне сүйеніп жазыңыз. Көңіл күйді, басым естілетін аспаптарды, қарқынды және көзделген қолдануды көрсетіңіз. Көрініс тапсырмасында тыныш басталуды, жігерлірек ортаңғы бөлікті және ұстамды аяқталуды бөлек белгілеуге болады.\n\nФондық музыка үшін трек диктордың сөзін сүйемелдеуі керек пе, әлде көріністің негізгі әсерін өзі беруі керек пе, соны түсіндіріңіз. Музыкалық сипаттарды тікелей айтыңыз: мысалы, сирек ноталы фортепиано, бірқалыпты ырғақ немесе жылы оркестрлік үн.",
    "alias_of": null,
    "aliases": [],
    "author": "Google",
    "ctx": null,
    "formats": [
      "music"
    ],
    "id": "google/lyria",
    "input": [
      "text"
    ],
    "kind": "music",
    "max_out": null,
    "methods": [
      {
        "cache_read": null,
        "cache_write": null,
        "cache_write_1h": null,
        "cache_write_5m": null,
        "conditional_meter": null,
        "contract": {
          "data": {
            "all_results": "Save/fetch every returned clip and preserve actual ID, MIME and metadata. The method is synchronous; no separate Ailoot music generationpollingURL is introduced.",
            "errors": [
              {
                "code": null,
                "condition": "Міндетті өрістер, материалды ұсыну тәсілі немесе параметр мәні қате",
                "http_status": 400,
                "recovery": "Жаңадан жасау сұрауын жібермес бұрын көрсетілген өрістерді түзетіңіз.",
                "type": "invalid_request_error"
              },
              {
                "code": null,
                "condition": "Қайтарылған жауапта операцияны немесе нәтижені тексеру қажет екені көрсетілген",
                "http_status": null,
                "recovery": "Бастапқыда қайтарылған операцияның/тапсырманың ID мәнін, сұрау тақырыптарын және жауабын сақтаңыз; сол бастапқы операцияны қолдау көрсетілетін тәсілдермен оқуды жалғастырыңыз. Жасау сұрауын қайта жібермеңіз.",
                "type": "server_error"
              }
            ],
            "hints": [],
            "ignored_fields": [],
            "lifecycle": {
              "all_results": "Follow everyactualreturnedoutputandownedasset; no result is discardedbecauseindex0orcontent_urlalreadyexists.",
              "assets": [
                {
                  "http": "GET",
                  "path": "/v1/media/assets"
                },
                {
                  "http": "GET",
                  "path": "/v1/media/assets/{asset_id}"
                }
              ],
              "content": [
                {
                  "http": "GET",
                  "path": "/v1/media/assets/{asset_id}/content",
                  "url_source": "exact returned signed URL; never construct token"
                }
              ],
              "mode": "synchronous_result_then_owned_library",
              "operation_id_is_not_task_id": true,
              "status": [
                {
                  "http": "GET",
                  "id_source": "actual returned task_id or media library record",
                  "path": "/v1/media/tasks/{task_id}"
                }
              ],
              "unknown": "Музыка нәтижесін тексеру қажет болса, бастапқы operation_id/X-Client-Request-ID мәндерін және қайтарылған аудиоүзінді мәліметін сақтаңыз. Иелігіңіздегі бар аудиоүзінділерді нақты task_id немесе asset_id мәндері арқылы медиатекадан қалпына келтіріңіз. Музыка сұрауын қайта жібермеңіз және operation_id мәнінен генерация күйін сұрайтын URL құрастырмаңыз."
            },
            "material_combinations": [
              {
                "content_type": "application/json",
                "mode": "text_to_music",
                "required": [
                  "prompt"
                ]
              }
            ],
            "media_library": {
              "asset": {
                "fields": [
                  {
                    "description": null,
                    "name": "asset_id",
                    "type": "string"
                  },
                  {
                    "description": null,
                    "name": "task_id",
                    "type": "string"
                  },
                  {
                    "description": null,
                    "name": "output_key",
                    "type": "string"
                  },
                  {
                    "description": null,
                    "name": "family",
                    "type": "string"
                  },
                  {
                    "description": null,
                    "name": "model",
                    "type": "string"
                  },
                  {
                    "description": null,
                    "name": "method",
                    "type": "string"
                  },
                  {
                    "description": null,
                    "name": "status",
                    "type": "string"
                  },
                  {
                    "description": null,
                    "name": "content_type",
                    "type": "string"
                  },
                  {
                    "description": null,
                    "name": "sha256",
                    "type": "string"
                  },
                  {
                    "description": null,
                    "name": "size_bytes",
                    "type": "integer"
                  },
                  {
                    "description": null,
                    "name": "content_url",
                    "type": "string"
                  }
                ],
                "http": "GET",
                "id_source": "actual returned asset_id",
                "path": "/v1/media/assets/{asset_id}"
              },
              "content": {
                "http": "GET",
                "path": "/v1/media/assets/{asset_id}/content",
                "range_header_supported": true,
                "url_source": "Use exact returned signed content_url including its token; do not construct a token."
              },
              "expired_link": {
                "code": "link_expired",
                "http_status": 404,
                "recovery": "Read the asset again to obtain its refreshed signed content_url, then fetch that URL. Do not regenerate."
              },
              "list": {
                "all_pages": "Follow every returned next_cursor, then select records by their actual task_id/output_key.",
                "http": "GET",
                "output_fields": [
                  {
                    "description": null,
                    "name": "object",
                    "type": "string"
                  },
                  {
                    "description": null,
                    "name": "data",
                    "type": "asset[]"
                  },
                  {
                    "description": null,
                    "name": "next_cursor",
                    "type": "string|null"
                  }
                ],
                "parameters": [
                  {
                    "availability": "source_interface",
                    "default": null,
                    "default_known": false,
                    "enum": null,
                    "enum_known": false,
                    "name": "family",
                    "required": false,
                    "type": "string"
                  },
                  {
                    "availability": "source_interface",
                    "default": null,
                    "default_known": false,
                    "enum": null,
                    "enum_known": false,
                    "name": "cursor",
                    "required": false,
                    "type": "string"
                  },
                  {
                    "availability": "source_interface",
                    "default": 20,
                    "default_known": true,
                    "enum": null,
                    "enum_known": false,
                    "maximum": 100,
                    "minimum": 1,
                    "name": "limit",
                    "required": false,
                    "type": "integer"
                  }
                ],
                "path": "/v1/media/assets"
              },
              "revoke": {
                "http": "DELETE",
                "meaning": "Revokes/deletes the existing owned file; this is not generation cancellation.",
                "path": "/v1/media/assets/{asset_id}",
                "pending_status": "revoking",
                "success_statuses": [
                  202,
                  204
                ]
              },
              "task": {
                "http": "GET",
                "id_source": "actual returned task_id or media library record; operation_id is not task_id",
                "path": "/v1/media/tasks/{task_id}"
              }
            },
            "operation_modes": [
              "text_to_music"
            ],
            "outputs": {
              "all_results": "Қайтарылған әрбір аудиоүзіндіні сақтаңыз немесе жүктеп алыңыз және нақты ID, MIME түрін, метадеректерін сақтаңыз. Әдіс синхронды жұмыс істейді; Ailoot музыка генерациясының күйін сұрауға бөлек URL енгізілмейді.",
              "family": "music",
              "fields": [
                {
                  "description": null,
                  "name": "model",
                  "type": "string"
                },
                {
                  "description": null,
                  "name": "response_id",
                  "type": "string"
                },
                {
                  "description": null,
                  "name": "data[]",
                  "type": "owned clip record"
                }
              ],
              "format": "иелігіңіздегі толық аудиоүзінділер / JSON сілтемелері"
            },
            "parameters": [
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": [
                  "google/lyria"
                ],
                "enum_known": true,
                "name": "model",
                "required": true,
                "type": "string"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "min_length": 1,
                "name": "prompt",
                "required": true,
                "type": "string"
              },
              {
                "availability": "source_interface",
                "default": 1,
                "default_known": true,
                "enum": null,
                "enum_known": false,
                "maximum": 8,
                "minimum": 1,
                "name": "n",
                "required": false,
                "type": "integer"
              },
              {
                "availability": "source_interface",
                "conditions": "n өрісі де берілсе, сан сәйкес келуі керек",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "maximum": 8,
                "minimum": 1,
                "name": "count",
                "required": false,
                "type": "integer"
              }
            ],
            "profile_binding": "Exact existing Ailoot model and method; interface constraints below do not assert provider qualification.",
            "unsupported": []
          },
          "hints": [
            "Әдіс құрылымдары мен ID мәндері дәл берілген; жеткізушінің мүмкіндігі сұрауды қабылдаудан бөлек қаралады."
          ],
          "input": {
            "material_types": [
              "text"
            ],
            "optional_controls": null,
            "required": null
          },
          "lifecycle": {
            "assets": [
              {
                "http": "GET",
                "path": "/v1/media/assets"
              },
              {
                "http": "GET",
                "path": "/v1/media/assets/{asset_id}"
              }
            ],
            "content": [
              {
                "http": "GET",
                "path": "/v1/media/assets/{asset_id}/content",
                "url_source": "exact returned signed URL; never construct token"
              }
            ],
            "mode": "synchronous_result_then_owned_library",
            "operation_id_is_not_task_id": true,
            "status": [
              {
                "http": "GET",
                "id_source": "Нақты қайтарылған task_id немесе медиатека жазбасы",
                "path": "/v1/media/tasks/{task_id}"
              }
            ],
            "unknown": "If a music result requires a check, keep the original operation_id/X-Client-Request-ID and returned clip information. Recover existing owned clips through the media library using actual task_id or asset_id values. Do not resubmit the music request or construct a generation polling URL from operation_id."
          },
          "method": {
            "http": "POST",
            "path": "/v1/music/generations"
          },
          "operation_modes": [
            "music"
          ],
          "output": {
            "family": [
              "music"
            ],
            "format": null,
            "multioutputs": "retain every actual response output"
          }
        },
        "ctx": null,
        "examples": [
          {
            "code": "set -eu\n: \"${AILOOT_API_KEY:?Set your Ailoot API key}\"\n: \"${AILOOT_PROMPT_FILE:?Set your actual UTF-8 music brief}\"\nexport AILOOT_PROMPT_FILE\npython3 - <<'PY_REQUEST'\nimport json,os\nfrom pathlib import Path\np=json.loads('{\"model\": \"google/lyria\", \"prompt\": \"\"}')\nf=Path(os.environ[\"AILOOT_PROMPT_FILE\"])\nif not f.is_file():raise SystemExit(\"Choose your actual UTF-8 brief\")\np['prompt']=f.read_text(encoding=\"utf-8\")\nif not p['prompt'].strip():raise SystemExit(\"Brief must contain text\")\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/music/generations \\\n  -H \"Authorization: Bearer $AILOOT_API_KEY\" -H 'Content-Type: application/json' \\\n  --data-binary @request.json -D response-headers.txt -o result.json\nexport AILOOT_API_KEY\npython3 - <<'PY_RESULT'\nimport json, os, subprocess\nfrom pathlib import Path\nfrom urllib.parse import urljoin, urlparse\nresult=json.loads(Path(\"result.json\").read_text(encoding=\"utf-8\"))\nprint(json.dumps(result,ensure_ascii=False,indent=2))\nfor number,clip in enumerate(result.get(\"data\") or []):\n    u=urlparse(urljoin(\"https://api.ailoot.ai\",clip[\"url\"]))\n    if u.scheme!=\"https\" or not u.hostname or u.username or u.password:\n        raise SystemExit(\"Result URL must be HTTPS without embedded credentials\")\n    owned=u.netloc==\"api.ailoot.ai\" and u.path.startswith(\"/v1/media/assets/\") and u.path.endswith(\"/content\")\n    args=[\"curl\",\"--fail-with-body\",\"--silent\",\"--show-error\",u.geturl()]\n    if owned: args += [\"-H\",\"Authorization: Bearer \"+os.environ[\"AILOOT_API_KEY\"]]\n    raw=subprocess.check_output(args)\n    ext=\"wav\" if raw.startswith(b\"RIFF\") and raw[8:12]==b\"WAVE\" else \"flac\" if raw.startswith(b\"fLaC\") else \"ogg\" if raw.startswith(b\"OggS\") else \"mp3\" if raw.startswith(b\"ID3\") or raw[:1]==b\"\\xff\" else \"bin\"\n    f=Path(\"music-\"+str(number)+\".\"+ext);f.write_bytes(raw)\n    print(\"Saved\",f,clip.get(\"asset_id\"))\n\nPY_RESULT\n",
            "label": "Compose from your actual music brief",
            "language": "bash"
          }
        ],
        "family": "openai",
        "fast_multiplier": null,
        "flex_multiplier": null,
        "fmt": "music",
        "http": "POST",
        "img_in": null,
        "img_out": null,
        "in": null,
        "input": [
          "text"
        ],
        "label": "Музыка",
        "max_out": null,
        "max_tool_calls": null,
        "out": null,
        "output": [
          "music"
        ],
        "path": "/v1/music/generations",
        "pricing_profiles": [
          {
            "dimensions": {},
            "label": "Core",
            "units": [
              {
                "amount": 0.08,
                "amount_unit": "usd_per_display_unit",
                "key": "music_output_clip",
                "label": "per clip",
                "side": "out"
              },
              {
                "amount": 0.08,
                "amount_unit": "usd_per_display_unit",
                "key": "per_request",
                "label": "per request",
                "side": "out"
              }
            ]
          }
        ],
        "request_model_id": "google/lyria",
        "route_label": "Core",
        "status_reads": [],
        "tiers": [],
        "tool_prices": null,
        "unit": "music_output_clip",
        "units": [
          {
            "key": "music_output_clip",
            "label": "per clip",
            "side": "out",
            "usd": 0.08
          },
          {
            "key": "per_request",
            "label": "per request",
            "side": "out",
            "usd": 0.08
          }
        ]
      }
    ],
    "model_aliases": [
      {
        "canonical_model_id": "google/lyria",
        "request_model_id": "google/lyria",
        "route_label": "Core"
      }
    ],
    "name": "Lyria",
    "price": {
      "in": null,
      "in_label": null,
      "out": 0.08,
      "out_label": "per clip",
      "sort_in": null,
      "sort_out": null,
      "varies": false
    },
    "short": "Lyria — мәтіннен музыка жасауға арналған атаулы профиль. Бейне, презентация немесе шығармашылық жобаға музыкалық тапсырма дайындау үшін көңіл күйді, аспаптарды, ырғақты және көзделген көріністі сипаттаңыз."
  },
  "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": "Мәтіннен музыка жасау: бірден сегізге дейін клип сұрау және нәтижені синхронды алу.",
  "source": {
    "audit_sha256": "2e00086bcbfc28e64d0cebe97aa47c17d8d5618963027f8ffb9dc6123d7d25b1",
    "bridge_map_sha256": "1125275768b9636fc8461bc7da5061239a81ddfe508e2557843ca42c58ab0036",
    "raw_model_json_sha256": "17e671774e8a51b90bcc9e6ba8db46096f3c7c94c431adecbe4a180b51b95cdc",
    "renderer_sha256": "def3bb6e69c8ddb72f88ec6540bbe55d0e503790f964d84073ecda781b13bedf"
  },
  "sourceRevision": "5d91950a608c4ff529227222097a1efb9ee2714b175691ca29f147c4f48c552f"
}
