@hanzo/team 0.1.16 → 0.1.17
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/404.html +2 -2
- package/dist/admin/index.html +2 -2
- package/dist/agents/algo/index.html +2 -2
- package/dist/agents/art/index.html +2 -2
- package/dist/agents/biz/index.html +2 -2
- package/dist/agents/cal/index.html +2 -2
- package/dist/agents/core/index.html +2 -2
- package/dist/agents/cyber/index.html +2 -2
- package/dist/agents/data/index.html +2 -2
- package/dist/agents/db/index.html +2 -2
- package/dist/agents/des/index.html +2 -2
- package/dist/agents/dev/index.html +2 -2
- package/dist/agents/doc/index.html +2 -2
- package/dist/agents/ed/index.html +2 -2
- package/dist/agents/fin/index.html +2 -2
- package/dist/agents/gov/index.html +2 -2
- package/dist/agents/huma/index.html +2 -2
- package/dist/agents/index.html +2 -2
- package/dist/agents/lang/index.html +2 -2
- package/dist/agents/law/index.html +2 -2
- package/dist/agents/mana/index.html +2 -2
- package/dist/agents/mark/index.html +2 -2
- package/dist/agents/mo/index.html +2 -2
- package/dist/agents/mu/index.html +2 -2
- package/dist/agents/opera/index.html +2 -2
- package/dist/agents/rev/index.html +2 -2
- package/dist/agents/sal/index.html +2 -2
- package/dist/agents/sci/index.html +2 -2
- package/dist/agents/sec/index.html +2 -2
- package/dist/agents/su/index.html +2 -2
- package/dist/agents/vi/index.html +2 -2
- package/dist/apps/ads/index.html +2 -2
- package/dist/apps/ai-chat/index.html +2 -2
- package/dist/apps/analytics/index.html +2 -2
- package/dist/apps/billing/index.html +2 -2
- package/dist/apps/bots/index.html +2 -2
- package/dist/apps/cal/index.html +2 -2
- package/dist/apps/chat/index.html +2 -2
- package/dist/apps/cms/index.html +2 -2
- package/dist/apps/commerce/index.html +2 -2
- package/dist/apps/console/index.html +2 -2
- package/dist/apps/crm/index.html +2 -2
- package/dist/apps/dataroom/index.html +2 -2
- package/dist/apps/dev/index.html +2 -2
- package/dist/apps/email/index.html +2 -2
- package/dist/apps/index.html +2 -2
- package/dist/apps/meet/index.html +2 -2
- package/dist/apps/platform/index.html +2 -2
- package/dist/apps/sign/index.html +2 -2
- package/dist/apps/social/index.html +2 -2
- package/dist/apps/tracker/index.html +2 -2
- package/dist/assets/{Bots-CPIU0Xgd.js → Bots-ide2SG3J.js} +86 -86
- package/dist/assets/Bots-ide2SG3J.js.map +1 -0
- package/dist/assets/ModelPickerMenu-DzpTQicd.js +2 -0
- package/dist/assets/{ModelPickerMenu-Dx9FATCv.js.map → ModelPickerMenu-DzpTQicd.js.map} +1 -1
- package/dist/assets/{ThemeToggleNext-Cb-dedIF.js → ThemeToggleNext-D2dISWgu.js} +2 -2
- package/dist/assets/{ThemeToggleNext-Cb-dedIF.js.map → ThemeToggleNext-D2dISWgu.js.map} +1 -1
- package/dist/assets/index-CWfH_-pI.js +194 -0
- package/dist/assets/{index-BSvxo5-z.js.map → index-CWfH_-pI.js.map} +1 -1
- package/dist/assets/index-CngqRawd.css +1 -0
- package/dist/assets/integrations-DW-vmr60.js.map +1 -1
- package/dist/auth/callback/index.html +2 -2
- package/dist/auth/index.html +2 -2
- package/dist/bots/index.html +2 -2
- package/dist/cal/index.html +2 -2
- package/dist/calendar/index.html +2 -2
- package/dist/chat/c-design/index.html +2 -2
- package/dist/chat/c-general/index.html +2 -2
- package/dist/chat/c-lux-bank/index.html +2 -2
- package/dist/chat/c-lux-bridge/index.html +2 -2
- package/dist/chat/c-revenue/index.html +2 -2
- package/dist/chat/c-support/index.html +2 -2
- package/dist/chat/c-tracker/index.html +2 -2
- package/dist/chat/c-ui/index.html +2 -2
- package/dist/chat/c-video/index.html +2 -2
- package/dist/chat/dm-algo/index.html +2 -2
- package/dist/chat/dm-art/index.html +2 -2
- package/dist/chat/dm-biz/index.html +2 -2
- package/dist/chat/dm-cal/index.html +2 -2
- package/dist/chat/dm-core/index.html +2 -2
- package/dist/chat/dm-cyber/index.html +2 -2
- package/dist/chat/dm-data/index.html +2 -2
- package/dist/chat/dm-db/index.html +2 -2
- package/dist/chat/dm-des/index.html +2 -2
- package/dist/chat/dm-dev/index.html +2 -2
- package/dist/chat/dm-doc/index.html +2 -2
- package/dist/chat/dm-ed/index.html +2 -2
- package/dist/chat/dm-fin/index.html +2 -2
- package/dist/chat/dm-gov/index.html +2 -2
- package/dist/chat/dm-huma/index.html +2 -2
- package/dist/chat/dm-lang/index.html +2 -2
- package/dist/chat/dm-law/index.html +2 -2
- package/dist/chat/dm-mana/index.html +2 -2
- package/dist/chat/dm-mark/index.html +2 -2
- package/dist/chat/dm-mo/index.html +2 -2
- package/dist/chat/dm-mu/index.html +2 -2
- package/dist/chat/dm-opera/index.html +2 -2
- package/dist/chat/dm-rev/index.html +2 -2
- package/dist/chat/dm-sal/index.html +2 -2
- package/dist/chat/dm-sci/index.html +2 -2
- package/dist/chat/dm-sec/index.html +2 -2
- package/dist/chat/dm-su/index.html +2 -2
- package/dist/chat/dm-vi/index.html +2 -2
- package/dist/chat/index.html +2 -2
- package/dist/crm/analytics/index.html +2 -2
- package/dist/crm/automations/index.html +2 -2
- package/dist/crm/campaigns/index.html +2 -2
- package/dist/crm/companies/index.html +2 -2
- package/dist/crm/contacts/index.html +2 -2
- package/dist/crm/customers/index.html +2 -2
- package/dist/crm/deliverability/index.html +2 -2
- package/dist/crm/forms/index.html +2 -2
- package/dist/crm/funds/index.html +2 -2
- package/dist/crm/index.html +2 -2
- package/dist/crm/investors/index.html +2 -2
- package/dist/crm/journeys/index.html +2 -2
- package/dist/crm/leads/index.html +2 -2
- package/dist/crm/lists/index.html +2 -2
- package/dist/crm/opportunities/index.html +2 -2
- package/dist/crm/segments/index.html +2 -2
- package/dist/crm/settings/index.html +2 -2
- package/dist/crm/templates/index.html +2 -2
- package/dist/crm/webhooks/index.html +2 -2
- package/dist/docs/index.html +2 -2
- package/dist/files/index.html +2 -2
- package/dist/inbox/index.html +2 -2
- package/dist/index.html +2 -2
- package/dist/issues/index.html +2 -2
- package/dist/issues/kanban/index.html +2 -2
- package/dist/issues/list/index.html +2 -2
- package/dist/login/index.html +2 -2
- package/dist/mail/index.html +2 -2
- package/dist/meet/index.html +2 -2
- package/dist/mine/index.html +2 -2
- package/dist/people/index.html +2 -2
- package/dist/personas/abai_qunanbaiuly.svg +3 -3
- package/dist/personas/ada.svg +3 -3
- package/dist/personas/adonis.svg +3 -3
- package/dist/personas/aime_cesaire.svg +3 -3
- package/dist/personas/al_biruni.svg +3 -3
- package/dist/personas/al_farabi.svg +3 -3
- package/dist/personas/al_khwarizmi.svg +3 -3
- package/dist/personas/al_kindi.svg +3 -3
- package/dist/personas/alan_watts.svg +3 -3
- package/dist/personas/alexandra_david_neel.svg +3 -3
- package/dist/personas/alisher_navoi.svg +3 -3
- package/dist/personas/amir_khusrau.svg +3 -3
- package/dist/personas/angelou.svg +3 -3
- package/dist/personas/anne_sexton.svg +3 -3
- package/dist/personas/aquinas.svg +3 -3
- package/dist/personas/aryabhata.svg +3 -3
- package/dist/personas/attar.svg +3 -3
- package/dist/personas/augustine.svg +3 -3
- package/dist/personas/averroes.svg +3 -3
- package/dist/personas/avicenna.svg +3 -3
- package/dist/personas/baal_shem_tov.svg +3 -3
- package/dist/personas/baha_ullah.svg +3 -3
- package/dist/personas/basho.svg +3 -3
- package/dist/personas/basil_great.svg +3 -3
- package/dist/personas/bernard_clairvaux.svg +3 -3
- package/dist/personas/bhaskara_ii.svg +3 -3
- package/dist/personas/brahmagupta.svg +3 -3
- package/dist/personas/cao_xueqin.svg +3 -3
- package/dist/personas/cesare_beccaria.svg +3 -3
- package/dist/personas/chikamatsu_monzaemon.svg +3 -3
- package/dist/personas/christiaan_huygens.svg +3 -3
- package/dist/personas/cicero.svg +3 -3
- package/dist/personas/clarice_lispector.svg +3 -3
- package/dist/personas/claudio_monteverdi.svg +3 -3
- package/dist/personas/clement_alexandria.svg +3 -3
- package/dist/personas/coltrane.svg +3 -3
- package/dist/personas/constance_garnett.svg +3 -3
- package/dist/personas/creative.svg +3 -3
- package/dist/personas/cv_raman.svg +3 -3
- package/dist/personas/cynthia_dwork.svg +3 -3
- package/dist/personas/dali.svg +3 -3
- package/dist/personas/david_bowie.svg +3 -3
- package/dist/personas/david_chaum.svg +3 -3
- package/dist/personas/davis.svg +3 -3
- package/dist/personas/desmond_tutu.svg +3 -3
- package/dist/personas/dogen.svg +3 -3
- package/dist/personas/donald_knuth.svg +3 -3
- package/dist/personas/du_fu.svg +3 -3
- package/dist/personas/edgar_codd.svg +3 -3
- package/dist/personas/eileen_chang.svg +3 -3
- package/dist/personas/emilie_du_chatelet.svg +3 -3
- package/dist/personas/emmeline_pankhurst.svg +3 -3
- package/dist/personas/forugh_farrokhzad.svg +3 -3
- package/dist/personas/france_preseren.svg +3 -3
- package/dist/personas/frances_perkins.svg +3 -3
- package/dist/personas/franz_schubert.svg +3 -3
- package/dist/personas/gabriel_garcia_marquez.svg +3 -3
- package/dist/personas/gabriela_mistral.svg +3 -3
- package/dist/personas/galois.svg +3 -3
- package/dist/personas/gandhi.svg +3 -3
- package/dist/personas/gao_xingjian.svg +3 -3
- package/dist/personas/geoffrey_hinton.svg +2 -2
- package/dist/personas/george_eliot.svg +3 -3
- package/dist/personas/george_martin.svg +3 -3
- package/dist/personas/georges_lemaitre.svg +3 -3
- package/dist/personas/giambattista_vico.svg +3 -3
- package/dist/personas/godel.svg +3 -3
- package/dist/personas/goethe.svg +3 -3
- package/dist/personas/gregory_nazianzus.svg +3 -3
- package/dist/personas/gregory_palamas.svg +3 -3
- package/dist/personas/grothendieck.svg +3 -3
- package/dist/personas/guru_nanak.svg +3 -3
- package/dist/personas/hafez.svg +3 -3
- package/dist/personas/hickey.svg +2 -2
- package/dist/personas/hildegard_bingen.svg +3 -3
- package/dist/personas/hua_luogeng.svg +3 -3
- package/dist/personas/hubert_dreyfus.svg +3 -3
- package/dist/personas/hugo.svg +3 -3
- package/dist/personas/ibn_al_haytham.svg +3 -3
- package/dist/personas/ibn_arabi.svg +3 -3
- package/dist/personas/jack_ma.svg +3 -3
- package/dist/personas/jamsetji_tata.svg +3 -3
- package/dist/personas/janis_joplin.svg +3 -3
- package/dist/personas/jcr_licklider.svg +3 -3
- package/dist/personas/jerome.svg +3 -3
- package/dist/personas/jimi_hendrix.svg +3 -3
- package/dist/personas/john_cage.svg +3 -3
- package/dist/personas/john_maynard_keynes.svg +3 -3
- package/dist/personas/john_wanamaker.svg +3 -3
- package/dist/personas/joseph_weizenbaum.svg +3 -3
- package/dist/personas/junichiro_tanizaki.svg +3 -3
- package/dist/personas/kalidasa.svg +3 -3
- package/dist/personas/kamo_no_chomei.svg +3 -3
- package/dist/personas/kaoru_ishikawa.svg +3 -3
- package/dist/personas/karen_sparck_jones.svg +3 -3
- package/dist/personas/katsushika_hokusai.svg +3 -3
- package/dist/personas/khalil_gibran.svg +3 -3
- package/dist/personas/kovalevskaya.svg +3 -3
- package/dist/personas/kunihiko_fukushima.svg +3 -3
- package/dist/personas/kwasi_wiredu.svg +3 -3
- package/dist/personas/leibniz.svg +3 -3
- package/dist/personas/leo_burnett.svg +3 -3
- package/dist/personas/li_qingzhao.svg +3 -3
- package/dist/personas/liu_hui.svg +3 -3
- package/dist/personas/lu_xun.svg +3 -3
- package/dist/personas/lucretius.svg +3 -3
- package/dist/personas/madhava.svg +3 -3
- package/dist/personas/madonna.svg +3 -3
- package/dist/personas/mahmoud_darwish.svg +3 -3
- package/dist/personas/maimonides.svg +3 -3
- package/dist/personas/mandela.svg +3 -3
- package/dist/personas/mandela_contextual.svg +3 -3
- package/dist/personas/mariama_ba.svg +3 -3
- package/dist/personas/marina_tsvetaeva.svg +3 -3
- package/dist/personas/mary_parker_follett.svg +3 -3
- package/dist/personas/mary_shelley.svg +3 -3
- package/dist/personas/massimo_vignelli.svg +2 -2
- package/dist/personas/meister_eckhart.svg +3 -3
- package/dist/personas/miguel_angel_asturias.svg +3 -3
- package/dist/personas/mircea_eliade.svg +3 -3
- package/dist/personas/mirza_ghalib.svg +3 -3
- package/dist/personas/morrison.svg +3 -3
- package/dist/personas/muhammad_ali.svg +3 -3
- package/dist/personas/murasaki_shikibu.svg +3 -3
- package/dist/personas/nagarjuna.svg +3 -3
- package/dist/personas/nazim_hikmet.svg +3 -3
- package/dist/personas/nguyen_du.svg +3 -3
- package/dist/personas/nina_simone.svg +3 -3
- package/dist/personas/nishida_kitaro.svg +3 -3
- package/dist/personas/nizami.svg +3 -3
- package/dist/personas/norbert_wiener.svg +3 -3
- package/dist/personas/paglia.svg +2 -2
- package/dist/personas/pascal.svg +3 -3
- package/dist/personas/plato.svg +3 -3
- package/dist/personas/plotinus.svg +3 -3
- package/dist/personas/plutarch.svg +3 -3
- package/dist/personas/pramoedya_ananta_toer.svg +3 -3
- package/dist/personas/premchand.svg +3 -3
- package/dist/personas/prince.svg +3 -3
- package/dist/personas/pseudo_dionysius.svg +3 -3
- package/dist/personas/ptolemy.svg +3 -3
- package/dist/personas/pythagoras.svg +3 -3
- package/dist/personas/qu_yuan.svg +3 -3
- package/dist/personas/queen_liliuokalani.svg +3 -3
- package/dist/personas/rabia_al_adawiyya.svg +3 -3
- package/dist/personas/radia_perlman.svg +3 -3
- package/dist/personas/ralph_ellison.svg +3 -3
- package/dist/personas/ralph_merkle.svg +3 -3
- package/dist/personas/ramanujan.svg +3 -3
- package/dist/personas/ravi_shankar.svg +3 -3
- package/dist/personas/richard_victor.svg +3 -3
- package/dist/personas/robert_boyle.svg +3 -3
- package/dist/personas/romulo_gallegos.svg +3 -3
- package/dist/personas/ruben_dario.svg +3 -3
- package/dist/personas/rumi.svg +3 -3
- package/dist/personas/rumi_contextual.svg +3 -3
- package/dist/personas/saadi.svg +3 -3
- package/dist/personas/samuel_johnson.svg +3 -3
- package/dist/personas/sei_shonagon.svg +3 -3
- package/dist/personas/seki_takakazu.svg +3 -3
- package/dist/personas/sergey_brin.svg +3 -3
- package/dist/personas/sesshu_toyo.svg +3 -3
- package/dist/personas/shafi_goldwasser.svg +3 -3
- package/dist/personas/shen_congwen.svg +3 -3
- package/dist/personas/shen_kuo.svg +3 -3
- package/dist/personas/shitao.svg +3 -3
- package/dist/personas/sima_guang.svg +3 -3
- package/dist/personas/sima_qian.svg +3 -3
- package/dist/personas/sor_juana_ines_de_la_cruz.svg +3 -3
- package/dist/personas/stanley_marcus.svg +3 -3
- package/dist/personas/taher_elgamal.svg +3 -3
- package/dist/personas/tatsumi_hijikata.svg +3 -3
- package/dist/personas/tesla.svg +3 -3
- package/dist/personas/thelonious_monk.svg +3 -3
- package/dist/personas/thurgood_marshall.svg +3 -3
- package/dist/personas/tim_burton.svg +3 -3
- package/dist/personas/toru_takemitsu.svg +3 -3
- package/dist/personas/tpope.svg +3 -3
- package/dist/personas/trevor_noah.svg +3 -3
- package/dist/personas/tsongkhapa.svg +3 -3
- package/dist/personas/u_thant.svg +3 -3
- package/dist/personas/verghese_kurien.svg +3 -3
- package/dist/personas/vs_naipaul.svg +3 -3
- package/dist/personas/wang_anshi.svg +3 -3
- package/dist/personas/wang_wei.svg +3 -3
- package/dist/personas/wang_yangming.svg +3 -3
- package/dist/personas/whitfield_diffie.svg +3 -3
- package/dist/personas/william_harvey.svg +3 -3
- package/dist/personas/xunzi.svg +3 -3
- package/dist/personas/yasunari_kawabata.svg +3 -3
- package/dist/personas/yogananda.svg +3 -3
- package/dist/personas/yukio_mishima.svg +3 -3
- package/dist/personas/zeami_motokiyo.svg +3 -3
- package/dist/personas/zeekay.svg +2 -2
- package/dist/personas/zhu_xi.svg +3 -3
- package/dist/personas/zora_neale_hurston.svg +3 -3
- package/dist/projects/index.html +2 -2
- package/dist/projects/proj-crm/components/index.html +2 -2
- package/dist/projects/proj-crm/index.html +2 -2
- package/dist/projects/proj-crm/issues/index.html +2 -2
- package/dist/projects/proj-crm/issues/kanban/index.html +2 -2
- package/dist/projects/proj-crm/issues/list/index.html +2 -2
- package/dist/projects/proj-crm/milestones/index.html +2 -2
- package/dist/projects/proj-crm/templates/index.html +2 -2
- package/dist/projects/proj-dev/components/index.html +2 -2
- package/dist/projects/proj-dev/index.html +2 -2
- package/dist/projects/proj-dev/issues/index.html +2 -2
- package/dist/projects/proj-dev/issues/kanban/index.html +2 -2
- package/dist/projects/proj-dev/issues/list/index.html +2 -2
- package/dist/projects/proj-dev/milestones/index.html +2 -2
- package/dist/projects/proj-dev/templates/index.html +2 -2
- package/dist/projects/proj-mkt/components/index.html +2 -2
- package/dist/projects/proj-mkt/index.html +2 -2
- package/dist/projects/proj-mkt/issues/index.html +2 -2
- package/dist/projects/proj-mkt/issues/kanban/index.html +2 -2
- package/dist/projects/proj-mkt/issues/list/index.html +2 -2
- package/dist/projects/proj-mkt/milestones/index.html +2 -2
- package/dist/projects/proj-mkt/templates/index.html +2 -2
- package/dist/projects/proj-next/components/index.html +2 -2
- package/dist/projects/proj-next/index.html +2 -2
- package/dist/projects/proj-next/issues/index.html +2 -2
- package/dist/projects/proj-next/issues/kanban/index.html +2 -2
- package/dist/projects/proj-next/issues/list/index.html +2 -2
- package/dist/projects/proj-next/milestones/index.html +2 -2
- package/dist/projects/proj-next/templates/index.html +2 -2
- package/dist/settings/index.html +2 -2
- package/dist/time/index.html +2 -2
- package/package.json +2 -2
- package/dist/assets/Bots-CPIU0Xgd.js.map +0 -1
- package/dist/assets/ModelPickerMenu-Dx9FATCv.js +0 -2
- package/dist/assets/index-BSvxo5-z.js +0 -203
- package/dist/assets/index-DUEuN8sV.css +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"integrations-DW-vmr60.js","names":[],"sources":["../../node_modules/.pnpm/@hanzo+app@0.3.74_4847375212aab65dad4dcc237c4f97e6/node_modules/@hanzo/app/dist/lib/integrations.js"],"sourcesContent":["export const INTEGRATIONS = [\n {\n slug: 'openai-sdk',\n name: 'OpenAI Python SDK',\n description: `Use the official OpenAI Python SDK with Hanzo AI by pointing it to our OpenAI-compatible API endpoint. Access every model Hanzo serves with your existing OpenAI code — no refactor needed.`,\n category: 'sdk',\n icon: '🐍',\n upstream: 'https://github.com/openai/openai-python',\n creator: 'OpenAI',\n creatorUrl: 'https://openai.com',\n license: 'MIT',\n examples: [\n {\n lang: 'python',\n label: 'Install & configure',\n code: `pip install openai\n\nfrom openai import OpenAI\n\nclient = OpenAI(\n api_key=\"your-hanzo-api-key\",\n base_url=\"https://api.hanzo.ai/v1\",\n)\n\nresponse = client.chat.completions.create(\n model=\"zen4-pro\",\n messages=[{\"role\": \"user\", \"content\": \"Hello!\"}],\n)\nprint(response.choices[0].message.content)`,\n },\n {\n lang: 'python',\n label: 'Streaming',\n code: `stream = client.chat.completions.create(\n model=\"openai/gpt-4.1\",\n messages=[{\"role\": \"user\", \"content\": \"Write a haiku\"}],\n stream=True,\n)\nfor chunk in stream:\n print(chunk.choices[0].delta.content or \"\", end=\"\")`,\n },\n {\n lang: 'python',\n label: 'Vision model',\n code: `response = client.chat.completions.create(\n model=\"google/gemini-2.0-flash\",\n messages=[{\n \"role\": \"user\",\n \"content\": [\n {\"type\": \"text\", \"text\": \"What is in this image?\"},\n {\"type\": \"image_url\", \"image_url\": {\"url\": \"https://example.com/img.png\"}},\n ],\n }],\n)`,\n },\n {\n lang: 'bash',\n label: 'Environment variable',\n code: `export HANZO_API_KEY=\"your-hanzo-api-key\"\nexport OPENAI_API_KEY=\"$HANZO_API_KEY\"\nexport OPENAI_BASE_URL=\"https://api.hanzo.ai/v1\"`,\n },\n ],\n },\n {\n slug: 'anthropic-sdk',\n name: 'Anthropic SDK',\n description: 'Use the Anthropic Python or TypeScript SDK with Hanzo AI to access Claude models alongside 50+ other models through a single API key and billing account.',\n category: 'sdk',\n icon: '🤖',\n upstream: 'https://github.com/anthropics/anthropic-sdk-python',\n creator: 'Anthropic',\n creatorUrl: 'https://anthropic.com',\n license: 'MIT',\n examples: [\n {\n lang: 'python',\n label: 'Python setup',\n code: `pip install anthropic\n\nimport anthropic\n\nclient = anthropic.Anthropic(\n api_key=\"your-hanzo-api-key\",\n base_url=\"https://api.hanzo.ai/v1\",\n)\n\nmessage = client.messages.create(\n model=\"anthropic/claude-sonnet-4-6\",\n max_tokens=1024,\n messages=[{\"role\": \"user\", \"content\": \"Hello, Claude!\"}],\n)\nprint(message.content[0].text)`,\n },\n {\n lang: 'typescript',\n label: 'TypeScript setup',\n code: `import Anthropic from \"@anthropic-ai/sdk\";\n\nconst client = new Anthropic({\n apiKey: process.env.HANZO_API_KEY,\n baseURL: \"https://api.hanzo.ai/v1\",\n});\n\nconst message = await client.messages.create({\n model: \"anthropic/claude-sonnet-4-6\",\n max_tokens: 1024,\n messages: [{ role: \"user\", content: \"Hello!\" }],\n});`,\n },\n {\n lang: 'python',\n label: 'Streaming',\n code: `with client.messages.stream(\n model=\"glm-5.2\",\n max_tokens=1024,\n messages=[{\"role\": \"user\", \"content\": \"Tell me a story\"}],\n) as stream:\n for text in stream.text_stream:\n print(text, end=\"\", flush=True)`,\n },\n {\n lang: 'bash',\n label: 'cURL test',\n code: `curl https://api.hanzo.ai/v1/messages \\\\\n -H \"x-api-key: $HANZO_API_KEY\" \\\\\n -H \"anthropic-version: 2023-06-01\" \\\\\n -H \"content-type: application/json\" \\\\\n -d '{\"model\":\"anthropic/claude-sonnet-4-6\",\"max_tokens\":100,\"messages\":[{\"role\":\"user\",\"content\":\"Hi\"}]}'`,\n },\n ],\n },\n {\n slug: 'langchain',\n name: 'LangChain',\n description: `Integrate LangChain with Hanzo AI to build chains, agents, and RAG pipelines using any model Hanzo serves. Hanzo is OpenAI-compatible so ChatOpenAI just works.`,\n category: 'framework',\n icon: '⛓️',\n upstream: 'https://github.com/langchain-ai/langchain',\n creator: 'LangChain AI',\n creatorUrl: 'https://langchain.com',\n license: 'MIT',\n examples: [\n {\n lang: 'python',\n label: 'LangChain Python',\n code: `pip install langchain langchain-openai\n\nfrom langchain_openai import ChatOpenAI\n\nllm = ChatOpenAI(\n model=\"zen4-pro\",\n openai_api_key=\"your-hanzo-api-key\",\n openai_api_base=\"https://api.hanzo.ai/v1\",\n)\n\nresponse = llm.invoke(\"What is the capital of France?\")\nprint(response.content)`,\n },\n {\n lang: 'python',\n label: 'Chain with prompt',\n code: `from langchain_core.prompts import ChatPromptTemplate\nfrom langchain_openai import ChatOpenAI\n\nprompt = ChatPromptTemplate.from_template(\"Summarize: {text}\")\nllm = ChatOpenAI(\n model=\"openai/gpt-4.1-mini\",\n openai_api_key=\"your-hanzo-api-key\",\n openai_api_base=\"https://api.hanzo.ai/v1\",\n)\nchain = prompt | llm\nresult = chain.invoke({\"text\": \"LangChain is a framework...\"})`,\n },\n {\n lang: 'typescript',\n label: 'LangChain TypeScript',\n code: `import { ChatOpenAI } from \"@langchain/openai\";\n\nconst model = new ChatOpenAI({\n modelName: \"zen4-pro\",\n openAIApiKey: process.env.HANZO_API_KEY,\n configuration: {\n baseURL: \"https://api.hanzo.ai/v1\",\n },\n});\n\nconst response = await model.invoke(\"Hello!\");`,\n },\n {\n lang: 'python',\n label: 'RAG with Hanzo',\n code: `from langchain_openai import ChatOpenAI, OpenAIEmbeddings\n\nembeddings = OpenAIEmbeddings(\n openai_api_key=\"your-hanzo-api-key\",\n openai_api_base=\"https://api.hanzo.ai/v1\",\n model=\"openai/text-embedding-3-large\",\n)\n\nllm = ChatOpenAI(\n model=\"zen4-pro\",\n openai_api_key=\"your-hanzo-api-key\",\n openai_api_base=\"https://api.hanzo.ai/v1\",\n)`,\n },\n ],\n },\n {\n slug: 'llamaindex',\n name: 'LlamaIndex',\n description: 'Use LlamaIndex with Hanzo AI to build powerful RAG applications, data agents, and query pipelines. Drop in Hanzo as your LLM provider with zero friction.',\n category: 'framework',\n icon: '🦙',\n upstream: 'https://github.com/run-llama/llama_index',\n creator: 'LlamaIndex',\n creatorUrl: 'https://llamaindex.ai',\n license: 'MIT',\n examples: [\n {\n lang: 'python',\n label: 'Basic setup',\n code: `pip install llama-index llama-index-llms-openai\n\nfrom llama_index.llms.openai import OpenAI\nfrom llama_index.core import Settings\n\nSettings.llm = OpenAI(\n model=\"zen4-pro\",\n api_key=\"your-hanzo-api-key\",\n api_base=\"https://api.hanzo.ai/v1\",\n)`,\n },\n {\n lang: 'python',\n label: 'RAG pipeline',\n code: `from llama_index.core import VectorStoreIndex, SimpleDirectoryReader\nfrom llama_index.llms.openai import OpenAI\nfrom llama_index.embeddings.openai import OpenAIEmbedding\n\nSettings.llm = OpenAI(\n model=\"zen4-pro\",\n api_key=\"your-hanzo-api-key\",\n api_base=\"https://api.hanzo.ai/v1\",\n)\nSettings.embed_model = OpenAIEmbedding(\n api_key=\"your-hanzo-api-key\",\n api_base=\"https://api.hanzo.ai/v1\",\n)\n\ndocuments = SimpleDirectoryReader(\"./data\").load_data()\nindex = VectorStoreIndex.from_documents(documents)\nquery_engine = index.as_query_engine()\nresponse = query_engine.query(\"What is in these docs?\")`,\n },\n {\n lang: 'python',\n label: 'Chat engine',\n code: `chat_engine = index.as_chat_engine(\n chat_mode=\"condense_plus_context\",\n verbose=True,\n)\nresponse = chat_engine.chat(\"Tell me more about this topic\")`,\n },\n {\n lang: 'python',\n label: 'Streaming query',\n code: `streaming_response = query_engine.query(\n \"Summarize the key points\",\n streaming=True,\n)\nstreaming_response.print_response_stream()`,\n },\n ],\n },\n {\n slug: 'vercel-ai-sdk',\n name: 'Vercel AI SDK',\n description: 'Use the Vercel AI SDK with Hanzo AI to build streaming AI UIs, chatbots, and generative interfaces in Next.js, React, and other frameworks.',\n category: 'framework',\n icon: '▲',\n upstream: 'https://github.com/vercel/ai',\n creator: 'Vercel',\n creatorUrl: 'https://vercel.com',\n license: 'Apache-2.0',\n examples: [\n {\n lang: 'typescript',\n label: 'Setup provider',\n code: `npm install ai @ai-sdk/openai\n\nimport { createOpenAI } from \"@ai-sdk/openai\";\n\nconst hanzo = createOpenAI({\n baseURL: \"https://api.hanzo.ai/v1\",\n apiKey: process.env.HANZO_API_KEY,\n});`,\n },\n {\n lang: 'typescript',\n label: 'generateText',\n code: `import { generateText } from \"ai\";\nimport { createOpenAI } from \"@ai-sdk/openai\";\n\nconst hanzo = createOpenAI({\n baseURL: \"https://api.hanzo.ai/v1\",\n apiKey: process.env.HANZO_API_KEY,\n});\n\nconst { text } = await generateText({\n model: hanzo(\"zen4-pro\"),\n prompt: \"Write a poem about AI\",\n});`,\n },\n {\n lang: 'typescript',\n label: 'Streaming route handler',\n code: `// app/v1/chat/route.ts\nimport { streamText } from \"ai\";\nimport { createOpenAI } from \"@ai-sdk/openai\";\n\nconst hanzo = createOpenAI({\n baseURL: \"https://api.hanzo.ai/v1\",\n apiKey: process.env.HANZO_API_KEY,\n});\n\nexport async function POST(req: Request) {\n const { messages } = await req.json();\n const result = streamText({\n model: hanzo(\"zen4-pro\"),\n messages,\n });\n return result.toDataStreamResponse();\n}`,\n },\n {\n lang: 'typescript',\n label: 'useChat hook',\n code: `\"use client\";\nimport { useChat } from \"ai/react\";\n\nexport default function Chat() {\n const { messages, input, handleSubmit, handleInputChange } = useChat({\n api: \"/v1/chat\",\n });\n return (\n <form onSubmit={handleSubmit}>\n <input value={input} onChange={handleInputChange} />\n <button type=\"submit\">Send</button>\n {messages.map((m) => <p key={m.id}>{m.content}</p>)}\n </form>\n );\n}`,\n },\n ],\n },\n {\n slug: 'huggingface',\n name: 'Hugging Face',\n description: 'Access Hugging Face models and use the HF Inference API through the Hanzo AI API. Also use Hanzo AI models with HuggingFace Hub tooling.',\n category: 'sdk',\n icon: '🤗',\n upstream: 'https://github.com/huggingface/transformers',\n creator: 'Hugging Face',\n creatorUrl: 'https://huggingface.co',\n license: 'Apache-2.0',\n examples: [\n {\n lang: 'python',\n label: 'InferenceClient via Hanzo',\n code: `pip install huggingface_hub\n\nfrom huggingface_hub import InferenceClient\n\nclient = InferenceClient(\n base_url=\"https://api.hanzo.ai/v1\",\n api_key=\"your-hanzo-api-key\",\n)\n\noutput = client.chat.completions.create(\n model=\"meta-llama/llama-4-scout\",\n messages=[{\"role\": \"user\", \"content\": \"Hello!\"}],\n)`,\n },\n {\n lang: 'python',\n label: 'hf CLI with Hanzo endpoint',\n code: `# Use hf for model downloads, Hanzo for inference\nhf download meta-llama/Llama-4-Scout-17B-16E-Instruct\n\n# Then serve via Hanzo API\nfrom openai import OpenAI\nclient = OpenAI(\n base_url=\"https://api.hanzo.ai/v1\",\n api_key=\"your-hanzo-api-key\",\n)`,\n },\n {\n lang: 'typescript',\n label: 'JS InferenceClient',\n code: `import { InferenceClient } from \"@huggingface/inference\";\n\nconst client = new InferenceClient(\"your-hanzo-api-key\");\n\nconst chatCompletion = await client.chatCompletion({\n model: \"meta-llama/llama-4-scout\",\n messages: [{ role: \"user\", content: \"Hello!\" }],\n provider: \"hanzo\",\n endpointUrl: \"https://api.hanzo.ai/v1\",\n});`,\n },\n {\n lang: 'bash',\n label: 'cURL inference',\n code: `curl https://api.hanzo.ai/v1/chat/completions \\\\\n -H \"Authorization: Bearer $HANZO_API_KEY\" \\\\\n -H \"Content-Type: application/json\" \\\\\n -d '{\"model\":\"meta-llama/llama-4-maverick\",\"messages\":[{\"role\":\"user\",\"content\":\"Hi\"}]}'`,\n },\n ],\n },\n {\n slug: 'autogen',\n name: 'AutoGen',\n description: 'Build multi-agent systems with Microsoft AutoGen. Set base_url to api.hanzo.ai/v1 in the AutoGen config, name a Hanzo model, and the agents run on it.',\n category: 'framework',\n icon: '🤝',\n upstream: 'https://github.com/microsoft/autogen',\n creator: 'Microsoft Research',\n creatorUrl: 'https://microsoft.com/en-us/research',\n license: 'MIT',\n examples: [\n {\n lang: 'python',\n label: 'AutoGen setup',\n code: `pip install pyautogen\n\nimport autogen\n\nconfig_list = [{\n \"model\": \"zen4-pro\",\n \"api_key\": \"your-hanzo-api-key\",\n \"base_url\": \"https://api.hanzo.ai/v1\",\n}]\n\nassistant = autogen.AssistantAgent(\n name=\"assistant\",\n llm_config={\"config_list\": config_list},\n)\n\nuser_proxy = autogen.UserProxyAgent(\n name=\"user_proxy\",\n human_input_mode=\"NEVER\",\n)\n\nuser_proxy.initiate_chat(assistant, message=\"Write a Python script to sort a list.\")`,\n },\n {\n lang: 'python',\n label: 'Multi-agent conversation',\n code: `coder = autogen.AssistantAgent(\n name=\"coder\",\n llm_config={\"config_list\": config_list},\n system_message=\"You write clean Python code.\",\n)\n\nreviewer = autogen.AssistantAgent(\n name=\"reviewer\",\n llm_config={\"config_list\": config_list},\n system_message=\"You review code for bugs.\",\n)\n\ngroupchat = autogen.GroupChat(agents=[user_proxy, coder, reviewer], messages=[])\nmanager = autogen.GroupChatManager(groupchat=groupchat, llm_config={\"config_list\": config_list})`,\n },\n {\n lang: 'python',\n label: 'Code execution agent',\n code: `user_proxy = autogen.UserProxyAgent(\n name=\"user_proxy\",\n human_input_mode=\"NEVER\",\n code_execution_config={\"work_dir\": \"coding\", \"use_docker\": False},\n)`,\n },\n {\n lang: 'bash',\n label: 'Environment setup',\n code: `export HANZO_API_KEY=\"your-hanzo-api-key\"\n# AutoGen picks up OAI_CONFIG_LIST or inline config\n# No extra env vars needed — just point base_url to Hanzo`,\n },\n ],\n },\n {\n slug: 'crewai',\n name: 'CrewAI',\n description: 'Use CrewAI to build collaborative AI agent teams powered by Hanzo AI models. CrewAI\\'s role-based agents work with any OpenAI-compatible provider.',\n category: 'framework',\n icon: '🚢',\n upstream: 'https://github.com/crewAIInc/crewAI',\n creator: 'CrewAI / João Moura',\n creatorUrl: 'https://crewai.com',\n license: 'MIT',\n examples: [\n {\n lang: 'python',\n label: 'CrewAI with Hanzo',\n code: `pip install crewai\n\nimport os\nos.environ[\"OPENAI_API_KEY\"] = \"your-hanzo-api-key\"\nos.environ[\"OPENAI_API_BASE\"] = \"https://api.hanzo.ai/v1\"\nos.environ[\"OPENAI_MODEL_NAME\"] = \"zen4-pro\"\n\nfrom crewai import Agent, Task, Crew\n\nresearcher = Agent(\n role=\"Researcher\",\n goal=\"Find accurate information on AI trends\",\n backstory=\"Expert AI researcher with deep knowledge\",\n)\n\nwriter = Agent(\n role=\"Writer\",\n goal=\"Write compelling summaries\",\n backstory=\"Technical writer specializing in AI\",\n)`,\n },\n {\n lang: 'python',\n label: 'Tasks and Crew',\n code: `task1 = Task(\n description=\"Research the latest LLM benchmarks\",\n expected_output=\"A list of top 5 models and their scores\",\n agent=researcher,\n)\n\ntask2 = Task(\n description=\"Write a blog post based on the research\",\n expected_output=\"500-word blog post in markdown\",\n agent=writer,\n)\n\ncrew = Crew(agents=[researcher, writer], tasks=[task1, task2])\nresult = crew.kickoff()`,\n },\n {\n lang: 'python',\n label: 'Custom LLM config',\n code: `from crewai import LLM\n\nhanzo_llm = LLM(\n model=\"zen4-pro\",\n api_key=\"your-hanzo-api-key\",\n base_url=\"https://api.hanzo.ai/v1\",\n)\n\nagent = Agent(\n role=\"Analyst\",\n goal=\"Analyze data\",\n backstory=\"Data analyst\",\n llm=hanzo_llm,\n)`,\n },\n {\n lang: 'bash',\n label: 'Quick start',\n code: `pip install crewai\nexport OPENAI_API_KEY=\"your-hanzo-api-key\"\nexport OPENAI_BASE_URL=\"https://api.hanzo.ai/v1\"\ncrewai create my-crew`,\n },\n ],\n },\n {\n slug: 'dspy',\n name: 'DSPy',\n description: 'Use DSPy to program (not prompt) Hanzo AI models. DSPy\\'s systematic approach to LM prompting works with any OpenAI-compatible provider.',\n category: 'framework',\n icon: '🔬',\n upstream: 'https://github.com/stanfordnlp/dspy',\n creator: 'Stanford NLP / Omar Khattab',\n creatorUrl: 'https://dspy.ai',\n license: 'MIT',\n examples: [\n {\n lang: 'python',\n label: 'DSPy + Hanzo setup',\n code: `pip install dspy\n\nimport dspy\n\nlm = dspy.LM(\n model=\"openai/zen4-pro\",\n api_key=\"your-hanzo-api-key\",\n api_base=\"https://api.hanzo.ai/v1\",\n)\ndspy.configure(lm=lm)`,\n },\n {\n lang: 'python',\n label: 'Signature and module',\n code: `class QA(dspy.Signature):\n \"\"\"Answer questions with short factual answers.\"\"\"\n question: str = dspy.InputField()\n answer: str = dspy.OutputField(desc=\"often 1-3 sentences\")\n\nqa = dspy.Predict(QA)\nresponse = qa(question=\"What is the Hanzo AI cloud?\")\nprint(response.answer)`,\n },\n {\n lang: 'python',\n label: 'Chain of thought',\n code: `class CoTQA(dspy.Signature):\n \"\"\"Answer with step-by-step reasoning.\"\"\"\n question: str = dspy.InputField()\n reasoning: str = dspy.OutputField(desc=\"think step by step\")\n answer: str = dspy.OutputField()\n\ncot = dspy.ChainOfThought(CoTQA)\nresult = cot(question=\"Why is AI important for developers?\")`,\n },\n {\n lang: 'python',\n label: 'Optimization with MIPROv2',\n code: `from dspy.teleprompt import MIPROv2\n\nteleprompter = MIPROv2(metric=my_metric, auto=\"medium\")\noptimized = teleprompter.compile(program, trainset=train_data)`,\n },\n ],\n },\n {\n slug: 'haystack',\n name: 'Haystack',\n description: 'Build NLP pipelines and RAG systems with Haystack. Point OpenAIChatGenerator at api.hanzo.ai/v1, name a Hanzo model, and the pipeline runs unchanged.',\n category: 'framework',\n icon: '🌾',\n upstream: 'https://github.com/deepset-ai/haystack',\n creator: 'deepset.ai',\n creatorUrl: 'https://haystack.deepset.ai',\n license: 'Apache-2.0',\n examples: [\n {\n lang: 'python',\n label: 'Haystack + Hanzo',\n code: `pip install haystack-ai\n\nfrom haystack.components.generators.chat import OpenAIChatGenerator\nfrom haystack.dataclasses import ChatMessage\nfrom haystack.utils import Secret\n\ngenerator = OpenAIChatGenerator(\n model=\"zen4-pro\",\n api_key=Secret.from_token(\"your-hanzo-api-key\"),\n api_base_url=\"https://api.hanzo.ai/v1\",\n)\n\nmessages = [ChatMessage.from_user(\"What is RAG?\")]\nresult = generator.run(messages=messages)`,\n },\n {\n lang: 'python',\n label: 'RAG pipeline',\n code: `from haystack import Pipeline\nfrom haystack.components.builders import PromptBuilder\nfrom haystack.components.generators.chat import OpenAIChatGenerator\n\nprompt_template = \"\"\"\nContext: {% for doc in documents %}{{ doc.content }}{% endfor %}\nQuestion: {{ question }}\nAnswer:\n\"\"\"\n\npipeline = Pipeline()\npipeline.add_component(\"prompt\", PromptBuilder(template=prompt_template))\npipeline.add_component(\"llm\", OpenAIChatGenerator(\n model=\"zen4-pro\",\n api_key=Secret.from_token(\"your-hanzo-api-key\"),\n api_base_url=\"https://api.hanzo.ai/v1\",\n))`,\n },\n {\n lang: 'python',\n label: 'Embeddings',\n code: `from haystack.components.embedders import OpenAITextEmbedder\n\nembedder = OpenAITextEmbedder(\n model=\"openai/text-embedding-3-large\",\n api_key=Secret.from_token(\"your-hanzo-api-key\"),\n api_base_url=\"https://api.hanzo.ai/v1\",\n)`,\n },\n {\n lang: 'bash',\n label: 'Install',\n code: `pip install haystack-ai\nexport HANZO_API_KEY=\"your-hanzo-api-key\"`,\n },\n ],\n },\n {\n slug: 'cursor',\n name: 'Cursor',\n description: 'Use Hanzo AI models inside Cursor IDE by adding a custom API provider. Access Zen, GPT-4.1, Claude Sonnet, and 50+ other models directly in your editor.',\n category: 'platform',\n icon: '🖱️',\n upstream: 'https://github.com/getcursor/cursor',\n creator: 'Anysphere',\n creatorUrl: 'https://cursor.com',\n license: 'Proprietary',\n examples: [\n {\n lang: 'json',\n label: 'Cursor settings',\n code: `// Settings > Models > Add custom model\n{\n \"provider\": \"openai-compatible\",\n \"name\": \"Hanzo AI\",\n \"baseUrl\": \"https://api.hanzo.ai/v1\",\n \"apiKey\": \"your-hanzo-api-key\",\n \"models\": [\"zen4-pro\", \"zen4-max\", \"openai/gpt-4.1\", \"anthropic/claude-sonnet-4-6\"]\n}`,\n },\n {\n lang: 'bash',\n label: 'Available models',\n code: `# Query Hanzo models list\ncurl https://api.hanzo.ai/v1/models \\\\\n -H \"Authorization: Bearer $HANZO_API_KEY\" | jq '.data[].id'`,\n },\n {\n lang: 'bash',\n label: 'Test connection',\n code: `curl https://api.hanzo.ai/v1/chat/completions \\\\\n -H \"Authorization: Bearer $HANZO_API_KEY\" \\\\\n -H \"Content-Type: application/json\" \\\\\n -d '{\"model\":\"zen4-pro\",\"messages\":[{\"role\":\"user\",\"content\":\"Hello from Cursor!\"}],\"max_tokens\":50}'`,\n },\n {\n lang: 'bash',\n label: 'Tips',\n code: `# zen4-pro: best for code generation\n# zen4-coder: specialized code model\n# zen4-thinking: step-by-step reasoning\n# openai/gpt-4.1: advanced reasoning\n# All available at api.hanzo.ai/v1`,\n },\n ],\n },\n {\n slug: 'continue-dev',\n name: 'Continue.dev',\n description: 'Configure Continue.dev VS Code / JetBrains extension to use Hanzo AI as your coding assistant. Add Hanzo as a custom OpenAI-compatible provider in your config.',\n category: 'platform',\n icon: '🔄',\n upstream: 'https://github.com/continuedev/continue',\n creator: 'Continue.dev',\n creatorUrl: 'https://continue.dev',\n license: 'Apache-2.0',\n examples: [\n {\n lang: 'json',\n label: '~/.continue/config.json',\n code: `{\n \"models\": [\n {\n \"title\": \"Hanzo zen4-pro\",\n \"provider\": \"openai\",\n \"model\": \"zen4-pro\",\n \"apiKey\": \"your-hanzo-api-key\",\n \"apiBase\": \"https://api.hanzo.ai/v1\"\n },\n {\n \"title\": \"Hanzo zen4-coder\",\n \"provider\": \"openai\",\n \"model\": \"zen4-coder\",\n \"apiKey\": \"your-hanzo-api-key\",\n \"apiBase\": \"https://api.hanzo.ai/v1\"\n }\n ],\n \"tabAutocompleteModel\": {\n \"title\": \"Hanzo Autocomplete\",\n \"provider\": \"openai\",\n \"model\": \"zen4-coder\",\n \"apiKey\": \"your-hanzo-api-key\",\n \"apiBase\": \"https://api.hanzo.ai/v1\"\n }\n}`,\n },\n {\n lang: 'json',\n label: 'Embeddings config',\n code: `{\n \"embeddingsProvider\": {\n \"provider\": \"openai\",\n \"model\": \"openai/text-embedding-3-large\",\n \"apiKey\": \"your-hanzo-api-key\",\n \"apiBase\": \"https://api.hanzo.ai/v1\"\n }\n}`,\n },\n {\n lang: 'bash',\n label: 'Install Continue',\n code: `# VS Code\ncode --install-extension Continue.continue\n\n# JetBrains: install from marketplace\n# Then edit ~/.continue/config.json`,\n },\n {\n lang: 'bash',\n label: 'Test API',\n code: `curl https://api.hanzo.ai/v1/chat/completions \\\\\n -H \"Authorization: Bearer $HANZO_API_KEY\" \\\\\n -d '{\"model\":\"zen4-coder\",\"messages\":[{\"role\":\"user\",\"content\":\"Complete this: def hello():\"}]}'`,\n },\n ],\n },\n {\n slug: 'github-copilot',\n name: 'GitHub Copilot',\n description: 'Extend your GitHub Copilot workflow with Hanzo AI for access to additional models and capabilities via the API. Use Hanzo for tasks Copilot can\\'t handle.',\n category: 'platform',\n icon: '🐙',\n upstream: 'https://github.com/features/copilot',\n creator: 'GitHub / Microsoft',\n creatorUrl: 'https://github.com',\n license: 'Proprietary',\n examples: [\n {\n lang: 'python',\n label: 'Hanzo API alongside Copilot',\n code: `# Use GitHub Copilot in editor, Hanzo API in code\nfrom openai import OpenAI\n\n# Hanzo for programmatic access\nclient = OpenAI(\n base_url=\"https://api.hanzo.ai/v1\",\n api_key=\"your-hanzo-api-key\",\n)\n\n# Access the models Copilot does not offer\nresponse = client.chat.completions.create(\n model=\"zen4-pro\",\n messages=[{\"role\": \"user\", \"content\": \"Review this code...\"}],\n)`,\n },\n {\n lang: 'typescript',\n label: 'GitHub Actions with Hanzo',\n code: `// In CI: use Hanzo AI for code review\nimport OpenAI from \"openai\";\n\nconst client = new OpenAI({\n baseURL: \"https://api.hanzo.ai/v1\",\n apiKey: process.env.HANZO_API_KEY,\n});\n\nconst review = await client.chat.completions.create({\n model: \"zen4-pro\",\n messages: [{\n role: \"user\",\n content: \\`Review this PR diff:\\n\\${diff}\\`,\n }],\n});`,\n },\n {\n lang: 'yaml',\n label: 'GitHub Actions workflow',\n code: `name: AI Code Review\non: [pull_request]\njobs:\n review:\n runs-on: ubuntu-latest\n steps:\n - uses: actions/checkout@v4\n - name: AI Review\n env:\n HANZO_API_KEY: \\${{ secrets.HANZO_API_KEY }}\n run: |\n pip install openai\n python scripts/ai_review.py`,\n },\n {\n lang: 'bash',\n label: 'API key setup',\n code: `# Add to GitHub repo secrets\n# Settings > Secrets > Actions > New secret\n# Name: HANZO_API_KEY\n# Value: your-hanzo-api-key`,\n },\n ],\n },\n {\n slug: 'docker',\n name: 'Docker',\n description: 'Deploy Hanzo AI-powered services in Docker containers. Use the Hanzo API from any containerized application with proper environment configuration.',\n category: 'infra',\n icon: '🐳',\n upstream: 'https://github.com/moby/moby',\n creator: 'Docker / Moby Project',\n creatorUrl: 'https://docker.com',\n license: 'Apache-2.0',\n examples: [\n {\n lang: 'dockerfile',\n label: 'Dockerfile',\n code: `FROM python:3.12-slim\n\nWORKDIR /app\nCOPY requirements.txt .\nRUN pip install -r requirements.txt\n\nCOPY . .\n\nENV HANZO_API_KEY=\"\"\nENV OPENAI_API_BASE=\"https://api.hanzo.ai/v1\"\n\nCMD [\"python\", \"main.py\"]`,\n },\n {\n lang: 'yaml',\n label: 'compose.yml',\n code: `services:\n app:\n build: .\n environment:\n - HANZO_API_KEY=\\${HANZO_API_KEY}\n - OPENAI_API_BASE=https://api.hanzo.ai/v1\n ports:\n - \"8000:8000\"\n restart: unless-stopped`,\n },\n {\n lang: 'bash',\n label: 'Run with env',\n code: `# .env file\nHANZO_API_KEY=your-hanzo-api-key\n\n# Start\ndocker compose up -d\n\n# Or direct run\ndocker run -e HANZO_API_KEY=your-key -p 8000:8000 my-ai-app`,\n },\n {\n lang: 'python',\n label: 'App code',\n code: `import os\nfrom openai import OpenAI\n\nclient = OpenAI(\n base_url=os.environ.get(\"OPENAI_API_BASE\", \"https://api.hanzo.ai/v1\"),\n api_key=os.environ[\"HANZO_API_KEY\"],\n)`,\n },\n ],\n },\n {\n slug: 'kubernetes',\n name: 'Kubernetes',\n description: 'Deploy Hanzo AI-powered workloads on Kubernetes. Securely manage your Hanzo API key as a K8s secret and inject it into pods.',\n category: 'infra',\n icon: '⚓',\n upstream: 'https://github.com/kubernetes/kubernetes',\n creator: 'CNCF / Google',\n creatorUrl: 'https://kubernetes.io',\n license: 'Apache-2.0',\n examples: [\n {\n lang: 'yaml',\n label: 'K8s Secret',\n code: `apiVersion: v1\nkind: Secret\nmetadata:\n name: hanzo-credentials\n namespace: default\ntype: Opaque\nstringData:\n api-key: \"your-hanzo-api-key\"`,\n },\n {\n lang: 'yaml',\n label: 'Deployment manifest',\n code: `apiVersion: apps/v1\nkind: Deployment\nmetadata:\n name: ai-service\nspec:\n replicas: 2\n selector:\n matchLabels:\n app: ai-service\n template:\n spec:\n containers:\n - name: app\n image: my-ai-app:latest\n env:\n - name: HANZO_API_KEY\n valueFrom:\n secretKeyRef:\n name: hanzo-credentials\n key: api-key\n - name: OPENAI_API_BASE\n value: \"https://api.hanzo.ai/v1\"`,\n },\n {\n lang: 'bash',\n label: 'Apply to cluster',\n code: `kubectl create secret generic hanzo-credentials \\\\\n --from-literal=api-key=\"your-hanzo-api-key\"\n\nkubectl apply -f deployment.yaml\nkubectl get pods -l app=ai-service`,\n },\n {\n lang: 'yaml',\n label: 'HPA for AI workloads',\n code: `apiVersion: autoscaling/v2\nkind: HorizontalPodAutoscaler\nmetadata:\n name: ai-service-hpa\nspec:\n scaleTargetRef:\n apiVersion: apps/v1\n kind: Deployment\n name: ai-service\n minReplicas: 2\n maxReplicas: 10\n metrics:\n - type: Resource\n resource:\n name: cpu\n target:\n type: Utilization\n averageUtilization: 70`,\n },\n ],\n },\n {\n slug: 'python',\n name: 'Python',\n description: 'Use Hanzo AI in Python with the official OpenAI SDK (fully compatible), the Anthropic SDK, or via HTTP with httpx/requests. Zero lock-in, standard interfaces.',\n category: 'language',\n icon: '🐍',\n upstream: 'https://github.com/python/cpython',\n creator: 'Python Software Foundation',\n creatorUrl: 'https://python.org',\n license: 'PSF License',\n examples: [\n {\n lang: 'python',\n label: 'OpenAI SDK (recommended)',\n code: `pip install openai\n\nfrom openai import OpenAI\n\nclient = OpenAI(\n base_url=\"https://api.hanzo.ai/v1\",\n api_key=\"your-hanzo-api-key\",\n)\n\nresponse = client.chat.completions.create(\n model=\"zen4-pro\",\n messages=[{\"role\": \"user\", \"content\": \"Hello!\"}],\n)\nprint(response.choices[0].message.content)`,\n },\n {\n lang: 'python',\n label: 'httpx (raw HTTP)',\n code: `import httpx, json\n\nresponse = httpx.post(\n \"https://api.hanzo.ai/v1/chat/completions\",\n headers={\"Authorization\": \"Bearer your-hanzo-api-key\"},\n json={\n \"model\": \"zen4-pro\",\n \"messages\": [{\"role\": \"user\", \"content\": \"Hello!\"}],\n },\n)\nprint(response.json()[\"choices\"][0][\"message\"][\"content\"])`,\n },\n {\n lang: 'python',\n label: 'Async with asyncio',\n code: `import asyncio\nfrom openai import AsyncOpenAI\n\nclient = AsyncOpenAI(\n base_url=\"https://api.hanzo.ai/v1\",\n api_key=\"your-hanzo-api-key\",\n)\n\nasync def main():\n response = await client.chat.completions.create(\n model=\"zen4-pro\",\n messages=[{\"role\": \"user\", \"content\": \"Hello async!\"}],\n )\n print(response.choices[0].message.content)\n\nasyncio.run(main())`,\n },\n {\n lang: 'python',\n label: 'Environment setup',\n code: `# .env\nHANZO_API_KEY=your-hanzo-api-key\n\n# Load in code\nfrom dotenv import load_dotenv\nimport os\n\nload_dotenv()\n\nfrom openai import OpenAI\nclient = OpenAI(\n base_url=\"https://api.hanzo.ai/v1\",\n api_key=os.environ[\"HANZO_API_KEY\"],\n)`,\n },\n ],\n },\n {\n slug: 'typescript',\n name: 'TypeScript',\n description: 'Use Hanzo AI in TypeScript and Node.js with the OpenAI SDK, Vercel AI SDK, or raw fetch. Full type safety and async/streaming support.',\n category: 'language',\n icon: '🟦',\n upstream: 'https://github.com/microsoft/TypeScript',\n creator: 'Microsoft',\n creatorUrl: 'https://typescriptlang.org',\n license: 'Apache-2.0',\n examples: [\n {\n lang: 'typescript',\n label: 'OpenAI SDK',\n code: `npm install openai\n\nimport OpenAI from \"openai\";\n\nconst client = new OpenAI({\n baseURL: \"https://api.hanzo.ai/v1\",\n apiKey: process.env.HANZO_API_KEY,\n});\n\nconst response = await client.chat.completions.create({\n model: \"zen4-pro\",\n messages: [{ role: \"user\", content: \"Hello!\" }],\n});\nconsole.log(response.choices[0].message.content);`,\n },\n {\n lang: 'typescript',\n label: 'Streaming',\n code: `const stream = await client.chat.completions.create({\n model: \"zen4-pro\",\n messages: [{ role: \"user\", content: \"Stream this\" }],\n stream: true,\n});\n\nfor await (const chunk of stream) {\n process.stdout.write(chunk.choices[0]?.delta?.content ?? \"\");\n}`,\n },\n {\n lang: 'typescript',\n label: 'Next.js route',\n code: `// app/v1/generate/route.ts\nimport OpenAI from \"openai\";\nimport { NextResponse } from \"next/server\";\n\nconst client = new OpenAI({\n baseURL: \"https://api.hanzo.ai/v1\",\n apiKey: process.env.HANZO_API_KEY,\n});\n\nexport async function POST(req: Request) {\n const { prompt } = await req.json();\n const response = await client.chat.completions.create({\n model: \"zen4-pro\",\n messages: [{ role: \"user\", content: prompt }],\n });\n return NextResponse.json(response.choices[0].message);\n}`,\n },\n {\n lang: 'typescript',\n label: 'List models',\n code: `const models = await client.models.list();\nconsole.log(\\`Available: \\${models.data.length} models\\`);\nmodels.data.slice(0, 5).forEach((m) => console.log(m.id));`,\n },\n ],\n },\n {\n slug: 'go',\n name: 'Go',\n description: 'Use Hanzo AI in Go using the official OpenAI Go client or any OpenAI-compatible Go library. Hanzo\\'s standard REST API works with all HTTP clients.',\n category: 'language',\n icon: '🐹',\n upstream: 'https://github.com/golang/go',\n creator: 'Go Authors / Google',\n creatorUrl: 'https://go.dev',\n license: 'BSD-3-Clause',\n examples: [\n {\n lang: 'go',\n label: 'OpenAI Go client',\n code: `go get github.com/openai/openai-go\n\npackage main\n\nimport (\n\t\"context\"\n\t\"fmt\"\n\t\"github.com/openai/openai-go\"\n\t\"github.com/openai/openai-go/option\"\n)\n\nfunc main() {\n\tclient := openai.NewClient(\n\t\toption.WithBaseURL(\"https://api.hanzo.ai/v1\"),\n\t\toption.WithAPIKey(\"your-hanzo-api-key\"),\n\t)\n\n\tresp, _ := client.Chat.Completions.New(context.Background(),\n\t\topenai.ChatCompletionNewParams{\n\t\t\tModel: openai.F(\"zen4-pro\"),\n\t\t\tMessages: openai.F([]openai.ChatCompletionMessageParamUnion{\n\t\t\t\topenai.UserMessage(\"Hello from Go!\"),\n\t\t\t}),\n\t\t},\n\t)\n\tfmt.Println(resp.Choices[0].Message.Content)\n}`,\n },\n {\n lang: 'go',\n label: 'Raw HTTP client',\n code: `package main\n\nimport (\n\t\"bytes\"\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"io\"\n\t\"net/http\"\n\t\"os\"\n)\n\nfunc main() {\n\tbody, _ := json.Marshal(map[string]any{\n\t\t\"model\": \"zen4-pro\",\n\t\t\"messages\": []map[string]string{{\"role\": \"user\", \"content\": \"Hello!\"}},\n\t})\n\n\treq, _ := http.NewRequest(\"POST\", \"https://api.hanzo.ai/v1/chat/completions\", bytes.NewReader(body))\n\treq.Header.Set(\"Authorization\", \"Bearer \"+os.Getenv(\"HANZO_API_KEY\"))\n\treq.Header.Set(\"Content-Type\", \"application/json\")\n\n\tresp, _ := http.DefaultClient.Do(req)\n\tdefer resp.Body.Close()\n\tio.Copy(os.Stdout, resp.Body)\n\tfmt.Println()\n}`,\n },\n {\n lang: 'go',\n label: 'Streaming',\n code: `stream, _ := client.Chat.Completions.NewStreaming(context.Background(),\n\topenai.ChatCompletionNewParams{\n\t\tModel: openai.F(\"zen4-pro\"),\n\t\tMessages: openai.F([]openai.ChatCompletionMessageParamUnion{\n\t\t\topenai.UserMessage(\"Write a poem\"),\n\t\t}),\n\t},\n)\ndefer stream.Close()\n\nfor stream.Next() {\n\tchunk := stream.Current()\n\tif len(chunk.Choices) > 0 {\n\t\tfmt.Print(chunk.Choices[0].Delta.Content)\n\t}\n}`,\n },\n {\n lang: 'bash',\n label: 'Environment',\n code: `export HANZO_API_KEY=\"your-hanzo-api-key\"\ngo run main.go`,\n },\n ],\n },\n {\n slug: 'rust',\n name: 'Rust',\n description: 'Use Hanzo AI in Rust via the async-openai crate or raw reqwest HTTP calls. Full async support with Tokio, streaming, and type-safe API access.',\n category: 'language',\n icon: '🦀',\n upstream: 'https://github.com/rust-lang/rust',\n creator: 'Rust Foundation',\n creatorUrl: 'https://rust-lang.org',\n license: 'MIT / Apache-2.0',\n examples: [\n {\n lang: 'toml',\n label: 'Cargo.toml',\n code: `[dependencies]\nasync-openai = \"0.26\"\ntokio = { version = \"1\", features = [\"full\"] }`,\n },\n {\n lang: 'rust',\n label: 'async-openai',\n code: `use async_openai::{config::OpenAIConfig, Client, types::*};\n\n#[tokio::main]\nasync fn main() {\n let config = OpenAIConfig::new()\n .with_api_base(\"https://api.hanzo.ai/v1\")\n .with_api_key(std::env::var(\"HANZO_API_KEY\").unwrap());\n\n let client = Client::with_config(config);\n\n let request = CreateChatCompletionRequestArgs::default()\n .model(\"zen4-pro\")\n .messages([ChatCompletionRequestUserMessageArgs::default()\n .content(\"Hello from Rust!\")\n .build()\n .unwrap()\n .into()])\n .build()\n .unwrap();\n\n let response = client.chat().create(request).await.unwrap();\n println!(\"{}\", response.choices[0].message.content.as_ref().unwrap());\n}`,\n },\n {\n lang: 'rust',\n label: 'reqwest raw HTTP',\n code: `use reqwest::Client;\nuse serde_json::json;\n\n#[tokio::main]\nasync fn main() {\n let client = Client::new();\n let resp = client\n .post(\"https://api.hanzo.ai/v1/chat/completions\")\n .bearer_auth(std::env::var(\"HANZO_API_KEY\").unwrap())\n .json(&json!({\n \"model\": \"zen4-pro\",\n \"messages\": [{\"role\": \"user\", \"content\": \"Hello!\"}]\n }))\n .send()\n .await\n .unwrap();\n println!(\"{}\", resp.text().await.unwrap());\n}`,\n },\n {\n lang: 'bash',\n label: 'Build and run',\n code: `export HANZO_API_KEY=\"your-hanzo-api-key\"\ncargo build --release\n./target/release/my-ai-app`,\n },\n ],\n },\n];\nexport const INTEGRATION_CATEGORIES = {\n sdk: 'AI SDKs',\n framework: 'Frameworks',\n platform: 'Platforms & Editors',\n infra: 'Infrastructure',\n language: 'Languages',\n};\nexport function getIntegration(slug) {\n return INTEGRATIONS.find((i) => i.slug === slug);\n}\nexport function getIntegrationsByCategory(category) {\n return INTEGRATIONS.filter((i) => i.category === category);\n}\n"],"x_google_ignoreList":[0],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"integrations-DW-vmr60.js","names":[],"sources":["../../node_modules/.pnpm/@hanzo+app@0.3.76_4847375212aab65dad4dcc237c4f97e6/node_modules/@hanzo/app/dist/lib/integrations.js"],"sourcesContent":["export const INTEGRATIONS = [\n {\n slug: 'openai-sdk',\n name: 'OpenAI Python SDK',\n description: `Use the official OpenAI Python SDK with Hanzo AI by pointing it to our OpenAI-compatible API endpoint. Access every model Hanzo serves with your existing OpenAI code — no refactor needed.`,\n category: 'sdk',\n icon: '🐍',\n upstream: 'https://github.com/openai/openai-python',\n creator: 'OpenAI',\n creatorUrl: 'https://openai.com',\n license: 'MIT',\n examples: [\n {\n lang: 'python',\n label: 'Install & configure',\n code: `pip install openai\n\nfrom openai import OpenAI\n\nclient = OpenAI(\n api_key=\"your-hanzo-api-key\",\n base_url=\"https://api.hanzo.ai/v1\",\n)\n\nresponse = client.chat.completions.create(\n model=\"zen4-pro\",\n messages=[{\"role\": \"user\", \"content\": \"Hello!\"}],\n)\nprint(response.choices[0].message.content)`,\n },\n {\n lang: 'python',\n label: 'Streaming',\n code: `stream = client.chat.completions.create(\n model=\"openai/gpt-4.1\",\n messages=[{\"role\": \"user\", \"content\": \"Write a haiku\"}],\n stream=True,\n)\nfor chunk in stream:\n print(chunk.choices[0].delta.content or \"\", end=\"\")`,\n },\n {\n lang: 'python',\n label: 'Vision model',\n code: `response = client.chat.completions.create(\n model=\"google/gemini-2.0-flash\",\n messages=[{\n \"role\": \"user\",\n \"content\": [\n {\"type\": \"text\", \"text\": \"What is in this image?\"},\n {\"type\": \"image_url\", \"image_url\": {\"url\": \"https://example.com/img.png\"}},\n ],\n }],\n)`,\n },\n {\n lang: 'bash',\n label: 'Environment variable',\n code: `export HANZO_API_KEY=\"your-hanzo-api-key\"\nexport OPENAI_API_KEY=\"$HANZO_API_KEY\"\nexport OPENAI_BASE_URL=\"https://api.hanzo.ai/v1\"`,\n },\n ],\n },\n {\n slug: 'anthropic-sdk',\n name: 'Anthropic SDK',\n description: 'Use the Anthropic Python or TypeScript SDK with Hanzo AI to access Claude models alongside 50+ other models through a single API key and billing account.',\n category: 'sdk',\n icon: '🤖',\n upstream: 'https://github.com/anthropics/anthropic-sdk-python',\n creator: 'Anthropic',\n creatorUrl: 'https://anthropic.com',\n license: 'MIT',\n examples: [\n {\n lang: 'python',\n label: 'Python setup',\n code: `pip install anthropic\n\nimport anthropic\n\nclient = anthropic.Anthropic(\n api_key=\"your-hanzo-api-key\",\n base_url=\"https://api.hanzo.ai/v1\",\n)\n\nmessage = client.messages.create(\n model=\"anthropic/claude-sonnet-4-6\",\n max_tokens=1024,\n messages=[{\"role\": \"user\", \"content\": \"Hello, Claude!\"}],\n)\nprint(message.content[0].text)`,\n },\n {\n lang: 'typescript',\n label: 'TypeScript setup',\n code: `import Anthropic from \"@anthropic-ai/sdk\";\n\nconst client = new Anthropic({\n apiKey: process.env.HANZO_API_KEY,\n baseURL: \"https://api.hanzo.ai/v1\",\n});\n\nconst message = await client.messages.create({\n model: \"anthropic/claude-sonnet-4-6\",\n max_tokens: 1024,\n messages: [{ role: \"user\", content: \"Hello!\" }],\n});`,\n },\n {\n lang: 'python',\n label: 'Streaming',\n code: `with client.messages.stream(\n model=\"glm-5.2\",\n max_tokens=1024,\n messages=[{\"role\": \"user\", \"content\": \"Tell me a story\"}],\n) as stream:\n for text in stream.text_stream:\n print(text, end=\"\", flush=True)`,\n },\n {\n lang: 'bash',\n label: 'cURL test',\n code: `curl https://api.hanzo.ai/v1/messages \\\\\n -H \"x-api-key: $HANZO_API_KEY\" \\\\\n -H \"anthropic-version: 2023-06-01\" \\\\\n -H \"content-type: application/json\" \\\\\n -d '{\"model\":\"anthropic/claude-sonnet-4-6\",\"max_tokens\":100,\"messages\":[{\"role\":\"user\",\"content\":\"Hi\"}]}'`,\n },\n ],\n },\n {\n slug: 'langchain',\n name: 'LangChain',\n description: `Integrate LangChain with Hanzo AI to build chains, agents, and RAG pipelines using any model Hanzo serves. Hanzo is OpenAI-compatible so ChatOpenAI just works.`,\n category: 'framework',\n icon: '⛓️',\n upstream: 'https://github.com/langchain-ai/langchain',\n creator: 'LangChain AI',\n creatorUrl: 'https://langchain.com',\n license: 'MIT',\n examples: [\n {\n lang: 'python',\n label: 'LangChain Python',\n code: `pip install langchain langchain-openai\n\nfrom langchain_openai import ChatOpenAI\n\nllm = ChatOpenAI(\n model=\"zen4-pro\",\n openai_api_key=\"your-hanzo-api-key\",\n openai_api_base=\"https://api.hanzo.ai/v1\",\n)\n\nresponse = llm.invoke(\"What is the capital of France?\")\nprint(response.content)`,\n },\n {\n lang: 'python',\n label: 'Chain with prompt',\n code: `from langchain_core.prompts import ChatPromptTemplate\nfrom langchain_openai import ChatOpenAI\n\nprompt = ChatPromptTemplate.from_template(\"Summarize: {text}\")\nllm = ChatOpenAI(\n model=\"openai/gpt-4.1-mini\",\n openai_api_key=\"your-hanzo-api-key\",\n openai_api_base=\"https://api.hanzo.ai/v1\",\n)\nchain = prompt | llm\nresult = chain.invoke({\"text\": \"LangChain is a framework...\"})`,\n },\n {\n lang: 'typescript',\n label: 'LangChain TypeScript',\n code: `import { ChatOpenAI } from \"@langchain/openai\";\n\nconst model = new ChatOpenAI({\n modelName: \"zen4-pro\",\n openAIApiKey: process.env.HANZO_API_KEY,\n configuration: {\n baseURL: \"https://api.hanzo.ai/v1\",\n },\n});\n\nconst response = await model.invoke(\"Hello!\");`,\n },\n {\n lang: 'python',\n label: 'RAG with Hanzo',\n code: `from langchain_openai import ChatOpenAI, OpenAIEmbeddings\n\nembeddings = OpenAIEmbeddings(\n openai_api_key=\"your-hanzo-api-key\",\n openai_api_base=\"https://api.hanzo.ai/v1\",\n model=\"openai/text-embedding-3-large\",\n)\n\nllm = ChatOpenAI(\n model=\"zen4-pro\",\n openai_api_key=\"your-hanzo-api-key\",\n openai_api_base=\"https://api.hanzo.ai/v1\",\n)`,\n },\n ],\n },\n {\n slug: 'llamaindex',\n name: 'LlamaIndex',\n description: 'Use LlamaIndex with Hanzo AI to build powerful RAG applications, data agents, and query pipelines. Drop in Hanzo as your LLM provider with zero friction.',\n category: 'framework',\n icon: '🦙',\n upstream: 'https://github.com/run-llama/llama_index',\n creator: 'LlamaIndex',\n creatorUrl: 'https://llamaindex.ai',\n license: 'MIT',\n examples: [\n {\n lang: 'python',\n label: 'Basic setup',\n code: `pip install llama-index llama-index-llms-openai\n\nfrom llama_index.llms.openai import OpenAI\nfrom llama_index.core import Settings\n\nSettings.llm = OpenAI(\n model=\"zen4-pro\",\n api_key=\"your-hanzo-api-key\",\n api_base=\"https://api.hanzo.ai/v1\",\n)`,\n },\n {\n lang: 'python',\n label: 'RAG pipeline',\n code: `from llama_index.core import VectorStoreIndex, SimpleDirectoryReader\nfrom llama_index.llms.openai import OpenAI\nfrom llama_index.embeddings.openai import OpenAIEmbedding\n\nSettings.llm = OpenAI(\n model=\"zen4-pro\",\n api_key=\"your-hanzo-api-key\",\n api_base=\"https://api.hanzo.ai/v1\",\n)\nSettings.embed_model = OpenAIEmbedding(\n api_key=\"your-hanzo-api-key\",\n api_base=\"https://api.hanzo.ai/v1\",\n)\n\ndocuments = SimpleDirectoryReader(\"./data\").load_data()\nindex = VectorStoreIndex.from_documents(documents)\nquery_engine = index.as_query_engine()\nresponse = query_engine.query(\"What is in these docs?\")`,\n },\n {\n lang: 'python',\n label: 'Chat engine',\n code: `chat_engine = index.as_chat_engine(\n chat_mode=\"condense_plus_context\",\n verbose=True,\n)\nresponse = chat_engine.chat(\"Tell me more about this topic\")`,\n },\n {\n lang: 'python',\n label: 'Streaming query',\n code: `streaming_response = query_engine.query(\n \"Summarize the key points\",\n streaming=True,\n)\nstreaming_response.print_response_stream()`,\n },\n ],\n },\n {\n slug: 'vercel-ai-sdk',\n name: 'Vercel AI SDK',\n description: 'Use the Vercel AI SDK with Hanzo AI to build streaming AI UIs, chatbots, and generative interfaces in Next.js, React, and other frameworks.',\n category: 'framework',\n icon: '▲',\n upstream: 'https://github.com/vercel/ai',\n creator: 'Vercel',\n creatorUrl: 'https://vercel.com',\n license: 'Apache-2.0',\n examples: [\n {\n lang: 'typescript',\n label: 'Setup provider',\n code: `npm install ai @ai-sdk/openai\n\nimport { createOpenAI } from \"@ai-sdk/openai\";\n\nconst hanzo = createOpenAI({\n baseURL: \"https://api.hanzo.ai/v1\",\n apiKey: process.env.HANZO_API_KEY,\n});`,\n },\n {\n lang: 'typescript',\n label: 'generateText',\n code: `import { generateText } from \"ai\";\nimport { createOpenAI } from \"@ai-sdk/openai\";\n\nconst hanzo = createOpenAI({\n baseURL: \"https://api.hanzo.ai/v1\",\n apiKey: process.env.HANZO_API_KEY,\n});\n\nconst { text } = await generateText({\n model: hanzo(\"zen4-pro\"),\n prompt: \"Write a poem about AI\",\n});`,\n },\n {\n lang: 'typescript',\n label: 'Streaming route handler',\n code: `// app/v1/chat/route.ts\nimport { streamText } from \"ai\";\nimport { createOpenAI } from \"@ai-sdk/openai\";\n\nconst hanzo = createOpenAI({\n baseURL: \"https://api.hanzo.ai/v1\",\n apiKey: process.env.HANZO_API_KEY,\n});\n\nexport async function POST(req: Request) {\n const { messages } = await req.json();\n const result = streamText({\n model: hanzo(\"zen4-pro\"),\n messages,\n });\n return result.toDataStreamResponse();\n}`,\n },\n {\n lang: 'typescript',\n label: 'useChat hook',\n code: `\"use client\";\nimport { useChat } from \"ai/react\";\n\nexport default function Chat() {\n const { messages, input, handleSubmit, handleInputChange } = useChat({\n api: \"/v1/chat\",\n });\n return (\n <form onSubmit={handleSubmit}>\n <input value={input} onChange={handleInputChange} />\n <button type=\"submit\">Send</button>\n {messages.map((m) => <p key={m.id}>{m.content}</p>)}\n </form>\n );\n}`,\n },\n ],\n },\n {\n slug: 'huggingface',\n name: 'Hugging Face',\n description: 'Access Hugging Face models and use the HF Inference API through the Hanzo AI API. Also use Hanzo AI models with HuggingFace Hub tooling.',\n category: 'sdk',\n icon: '🤗',\n upstream: 'https://github.com/huggingface/transformers',\n creator: 'Hugging Face',\n creatorUrl: 'https://huggingface.co',\n license: 'Apache-2.0',\n examples: [\n {\n lang: 'python',\n label: 'InferenceClient via Hanzo',\n code: `pip install huggingface_hub\n\nfrom huggingface_hub import InferenceClient\n\nclient = InferenceClient(\n base_url=\"https://api.hanzo.ai/v1\",\n api_key=\"your-hanzo-api-key\",\n)\n\noutput = client.chat.completions.create(\n model=\"meta-llama/llama-4-scout\",\n messages=[{\"role\": \"user\", \"content\": \"Hello!\"}],\n)`,\n },\n {\n lang: 'python',\n label: 'hf CLI with Hanzo endpoint',\n code: `# Use hf for model downloads, Hanzo for inference\nhf download meta-llama/Llama-4-Scout-17B-16E-Instruct\n\n# Then serve via Hanzo API\nfrom openai import OpenAI\nclient = OpenAI(\n base_url=\"https://api.hanzo.ai/v1\",\n api_key=\"your-hanzo-api-key\",\n)`,\n },\n {\n lang: 'typescript',\n label: 'JS InferenceClient',\n code: `import { InferenceClient } from \"@huggingface/inference\";\n\nconst client = new InferenceClient(\"your-hanzo-api-key\");\n\nconst chatCompletion = await client.chatCompletion({\n model: \"meta-llama/llama-4-scout\",\n messages: [{ role: \"user\", content: \"Hello!\" }],\n provider: \"hanzo\",\n endpointUrl: \"https://api.hanzo.ai/v1\",\n});`,\n },\n {\n lang: 'bash',\n label: 'cURL inference',\n code: `curl https://api.hanzo.ai/v1/chat/completions \\\\\n -H \"Authorization: Bearer $HANZO_API_KEY\" \\\\\n -H \"Content-Type: application/json\" \\\\\n -d '{\"model\":\"meta-llama/llama-4-maverick\",\"messages\":[{\"role\":\"user\",\"content\":\"Hi\"}]}'`,\n },\n ],\n },\n {\n slug: 'autogen',\n name: 'AutoGen',\n description: 'Build multi-agent systems with Microsoft AutoGen. Set base_url to api.hanzo.ai/v1 in the AutoGen config, name a Hanzo model, and the agents run on it.',\n category: 'framework',\n icon: '🤝',\n upstream: 'https://github.com/microsoft/autogen',\n creator: 'Microsoft Research',\n creatorUrl: 'https://microsoft.com/en-us/research',\n license: 'MIT',\n examples: [\n {\n lang: 'python',\n label: 'AutoGen setup',\n code: `pip install pyautogen\n\nimport autogen\n\nconfig_list = [{\n \"model\": \"zen4-pro\",\n \"api_key\": \"your-hanzo-api-key\",\n \"base_url\": \"https://api.hanzo.ai/v1\",\n}]\n\nassistant = autogen.AssistantAgent(\n name=\"assistant\",\n llm_config={\"config_list\": config_list},\n)\n\nuser_proxy = autogen.UserProxyAgent(\n name=\"user_proxy\",\n human_input_mode=\"NEVER\",\n)\n\nuser_proxy.initiate_chat(assistant, message=\"Write a Python script to sort a list.\")`,\n },\n {\n lang: 'python',\n label: 'Multi-agent conversation',\n code: `coder = autogen.AssistantAgent(\n name=\"coder\",\n llm_config={\"config_list\": config_list},\n system_message=\"You write clean Python code.\",\n)\n\nreviewer = autogen.AssistantAgent(\n name=\"reviewer\",\n llm_config={\"config_list\": config_list},\n system_message=\"You review code for bugs.\",\n)\n\ngroupchat = autogen.GroupChat(agents=[user_proxy, coder, reviewer], messages=[])\nmanager = autogen.GroupChatManager(groupchat=groupchat, llm_config={\"config_list\": config_list})`,\n },\n {\n lang: 'python',\n label: 'Code execution agent',\n code: `user_proxy = autogen.UserProxyAgent(\n name=\"user_proxy\",\n human_input_mode=\"NEVER\",\n code_execution_config={\"work_dir\": \"coding\", \"use_docker\": False},\n)`,\n },\n {\n lang: 'bash',\n label: 'Environment setup',\n code: `export HANZO_API_KEY=\"your-hanzo-api-key\"\n# AutoGen picks up OAI_CONFIG_LIST or inline config\n# No extra env vars needed — just point base_url to Hanzo`,\n },\n ],\n },\n {\n slug: 'crewai',\n name: 'CrewAI',\n description: 'Use CrewAI to build collaborative AI agent teams powered by Hanzo AI models. CrewAI\\'s role-based agents work with any OpenAI-compatible provider.',\n category: 'framework',\n icon: '🚢',\n upstream: 'https://github.com/crewAIInc/crewAI',\n creator: 'CrewAI / João Moura',\n creatorUrl: 'https://crewai.com',\n license: 'MIT',\n examples: [\n {\n lang: 'python',\n label: 'CrewAI with Hanzo',\n code: `pip install crewai\n\nimport os\nos.environ[\"OPENAI_API_KEY\"] = \"your-hanzo-api-key\"\nos.environ[\"OPENAI_API_BASE\"] = \"https://api.hanzo.ai/v1\"\nos.environ[\"OPENAI_MODEL_NAME\"] = \"zen4-pro\"\n\nfrom crewai import Agent, Task, Crew\n\nresearcher = Agent(\n role=\"Researcher\",\n goal=\"Find accurate information on AI trends\",\n backstory=\"Expert AI researcher with deep knowledge\",\n)\n\nwriter = Agent(\n role=\"Writer\",\n goal=\"Write compelling summaries\",\n backstory=\"Technical writer specializing in AI\",\n)`,\n },\n {\n lang: 'python',\n label: 'Tasks and Crew',\n code: `task1 = Task(\n description=\"Research the latest LLM benchmarks\",\n expected_output=\"A list of top 5 models and their scores\",\n agent=researcher,\n)\n\ntask2 = Task(\n description=\"Write a blog post based on the research\",\n expected_output=\"500-word blog post in markdown\",\n agent=writer,\n)\n\ncrew = Crew(agents=[researcher, writer], tasks=[task1, task2])\nresult = crew.kickoff()`,\n },\n {\n lang: 'python',\n label: 'Custom LLM config',\n code: `from crewai import LLM\n\nhanzo_llm = LLM(\n model=\"zen4-pro\",\n api_key=\"your-hanzo-api-key\",\n base_url=\"https://api.hanzo.ai/v1\",\n)\n\nagent = Agent(\n role=\"Analyst\",\n goal=\"Analyze data\",\n backstory=\"Data analyst\",\n llm=hanzo_llm,\n)`,\n },\n {\n lang: 'bash',\n label: 'Quick start',\n code: `pip install crewai\nexport OPENAI_API_KEY=\"your-hanzo-api-key\"\nexport OPENAI_BASE_URL=\"https://api.hanzo.ai/v1\"\ncrewai create my-crew`,\n },\n ],\n },\n {\n slug: 'dspy',\n name: 'DSPy',\n description: 'Use DSPy to program (not prompt) Hanzo AI models. DSPy\\'s systematic approach to LM prompting works with any OpenAI-compatible provider.',\n category: 'framework',\n icon: '🔬',\n upstream: 'https://github.com/stanfordnlp/dspy',\n creator: 'Stanford NLP / Omar Khattab',\n creatorUrl: 'https://dspy.ai',\n license: 'MIT',\n examples: [\n {\n lang: 'python',\n label: 'DSPy + Hanzo setup',\n code: `pip install dspy\n\nimport dspy\n\nlm = dspy.LM(\n model=\"openai/zen4-pro\",\n api_key=\"your-hanzo-api-key\",\n api_base=\"https://api.hanzo.ai/v1\",\n)\ndspy.configure(lm=lm)`,\n },\n {\n lang: 'python',\n label: 'Signature and module',\n code: `class QA(dspy.Signature):\n \"\"\"Answer questions with short factual answers.\"\"\"\n question: str = dspy.InputField()\n answer: str = dspy.OutputField(desc=\"often 1-3 sentences\")\n\nqa = dspy.Predict(QA)\nresponse = qa(question=\"What is the Hanzo AI cloud?\")\nprint(response.answer)`,\n },\n {\n lang: 'python',\n label: 'Chain of thought',\n code: `class CoTQA(dspy.Signature):\n \"\"\"Answer with step-by-step reasoning.\"\"\"\n question: str = dspy.InputField()\n reasoning: str = dspy.OutputField(desc=\"think step by step\")\n answer: str = dspy.OutputField()\n\ncot = dspy.ChainOfThought(CoTQA)\nresult = cot(question=\"Why is AI important for developers?\")`,\n },\n {\n lang: 'python',\n label: 'Optimization with MIPROv2',\n code: `from dspy.teleprompt import MIPROv2\n\nteleprompter = MIPROv2(metric=my_metric, auto=\"medium\")\noptimized = teleprompter.compile(program, trainset=train_data)`,\n },\n ],\n },\n {\n slug: 'haystack',\n name: 'Haystack',\n description: 'Build NLP pipelines and RAG systems with Haystack. Point OpenAIChatGenerator at api.hanzo.ai/v1, name a Hanzo model, and the pipeline runs unchanged.',\n category: 'framework',\n icon: '🌾',\n upstream: 'https://github.com/deepset-ai/haystack',\n creator: 'deepset.ai',\n creatorUrl: 'https://haystack.deepset.ai',\n license: 'Apache-2.0',\n examples: [\n {\n lang: 'python',\n label: 'Haystack + Hanzo',\n code: `pip install haystack-ai\n\nfrom haystack.components.generators.chat import OpenAIChatGenerator\nfrom haystack.dataclasses import ChatMessage\nfrom haystack.utils import Secret\n\ngenerator = OpenAIChatGenerator(\n model=\"zen4-pro\",\n api_key=Secret.from_token(\"your-hanzo-api-key\"),\n api_base_url=\"https://api.hanzo.ai/v1\",\n)\n\nmessages = [ChatMessage.from_user(\"What is RAG?\")]\nresult = generator.run(messages=messages)`,\n },\n {\n lang: 'python',\n label: 'RAG pipeline',\n code: `from haystack import Pipeline\nfrom haystack.components.builders import PromptBuilder\nfrom haystack.components.generators.chat import OpenAIChatGenerator\n\nprompt_template = \"\"\"\nContext: {% for doc in documents %}{{ doc.content }}{% endfor %}\nQuestion: {{ question }}\nAnswer:\n\"\"\"\n\npipeline = Pipeline()\npipeline.add_component(\"prompt\", PromptBuilder(template=prompt_template))\npipeline.add_component(\"llm\", OpenAIChatGenerator(\n model=\"zen4-pro\",\n api_key=Secret.from_token(\"your-hanzo-api-key\"),\n api_base_url=\"https://api.hanzo.ai/v1\",\n))`,\n },\n {\n lang: 'python',\n label: 'Embeddings',\n code: `from haystack.components.embedders import OpenAITextEmbedder\n\nembedder = OpenAITextEmbedder(\n model=\"openai/text-embedding-3-large\",\n api_key=Secret.from_token(\"your-hanzo-api-key\"),\n api_base_url=\"https://api.hanzo.ai/v1\",\n)`,\n },\n {\n lang: 'bash',\n label: 'Install',\n code: `pip install haystack-ai\nexport HANZO_API_KEY=\"your-hanzo-api-key\"`,\n },\n ],\n },\n {\n slug: 'cursor',\n name: 'Cursor',\n description: 'Use Hanzo AI models inside Cursor IDE by adding a custom API provider. Access Zen, GPT-4.1, Claude Sonnet, and 50+ other models directly in your editor.',\n category: 'platform',\n icon: '🖱️',\n upstream: 'https://github.com/getcursor/cursor',\n creator: 'Anysphere',\n creatorUrl: 'https://cursor.com',\n license: 'Proprietary',\n examples: [\n {\n lang: 'json',\n label: 'Cursor settings',\n code: `// Settings > Models > Add custom model\n{\n \"provider\": \"openai-compatible\",\n \"name\": \"Hanzo AI\",\n \"baseUrl\": \"https://api.hanzo.ai/v1\",\n \"apiKey\": \"your-hanzo-api-key\",\n \"models\": [\"zen4-pro\", \"zen4-max\", \"openai/gpt-4.1\", \"anthropic/claude-sonnet-4-6\"]\n}`,\n },\n {\n lang: 'bash',\n label: 'Available models',\n code: `# Query Hanzo models list\ncurl https://api.hanzo.ai/v1/models \\\\\n -H \"Authorization: Bearer $HANZO_API_KEY\" | jq '.data[].id'`,\n },\n {\n lang: 'bash',\n label: 'Test connection',\n code: `curl https://api.hanzo.ai/v1/chat/completions \\\\\n -H \"Authorization: Bearer $HANZO_API_KEY\" \\\\\n -H \"Content-Type: application/json\" \\\\\n -d '{\"model\":\"zen4-pro\",\"messages\":[{\"role\":\"user\",\"content\":\"Hello from Cursor!\"}],\"max_tokens\":50}'`,\n },\n {\n lang: 'bash',\n label: 'Tips',\n code: `# zen4-pro: best for code generation\n# zen4-coder: specialized code model\n# zen4-thinking: step-by-step reasoning\n# openai/gpt-4.1: advanced reasoning\n# All available at api.hanzo.ai/v1`,\n },\n ],\n },\n {\n slug: 'continue-dev',\n name: 'Continue.dev',\n description: 'Configure Continue.dev VS Code / JetBrains extension to use Hanzo AI as your coding assistant. Add Hanzo as a custom OpenAI-compatible provider in your config.',\n category: 'platform',\n icon: '🔄',\n upstream: 'https://github.com/continuedev/continue',\n creator: 'Continue.dev',\n creatorUrl: 'https://continue.dev',\n license: 'Apache-2.0',\n examples: [\n {\n lang: 'json',\n label: '~/.continue/config.json',\n code: `{\n \"models\": [\n {\n \"title\": \"Hanzo zen4-pro\",\n \"provider\": \"openai\",\n \"model\": \"zen4-pro\",\n \"apiKey\": \"your-hanzo-api-key\",\n \"apiBase\": \"https://api.hanzo.ai/v1\"\n },\n {\n \"title\": \"Hanzo zen4-coder\",\n \"provider\": \"openai\",\n \"model\": \"zen4-coder\",\n \"apiKey\": \"your-hanzo-api-key\",\n \"apiBase\": \"https://api.hanzo.ai/v1\"\n }\n ],\n \"tabAutocompleteModel\": {\n \"title\": \"Hanzo Autocomplete\",\n \"provider\": \"openai\",\n \"model\": \"zen4-coder\",\n \"apiKey\": \"your-hanzo-api-key\",\n \"apiBase\": \"https://api.hanzo.ai/v1\"\n }\n}`,\n },\n {\n lang: 'json',\n label: 'Embeddings config',\n code: `{\n \"embeddingsProvider\": {\n \"provider\": \"openai\",\n \"model\": \"openai/text-embedding-3-large\",\n \"apiKey\": \"your-hanzo-api-key\",\n \"apiBase\": \"https://api.hanzo.ai/v1\"\n }\n}`,\n },\n {\n lang: 'bash',\n label: 'Install Continue',\n code: `# VS Code\ncode --install-extension Continue.continue\n\n# JetBrains: install from marketplace\n# Then edit ~/.continue/config.json`,\n },\n {\n lang: 'bash',\n label: 'Test API',\n code: `curl https://api.hanzo.ai/v1/chat/completions \\\\\n -H \"Authorization: Bearer $HANZO_API_KEY\" \\\\\n -d '{\"model\":\"zen4-coder\",\"messages\":[{\"role\":\"user\",\"content\":\"Complete this: def hello():\"}]}'`,\n },\n ],\n },\n {\n slug: 'github-copilot',\n name: 'GitHub Copilot',\n description: 'Extend your GitHub Copilot workflow with Hanzo AI for access to additional models and capabilities via the API. Use Hanzo for tasks Copilot can\\'t handle.',\n category: 'platform',\n icon: '🐙',\n upstream: 'https://github.com/features/copilot',\n creator: 'GitHub / Microsoft',\n creatorUrl: 'https://github.com',\n license: 'Proprietary',\n examples: [\n {\n lang: 'python',\n label: 'Hanzo API alongside Copilot',\n code: `# Use GitHub Copilot in editor, Hanzo API in code\nfrom openai import OpenAI\n\n# Hanzo for programmatic access\nclient = OpenAI(\n base_url=\"https://api.hanzo.ai/v1\",\n api_key=\"your-hanzo-api-key\",\n)\n\n# Access the models Copilot does not offer\nresponse = client.chat.completions.create(\n model=\"zen4-pro\",\n messages=[{\"role\": \"user\", \"content\": \"Review this code...\"}],\n)`,\n },\n {\n lang: 'typescript',\n label: 'GitHub Actions with Hanzo',\n code: `// In CI: use Hanzo AI for code review\nimport OpenAI from \"openai\";\n\nconst client = new OpenAI({\n baseURL: \"https://api.hanzo.ai/v1\",\n apiKey: process.env.HANZO_API_KEY,\n});\n\nconst review = await client.chat.completions.create({\n model: \"zen4-pro\",\n messages: [{\n role: \"user\",\n content: \\`Review this PR diff:\\n\\${diff}\\`,\n }],\n});`,\n },\n {\n lang: 'yaml',\n label: 'GitHub Actions workflow',\n code: `name: AI Code Review\non: [pull_request]\njobs:\n review:\n runs-on: ubuntu-latest\n steps:\n - uses: actions/checkout@v4\n - name: AI Review\n env:\n HANZO_API_KEY: \\${{ secrets.HANZO_API_KEY }}\n run: |\n pip install openai\n python scripts/ai_review.py`,\n },\n {\n lang: 'bash',\n label: 'API key setup',\n code: `# Add to GitHub repo secrets\n# Settings > Secrets > Actions > New secret\n# Name: HANZO_API_KEY\n# Value: your-hanzo-api-key`,\n },\n ],\n },\n {\n slug: 'docker',\n name: 'Docker',\n description: 'Deploy Hanzo AI-powered services in Docker containers. Use the Hanzo API from any containerized application with proper environment configuration.',\n category: 'infra',\n icon: '🐳',\n upstream: 'https://github.com/moby/moby',\n creator: 'Docker / Moby Project',\n creatorUrl: 'https://docker.com',\n license: 'Apache-2.0',\n examples: [\n {\n lang: 'dockerfile',\n label: 'Dockerfile',\n code: `FROM python:3.12-slim\n\nWORKDIR /app\nCOPY requirements.txt .\nRUN pip install -r requirements.txt\n\nCOPY . .\n\nENV HANZO_API_KEY=\"\"\nENV OPENAI_API_BASE=\"https://api.hanzo.ai/v1\"\n\nCMD [\"python\", \"main.py\"]`,\n },\n {\n lang: 'yaml',\n label: 'compose.yml',\n code: `services:\n app:\n build: .\n environment:\n - HANZO_API_KEY=\\${HANZO_API_KEY}\n - OPENAI_API_BASE=https://api.hanzo.ai/v1\n ports:\n - \"8000:8000\"\n restart: unless-stopped`,\n },\n {\n lang: 'bash',\n label: 'Run with env',\n code: `# .env file\nHANZO_API_KEY=your-hanzo-api-key\n\n# Start\ndocker compose up -d\n\n# Or direct run\ndocker run -e HANZO_API_KEY=your-key -p 8000:8000 my-ai-app`,\n },\n {\n lang: 'python',\n label: 'App code',\n code: `import os\nfrom openai import OpenAI\n\nclient = OpenAI(\n base_url=os.environ.get(\"OPENAI_API_BASE\", \"https://api.hanzo.ai/v1\"),\n api_key=os.environ[\"HANZO_API_KEY\"],\n)`,\n },\n ],\n },\n {\n slug: 'kubernetes',\n name: 'Kubernetes',\n description: 'Deploy Hanzo AI-powered workloads on Kubernetes. Securely manage your Hanzo API key as a K8s secret and inject it into pods.',\n category: 'infra',\n icon: '⚓',\n upstream: 'https://github.com/kubernetes/kubernetes',\n creator: 'CNCF / Google',\n creatorUrl: 'https://kubernetes.io',\n license: 'Apache-2.0',\n examples: [\n {\n lang: 'yaml',\n label: 'K8s Secret',\n code: `apiVersion: v1\nkind: Secret\nmetadata:\n name: hanzo-credentials\n namespace: default\ntype: Opaque\nstringData:\n api-key: \"your-hanzo-api-key\"`,\n },\n {\n lang: 'yaml',\n label: 'Deployment manifest',\n code: `apiVersion: apps/v1\nkind: Deployment\nmetadata:\n name: ai-service\nspec:\n replicas: 2\n selector:\n matchLabels:\n app: ai-service\n template:\n spec:\n containers:\n - name: app\n image: my-ai-app:latest\n env:\n - name: HANZO_API_KEY\n valueFrom:\n secretKeyRef:\n name: hanzo-credentials\n key: api-key\n - name: OPENAI_API_BASE\n value: \"https://api.hanzo.ai/v1\"`,\n },\n {\n lang: 'bash',\n label: 'Apply to cluster',\n code: `kubectl create secret generic hanzo-credentials \\\\\n --from-literal=api-key=\"your-hanzo-api-key\"\n\nkubectl apply -f deployment.yaml\nkubectl get pods -l app=ai-service`,\n },\n {\n lang: 'yaml',\n label: 'HPA for AI workloads',\n code: `apiVersion: autoscaling/v2\nkind: HorizontalPodAutoscaler\nmetadata:\n name: ai-service-hpa\nspec:\n scaleTargetRef:\n apiVersion: apps/v1\n kind: Deployment\n name: ai-service\n minReplicas: 2\n maxReplicas: 10\n metrics:\n - type: Resource\n resource:\n name: cpu\n target:\n type: Utilization\n averageUtilization: 70`,\n },\n ],\n },\n {\n slug: 'python',\n name: 'Python',\n description: 'Use Hanzo AI in Python with the official OpenAI SDK (fully compatible), the Anthropic SDK, or via HTTP with httpx/requests. Zero lock-in, standard interfaces.',\n category: 'language',\n icon: '🐍',\n upstream: 'https://github.com/python/cpython',\n creator: 'Python Software Foundation',\n creatorUrl: 'https://python.org',\n license: 'PSF License',\n examples: [\n {\n lang: 'python',\n label: 'OpenAI SDK (recommended)',\n code: `pip install openai\n\nfrom openai import OpenAI\n\nclient = OpenAI(\n base_url=\"https://api.hanzo.ai/v1\",\n api_key=\"your-hanzo-api-key\",\n)\n\nresponse = client.chat.completions.create(\n model=\"zen4-pro\",\n messages=[{\"role\": \"user\", \"content\": \"Hello!\"}],\n)\nprint(response.choices[0].message.content)`,\n },\n {\n lang: 'python',\n label: 'httpx (raw HTTP)',\n code: `import httpx, json\n\nresponse = httpx.post(\n \"https://api.hanzo.ai/v1/chat/completions\",\n headers={\"Authorization\": \"Bearer your-hanzo-api-key\"},\n json={\n \"model\": \"zen4-pro\",\n \"messages\": [{\"role\": \"user\", \"content\": \"Hello!\"}],\n },\n)\nprint(response.json()[\"choices\"][0][\"message\"][\"content\"])`,\n },\n {\n lang: 'python',\n label: 'Async with asyncio',\n code: `import asyncio\nfrom openai import AsyncOpenAI\n\nclient = AsyncOpenAI(\n base_url=\"https://api.hanzo.ai/v1\",\n api_key=\"your-hanzo-api-key\",\n)\n\nasync def main():\n response = await client.chat.completions.create(\n model=\"zen4-pro\",\n messages=[{\"role\": \"user\", \"content\": \"Hello async!\"}],\n )\n print(response.choices[0].message.content)\n\nasyncio.run(main())`,\n },\n {\n lang: 'python',\n label: 'Environment setup',\n code: `# .env\nHANZO_API_KEY=your-hanzo-api-key\n\n# Load in code\nfrom dotenv import load_dotenv\nimport os\n\nload_dotenv()\n\nfrom openai import OpenAI\nclient = OpenAI(\n base_url=\"https://api.hanzo.ai/v1\",\n api_key=os.environ[\"HANZO_API_KEY\"],\n)`,\n },\n ],\n },\n {\n slug: 'typescript',\n name: 'TypeScript',\n description: 'Use Hanzo AI in TypeScript and Node.js with the OpenAI SDK, Vercel AI SDK, or raw fetch. Full type safety and async/streaming support.',\n category: 'language',\n icon: '🟦',\n upstream: 'https://github.com/microsoft/TypeScript',\n creator: 'Microsoft',\n creatorUrl: 'https://typescriptlang.org',\n license: 'Apache-2.0',\n examples: [\n {\n lang: 'typescript',\n label: 'OpenAI SDK',\n code: `npm install openai\n\nimport OpenAI from \"openai\";\n\nconst client = new OpenAI({\n baseURL: \"https://api.hanzo.ai/v1\",\n apiKey: process.env.HANZO_API_KEY,\n});\n\nconst response = await client.chat.completions.create({\n model: \"zen4-pro\",\n messages: [{ role: \"user\", content: \"Hello!\" }],\n});\nconsole.log(response.choices[0].message.content);`,\n },\n {\n lang: 'typescript',\n label: 'Streaming',\n code: `const stream = await client.chat.completions.create({\n model: \"zen4-pro\",\n messages: [{ role: \"user\", content: \"Stream this\" }],\n stream: true,\n});\n\nfor await (const chunk of stream) {\n process.stdout.write(chunk.choices[0]?.delta?.content ?? \"\");\n}`,\n },\n {\n lang: 'typescript',\n label: 'Next.js route',\n code: `// app/v1/generate/route.ts\nimport OpenAI from \"openai\";\nimport { NextResponse } from \"next/server\";\n\nconst client = new OpenAI({\n baseURL: \"https://api.hanzo.ai/v1\",\n apiKey: process.env.HANZO_API_KEY,\n});\n\nexport async function POST(req: Request) {\n const { prompt } = await req.json();\n const response = await client.chat.completions.create({\n model: \"zen4-pro\",\n messages: [{ role: \"user\", content: prompt }],\n });\n return NextResponse.json(response.choices[0].message);\n}`,\n },\n {\n lang: 'typescript',\n label: 'List models',\n code: `const models = await client.models.list();\nconsole.log(\\`Available: \\${models.data.length} models\\`);\nmodels.data.slice(0, 5).forEach((m) => console.log(m.id));`,\n },\n ],\n },\n {\n slug: 'go',\n name: 'Go',\n description: 'Use Hanzo AI in Go using the official OpenAI Go client or any OpenAI-compatible Go library. Hanzo\\'s standard REST API works with all HTTP clients.',\n category: 'language',\n icon: '🐹',\n upstream: 'https://github.com/golang/go',\n creator: 'Go Authors / Google',\n creatorUrl: 'https://go.dev',\n license: 'BSD-3-Clause',\n examples: [\n {\n lang: 'go',\n label: 'OpenAI Go client',\n code: `go get github.com/openai/openai-go\n\npackage main\n\nimport (\n\t\"context\"\n\t\"fmt\"\n\t\"github.com/openai/openai-go\"\n\t\"github.com/openai/openai-go/option\"\n)\n\nfunc main() {\n\tclient := openai.NewClient(\n\t\toption.WithBaseURL(\"https://api.hanzo.ai/v1\"),\n\t\toption.WithAPIKey(\"your-hanzo-api-key\"),\n\t)\n\n\tresp, _ := client.Chat.Completions.New(context.Background(),\n\t\topenai.ChatCompletionNewParams{\n\t\t\tModel: openai.F(\"zen4-pro\"),\n\t\t\tMessages: openai.F([]openai.ChatCompletionMessageParamUnion{\n\t\t\t\topenai.UserMessage(\"Hello from Go!\"),\n\t\t\t}),\n\t\t},\n\t)\n\tfmt.Println(resp.Choices[0].Message.Content)\n}`,\n },\n {\n lang: 'go',\n label: 'Raw HTTP client',\n code: `package main\n\nimport (\n\t\"bytes\"\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"io\"\n\t\"net/http\"\n\t\"os\"\n)\n\nfunc main() {\n\tbody, _ := json.Marshal(map[string]any{\n\t\t\"model\": \"zen4-pro\",\n\t\t\"messages\": []map[string]string{{\"role\": \"user\", \"content\": \"Hello!\"}},\n\t})\n\n\treq, _ := http.NewRequest(\"POST\", \"https://api.hanzo.ai/v1/chat/completions\", bytes.NewReader(body))\n\treq.Header.Set(\"Authorization\", \"Bearer \"+os.Getenv(\"HANZO_API_KEY\"))\n\treq.Header.Set(\"Content-Type\", \"application/json\")\n\n\tresp, _ := http.DefaultClient.Do(req)\n\tdefer resp.Body.Close()\n\tio.Copy(os.Stdout, resp.Body)\n\tfmt.Println()\n}`,\n },\n {\n lang: 'go',\n label: 'Streaming',\n code: `stream, _ := client.Chat.Completions.NewStreaming(context.Background(),\n\topenai.ChatCompletionNewParams{\n\t\tModel: openai.F(\"zen4-pro\"),\n\t\tMessages: openai.F([]openai.ChatCompletionMessageParamUnion{\n\t\t\topenai.UserMessage(\"Write a poem\"),\n\t\t}),\n\t},\n)\ndefer stream.Close()\n\nfor stream.Next() {\n\tchunk := stream.Current()\n\tif len(chunk.Choices) > 0 {\n\t\tfmt.Print(chunk.Choices[0].Delta.Content)\n\t}\n}`,\n },\n {\n lang: 'bash',\n label: 'Environment',\n code: `export HANZO_API_KEY=\"your-hanzo-api-key\"\ngo run main.go`,\n },\n ],\n },\n {\n slug: 'rust',\n name: 'Rust',\n description: 'Use Hanzo AI in Rust via the async-openai crate or raw reqwest HTTP calls. Full async support with Tokio, streaming, and type-safe API access.',\n category: 'language',\n icon: '🦀',\n upstream: 'https://github.com/rust-lang/rust',\n creator: 'Rust Foundation',\n creatorUrl: 'https://rust-lang.org',\n license: 'MIT / Apache-2.0',\n examples: [\n {\n lang: 'toml',\n label: 'Cargo.toml',\n code: `[dependencies]\nasync-openai = \"0.26\"\ntokio = { version = \"1\", features = [\"full\"] }`,\n },\n {\n lang: 'rust',\n label: 'async-openai',\n code: `use async_openai::{config::OpenAIConfig, Client, types::*};\n\n#[tokio::main]\nasync fn main() {\n let config = OpenAIConfig::new()\n .with_api_base(\"https://api.hanzo.ai/v1\")\n .with_api_key(std::env::var(\"HANZO_API_KEY\").unwrap());\n\n let client = Client::with_config(config);\n\n let request = CreateChatCompletionRequestArgs::default()\n .model(\"zen4-pro\")\n .messages([ChatCompletionRequestUserMessageArgs::default()\n .content(\"Hello from Rust!\")\n .build()\n .unwrap()\n .into()])\n .build()\n .unwrap();\n\n let response = client.chat().create(request).await.unwrap();\n println!(\"{}\", response.choices[0].message.content.as_ref().unwrap());\n}`,\n },\n {\n lang: 'rust',\n label: 'reqwest raw HTTP',\n code: `use reqwest::Client;\nuse serde_json::json;\n\n#[tokio::main]\nasync fn main() {\n let client = Client::new();\n let resp = client\n .post(\"https://api.hanzo.ai/v1/chat/completions\")\n .bearer_auth(std::env::var(\"HANZO_API_KEY\").unwrap())\n .json(&json!({\n \"model\": \"zen4-pro\",\n \"messages\": [{\"role\": \"user\", \"content\": \"Hello!\"}]\n }))\n .send()\n .await\n .unwrap();\n println!(\"{}\", resp.text().await.unwrap());\n}`,\n },\n {\n lang: 'bash',\n label: 'Build and run',\n code: `export HANZO_API_KEY=\"your-hanzo-api-key\"\ncargo build --release\n./target/release/my-ai-app`,\n },\n ],\n },\n];\nexport const INTEGRATION_CATEGORIES = {\n sdk: 'AI SDKs',\n framework: 'Frameworks',\n platform: 'Platforms & Editors',\n infra: 'Infrastructure',\n language: 'Languages',\n};\nexport function getIntegration(slug) {\n return INTEGRATIONS.find((i) => i.slug === slug);\n}\nexport function getIntegrationsByCategory(category) {\n return INTEGRATIONS.filter((i) => i.category === category);\n}\n"],"x_google_ignoreList":[0],"mappings":"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"}
|
|
@@ -42,12 +42,12 @@
|
|
|
42
42
|
height: 100dvh;
|
|
43
43
|
}
|
|
44
44
|
</style>
|
|
45
|
-
<script type="module" crossorigin src="/assets/index-
|
|
45
|
+
<script type="module" crossorigin src="/assets/index-CWfH_-pI.js"></script>
|
|
46
46
|
<link rel="modulepreload" crossorigin href="/assets/rolldown-runtime-B0Z9INg1.js">
|
|
47
47
|
<link rel="modulepreload" crossorigin href="/assets/react-DIaL9_ob.js">
|
|
48
48
|
<link rel="modulepreload" crossorigin href="/assets/instrument-CmZcxFxx.js">
|
|
49
49
|
<link rel="modulepreload" crossorigin href="/assets/catalog-BM2B7gTj.js">
|
|
50
|
-
<link rel="stylesheet" crossorigin href="/assets/index-
|
|
50
|
+
<link rel="stylesheet" crossorigin href="/assets/index-CngqRawd.css">
|
|
51
51
|
</head>
|
|
52
52
|
<body>
|
|
53
53
|
<div id="root"></div>
|
package/dist/auth/index.html
CHANGED
|
@@ -42,12 +42,12 @@
|
|
|
42
42
|
height: 100dvh;
|
|
43
43
|
}
|
|
44
44
|
</style>
|
|
45
|
-
<script type="module" crossorigin src="/assets/index-
|
|
45
|
+
<script type="module" crossorigin src="/assets/index-CWfH_-pI.js"></script>
|
|
46
46
|
<link rel="modulepreload" crossorigin href="/assets/rolldown-runtime-B0Z9INg1.js">
|
|
47
47
|
<link rel="modulepreload" crossorigin href="/assets/react-DIaL9_ob.js">
|
|
48
48
|
<link rel="modulepreload" crossorigin href="/assets/instrument-CmZcxFxx.js">
|
|
49
49
|
<link rel="modulepreload" crossorigin href="/assets/catalog-BM2B7gTj.js">
|
|
50
|
-
<link rel="stylesheet" crossorigin href="/assets/index-
|
|
50
|
+
<link rel="stylesheet" crossorigin href="/assets/index-CngqRawd.css">
|
|
51
51
|
</head>
|
|
52
52
|
<body>
|
|
53
53
|
<div id="root"></div>
|
package/dist/bots/index.html
CHANGED
|
@@ -42,12 +42,12 @@
|
|
|
42
42
|
height: 100dvh;
|
|
43
43
|
}
|
|
44
44
|
</style>
|
|
45
|
-
<script type="module" crossorigin src="/assets/index-
|
|
45
|
+
<script type="module" crossorigin src="/assets/index-CWfH_-pI.js"></script>
|
|
46
46
|
<link rel="modulepreload" crossorigin href="/assets/rolldown-runtime-B0Z9INg1.js">
|
|
47
47
|
<link rel="modulepreload" crossorigin href="/assets/react-DIaL9_ob.js">
|
|
48
48
|
<link rel="modulepreload" crossorigin href="/assets/instrument-CmZcxFxx.js">
|
|
49
49
|
<link rel="modulepreload" crossorigin href="/assets/catalog-BM2B7gTj.js">
|
|
50
|
-
<link rel="stylesheet" crossorigin href="/assets/index-
|
|
50
|
+
<link rel="stylesheet" crossorigin href="/assets/index-CngqRawd.css">
|
|
51
51
|
</head>
|
|
52
52
|
<body>
|
|
53
53
|
<div id="root"></div>
|
package/dist/cal/index.html
CHANGED
|
@@ -42,12 +42,12 @@
|
|
|
42
42
|
height: 100dvh;
|
|
43
43
|
}
|
|
44
44
|
</style>
|
|
45
|
-
<script type="module" crossorigin src="/assets/index-
|
|
45
|
+
<script type="module" crossorigin src="/assets/index-CWfH_-pI.js"></script>
|
|
46
46
|
<link rel="modulepreload" crossorigin href="/assets/rolldown-runtime-B0Z9INg1.js">
|
|
47
47
|
<link rel="modulepreload" crossorigin href="/assets/react-DIaL9_ob.js">
|
|
48
48
|
<link rel="modulepreload" crossorigin href="/assets/instrument-CmZcxFxx.js">
|
|
49
49
|
<link rel="modulepreload" crossorigin href="/assets/catalog-BM2B7gTj.js">
|
|
50
|
-
<link rel="stylesheet" crossorigin href="/assets/index-
|
|
50
|
+
<link rel="stylesheet" crossorigin href="/assets/index-CngqRawd.css">
|
|
51
51
|
</head>
|
|
52
52
|
<body>
|
|
53
53
|
<div id="root"></div>
|
package/dist/calendar/index.html
CHANGED
|
@@ -42,12 +42,12 @@
|
|
|
42
42
|
height: 100dvh;
|
|
43
43
|
}
|
|
44
44
|
</style>
|
|
45
|
-
<script type="module" crossorigin src="/assets/index-
|
|
45
|
+
<script type="module" crossorigin src="/assets/index-CWfH_-pI.js"></script>
|
|
46
46
|
<link rel="modulepreload" crossorigin href="/assets/rolldown-runtime-B0Z9INg1.js">
|
|
47
47
|
<link rel="modulepreload" crossorigin href="/assets/react-DIaL9_ob.js">
|
|
48
48
|
<link rel="modulepreload" crossorigin href="/assets/instrument-CmZcxFxx.js">
|
|
49
49
|
<link rel="modulepreload" crossorigin href="/assets/catalog-BM2B7gTj.js">
|
|
50
|
-
<link rel="stylesheet" crossorigin href="/assets/index-
|
|
50
|
+
<link rel="stylesheet" crossorigin href="/assets/index-CngqRawd.css">
|
|
51
51
|
</head>
|
|
52
52
|
<body>
|
|
53
53
|
<div id="root"></div>
|
|
@@ -42,12 +42,12 @@
|
|
|
42
42
|
height: 100dvh;
|
|
43
43
|
}
|
|
44
44
|
</style>
|
|
45
|
-
<script type="module" crossorigin src="/assets/index-
|
|
45
|
+
<script type="module" crossorigin src="/assets/index-CWfH_-pI.js"></script>
|
|
46
46
|
<link rel="modulepreload" crossorigin href="/assets/rolldown-runtime-B0Z9INg1.js">
|
|
47
47
|
<link rel="modulepreload" crossorigin href="/assets/react-DIaL9_ob.js">
|
|
48
48
|
<link rel="modulepreload" crossorigin href="/assets/instrument-CmZcxFxx.js">
|
|
49
49
|
<link rel="modulepreload" crossorigin href="/assets/catalog-BM2B7gTj.js">
|
|
50
|
-
<link rel="stylesheet" crossorigin href="/assets/index-
|
|
50
|
+
<link rel="stylesheet" crossorigin href="/assets/index-CngqRawd.css">
|
|
51
51
|
</head>
|
|
52
52
|
<body>
|
|
53
53
|
<div id="root"></div>
|
|
@@ -42,12 +42,12 @@
|
|
|
42
42
|
height: 100dvh;
|
|
43
43
|
}
|
|
44
44
|
</style>
|
|
45
|
-
<script type="module" crossorigin src="/assets/index-
|
|
45
|
+
<script type="module" crossorigin src="/assets/index-CWfH_-pI.js"></script>
|
|
46
46
|
<link rel="modulepreload" crossorigin href="/assets/rolldown-runtime-B0Z9INg1.js">
|
|
47
47
|
<link rel="modulepreload" crossorigin href="/assets/react-DIaL9_ob.js">
|
|
48
48
|
<link rel="modulepreload" crossorigin href="/assets/instrument-CmZcxFxx.js">
|
|
49
49
|
<link rel="modulepreload" crossorigin href="/assets/catalog-BM2B7gTj.js">
|
|
50
|
-
<link rel="stylesheet" crossorigin href="/assets/index-
|
|
50
|
+
<link rel="stylesheet" crossorigin href="/assets/index-CngqRawd.css">
|
|
51
51
|
</head>
|
|
52
52
|
<body>
|
|
53
53
|
<div id="root"></div>
|
|
@@ -42,12 +42,12 @@
|
|
|
42
42
|
height: 100dvh;
|
|
43
43
|
}
|
|
44
44
|
</style>
|
|
45
|
-
<script type="module" crossorigin src="/assets/index-
|
|
45
|
+
<script type="module" crossorigin src="/assets/index-CWfH_-pI.js"></script>
|
|
46
46
|
<link rel="modulepreload" crossorigin href="/assets/rolldown-runtime-B0Z9INg1.js">
|
|
47
47
|
<link rel="modulepreload" crossorigin href="/assets/react-DIaL9_ob.js">
|
|
48
48
|
<link rel="modulepreload" crossorigin href="/assets/instrument-CmZcxFxx.js">
|
|
49
49
|
<link rel="modulepreload" crossorigin href="/assets/catalog-BM2B7gTj.js">
|
|
50
|
-
<link rel="stylesheet" crossorigin href="/assets/index-
|
|
50
|
+
<link rel="stylesheet" crossorigin href="/assets/index-CngqRawd.css">
|
|
51
51
|
</head>
|
|
52
52
|
<body>
|
|
53
53
|
<div id="root"></div>
|
|
@@ -42,12 +42,12 @@
|
|
|
42
42
|
height: 100dvh;
|
|
43
43
|
}
|
|
44
44
|
</style>
|
|
45
|
-
<script type="module" crossorigin src="/assets/index-
|
|
45
|
+
<script type="module" crossorigin src="/assets/index-CWfH_-pI.js"></script>
|
|
46
46
|
<link rel="modulepreload" crossorigin href="/assets/rolldown-runtime-B0Z9INg1.js">
|
|
47
47
|
<link rel="modulepreload" crossorigin href="/assets/react-DIaL9_ob.js">
|
|
48
48
|
<link rel="modulepreload" crossorigin href="/assets/instrument-CmZcxFxx.js">
|
|
49
49
|
<link rel="modulepreload" crossorigin href="/assets/catalog-BM2B7gTj.js">
|
|
50
|
-
<link rel="stylesheet" crossorigin href="/assets/index-
|
|
50
|
+
<link rel="stylesheet" crossorigin href="/assets/index-CngqRawd.css">
|
|
51
51
|
</head>
|
|
52
52
|
<body>
|
|
53
53
|
<div id="root"></div>
|
|
@@ -42,12 +42,12 @@
|
|
|
42
42
|
height: 100dvh;
|
|
43
43
|
}
|
|
44
44
|
</style>
|
|
45
|
-
<script type="module" crossorigin src="/assets/index-
|
|
45
|
+
<script type="module" crossorigin src="/assets/index-CWfH_-pI.js"></script>
|
|
46
46
|
<link rel="modulepreload" crossorigin href="/assets/rolldown-runtime-B0Z9INg1.js">
|
|
47
47
|
<link rel="modulepreload" crossorigin href="/assets/react-DIaL9_ob.js">
|
|
48
48
|
<link rel="modulepreload" crossorigin href="/assets/instrument-CmZcxFxx.js">
|
|
49
49
|
<link rel="modulepreload" crossorigin href="/assets/catalog-BM2B7gTj.js">
|
|
50
|
-
<link rel="stylesheet" crossorigin href="/assets/index-
|
|
50
|
+
<link rel="stylesheet" crossorigin href="/assets/index-CngqRawd.css">
|
|
51
51
|
</head>
|
|
52
52
|
<body>
|
|
53
53
|
<div id="root"></div>
|
|
@@ -42,12 +42,12 @@
|
|
|
42
42
|
height: 100dvh;
|
|
43
43
|
}
|
|
44
44
|
</style>
|
|
45
|
-
<script type="module" crossorigin src="/assets/index-
|
|
45
|
+
<script type="module" crossorigin src="/assets/index-CWfH_-pI.js"></script>
|
|
46
46
|
<link rel="modulepreload" crossorigin href="/assets/rolldown-runtime-B0Z9INg1.js">
|
|
47
47
|
<link rel="modulepreload" crossorigin href="/assets/react-DIaL9_ob.js">
|
|
48
48
|
<link rel="modulepreload" crossorigin href="/assets/instrument-CmZcxFxx.js">
|
|
49
49
|
<link rel="modulepreload" crossorigin href="/assets/catalog-BM2B7gTj.js">
|
|
50
|
-
<link rel="stylesheet" crossorigin href="/assets/index-
|
|
50
|
+
<link rel="stylesheet" crossorigin href="/assets/index-CngqRawd.css">
|
|
51
51
|
</head>
|
|
52
52
|
<body>
|
|
53
53
|
<div id="root"></div>
|
|
@@ -42,12 +42,12 @@
|
|
|
42
42
|
height: 100dvh;
|
|
43
43
|
}
|
|
44
44
|
</style>
|
|
45
|
-
<script type="module" crossorigin src="/assets/index-
|
|
45
|
+
<script type="module" crossorigin src="/assets/index-CWfH_-pI.js"></script>
|
|
46
46
|
<link rel="modulepreload" crossorigin href="/assets/rolldown-runtime-B0Z9INg1.js">
|
|
47
47
|
<link rel="modulepreload" crossorigin href="/assets/react-DIaL9_ob.js">
|
|
48
48
|
<link rel="modulepreload" crossorigin href="/assets/instrument-CmZcxFxx.js">
|
|
49
49
|
<link rel="modulepreload" crossorigin href="/assets/catalog-BM2B7gTj.js">
|
|
50
|
-
<link rel="stylesheet" crossorigin href="/assets/index-
|
|
50
|
+
<link rel="stylesheet" crossorigin href="/assets/index-CngqRawd.css">
|
|
51
51
|
</head>
|
|
52
52
|
<body>
|
|
53
53
|
<div id="root"></div>
|
|
@@ -42,12 +42,12 @@
|
|
|
42
42
|
height: 100dvh;
|
|
43
43
|
}
|
|
44
44
|
</style>
|
|
45
|
-
<script type="module" crossorigin src="/assets/index-
|
|
45
|
+
<script type="module" crossorigin src="/assets/index-CWfH_-pI.js"></script>
|
|
46
46
|
<link rel="modulepreload" crossorigin href="/assets/rolldown-runtime-B0Z9INg1.js">
|
|
47
47
|
<link rel="modulepreload" crossorigin href="/assets/react-DIaL9_ob.js">
|
|
48
48
|
<link rel="modulepreload" crossorigin href="/assets/instrument-CmZcxFxx.js">
|
|
49
49
|
<link rel="modulepreload" crossorigin href="/assets/catalog-BM2B7gTj.js">
|
|
50
|
-
<link rel="stylesheet" crossorigin href="/assets/index-
|
|
50
|
+
<link rel="stylesheet" crossorigin href="/assets/index-CngqRawd.css">
|
|
51
51
|
</head>
|
|
52
52
|
<body>
|
|
53
53
|
<div id="root"></div>
|
|
@@ -42,12 +42,12 @@
|
|
|
42
42
|
height: 100dvh;
|
|
43
43
|
}
|
|
44
44
|
</style>
|
|
45
|
-
<script type="module" crossorigin src="/assets/index-
|
|
45
|
+
<script type="module" crossorigin src="/assets/index-CWfH_-pI.js"></script>
|
|
46
46
|
<link rel="modulepreload" crossorigin href="/assets/rolldown-runtime-B0Z9INg1.js">
|
|
47
47
|
<link rel="modulepreload" crossorigin href="/assets/react-DIaL9_ob.js">
|
|
48
48
|
<link rel="modulepreload" crossorigin href="/assets/instrument-CmZcxFxx.js">
|
|
49
49
|
<link rel="modulepreload" crossorigin href="/assets/catalog-BM2B7gTj.js">
|
|
50
|
-
<link rel="stylesheet" crossorigin href="/assets/index-
|
|
50
|
+
<link rel="stylesheet" crossorigin href="/assets/index-CngqRawd.css">
|
|
51
51
|
</head>
|
|
52
52
|
<body>
|
|
53
53
|
<div id="root"></div>
|
|
@@ -42,12 +42,12 @@
|
|
|
42
42
|
height: 100dvh;
|
|
43
43
|
}
|
|
44
44
|
</style>
|
|
45
|
-
<script type="module" crossorigin src="/assets/index-
|
|
45
|
+
<script type="module" crossorigin src="/assets/index-CWfH_-pI.js"></script>
|
|
46
46
|
<link rel="modulepreload" crossorigin href="/assets/rolldown-runtime-B0Z9INg1.js">
|
|
47
47
|
<link rel="modulepreload" crossorigin href="/assets/react-DIaL9_ob.js">
|
|
48
48
|
<link rel="modulepreload" crossorigin href="/assets/instrument-CmZcxFxx.js">
|
|
49
49
|
<link rel="modulepreload" crossorigin href="/assets/catalog-BM2B7gTj.js">
|
|
50
|
-
<link rel="stylesheet" crossorigin href="/assets/index-
|
|
50
|
+
<link rel="stylesheet" crossorigin href="/assets/index-CngqRawd.css">
|
|
51
51
|
</head>
|
|
52
52
|
<body>
|
|
53
53
|
<div id="root"></div>
|
|
@@ -42,12 +42,12 @@
|
|
|
42
42
|
height: 100dvh;
|
|
43
43
|
}
|
|
44
44
|
</style>
|
|
45
|
-
<script type="module" crossorigin src="/assets/index-
|
|
45
|
+
<script type="module" crossorigin src="/assets/index-CWfH_-pI.js"></script>
|
|
46
46
|
<link rel="modulepreload" crossorigin href="/assets/rolldown-runtime-B0Z9INg1.js">
|
|
47
47
|
<link rel="modulepreload" crossorigin href="/assets/react-DIaL9_ob.js">
|
|
48
48
|
<link rel="modulepreload" crossorigin href="/assets/instrument-CmZcxFxx.js">
|
|
49
49
|
<link rel="modulepreload" crossorigin href="/assets/catalog-BM2B7gTj.js">
|
|
50
|
-
<link rel="stylesheet" crossorigin href="/assets/index-
|
|
50
|
+
<link rel="stylesheet" crossorigin href="/assets/index-CngqRawd.css">
|
|
51
51
|
</head>
|
|
52
52
|
<body>
|
|
53
53
|
<div id="root"></div>
|
|
@@ -42,12 +42,12 @@
|
|
|
42
42
|
height: 100dvh;
|
|
43
43
|
}
|
|
44
44
|
</style>
|
|
45
|
-
<script type="module" crossorigin src="/assets/index-
|
|
45
|
+
<script type="module" crossorigin src="/assets/index-CWfH_-pI.js"></script>
|
|
46
46
|
<link rel="modulepreload" crossorigin href="/assets/rolldown-runtime-B0Z9INg1.js">
|
|
47
47
|
<link rel="modulepreload" crossorigin href="/assets/react-DIaL9_ob.js">
|
|
48
48
|
<link rel="modulepreload" crossorigin href="/assets/instrument-CmZcxFxx.js">
|
|
49
49
|
<link rel="modulepreload" crossorigin href="/assets/catalog-BM2B7gTj.js">
|
|
50
|
-
<link rel="stylesheet" crossorigin href="/assets/index-
|
|
50
|
+
<link rel="stylesheet" crossorigin href="/assets/index-CngqRawd.css">
|
|
51
51
|
</head>
|
|
52
52
|
<body>
|
|
53
53
|
<div id="root"></div>
|
|
@@ -42,12 +42,12 @@
|
|
|
42
42
|
height: 100dvh;
|
|
43
43
|
}
|
|
44
44
|
</style>
|
|
45
|
-
<script type="module" crossorigin src="/assets/index-
|
|
45
|
+
<script type="module" crossorigin src="/assets/index-CWfH_-pI.js"></script>
|
|
46
46
|
<link rel="modulepreload" crossorigin href="/assets/rolldown-runtime-B0Z9INg1.js">
|
|
47
47
|
<link rel="modulepreload" crossorigin href="/assets/react-DIaL9_ob.js">
|
|
48
48
|
<link rel="modulepreload" crossorigin href="/assets/instrument-CmZcxFxx.js">
|
|
49
49
|
<link rel="modulepreload" crossorigin href="/assets/catalog-BM2B7gTj.js">
|
|
50
|
-
<link rel="stylesheet" crossorigin href="/assets/index-
|
|
50
|
+
<link rel="stylesheet" crossorigin href="/assets/index-CngqRawd.css">
|
|
51
51
|
</head>
|
|
52
52
|
<body>
|
|
53
53
|
<div id="root"></div>
|
|
@@ -42,12 +42,12 @@
|
|
|
42
42
|
height: 100dvh;
|
|
43
43
|
}
|
|
44
44
|
</style>
|
|
45
|
-
<script type="module" crossorigin src="/assets/index-
|
|
45
|
+
<script type="module" crossorigin src="/assets/index-CWfH_-pI.js"></script>
|
|
46
46
|
<link rel="modulepreload" crossorigin href="/assets/rolldown-runtime-B0Z9INg1.js">
|
|
47
47
|
<link rel="modulepreload" crossorigin href="/assets/react-DIaL9_ob.js">
|
|
48
48
|
<link rel="modulepreload" crossorigin href="/assets/instrument-CmZcxFxx.js">
|
|
49
49
|
<link rel="modulepreload" crossorigin href="/assets/catalog-BM2B7gTj.js">
|
|
50
|
-
<link rel="stylesheet" crossorigin href="/assets/index-
|
|
50
|
+
<link rel="stylesheet" crossorigin href="/assets/index-CngqRawd.css">
|
|
51
51
|
</head>
|
|
52
52
|
<body>
|
|
53
53
|
<div id="root"></div>
|