[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M752XK1JS2XC5BF31EVA06XP":3,"skill-same:01M752XK1JS2XC5BF31EVA06XP":46},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":16,"categories":17,"keywords":18,"publishedAt":19,"linkOnly":20,"markdownContent":21,"markdownBody":22,"frontMatter":23,"refName":24,"commitSha":25,"skillDirectory":26,"forksCount":14,"repositoryHtmlUrl":27,"repositoryHomepageUrl":6,"ownerHtmlUrl":28,"ownerBlogUrl":29,"ownerDescription":30,"updatedAt":31,"install":32,"resources":45},"01M752XK1JS2XC5BF31EVA06XP","hl-build-llm-app",null,"Build a complete LLM text generation app running on Hailo-10H.","TejasLamba2006\u002Fhailo-apps","TejasLamba2006","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F73745640?v=4","01M752WBF8KHM6KJTEQXTJZR9K","Tejas Lamba","01M752WBGE2NS66C4ENRHWY36S",0,"MIT","https:\u002F\u002Fgithub.com\u002FTejasLamba2006\u002Fhailo-apps\u002Fblob\u002Fmain\u002F.github\u002Fskills\u002Fhl-build-llm-app\u002FSKILL.md",[],[],"2026-11-12 13:55:43",false,"---\nname: hl-build-llm-app\ndescription: Build a complete LLM text generation app running on Hailo-10H.\n---\n\n# Skill: Build LLM Chat Application\n\nBuild a complete LLM text generation app running on Hailo-10H.\n\n## When This Skill Is Loaded\n\n- User wants **text generation** or **chat** without vision\n- User mentions: LLM, chat, chatbot, text generation, Q&A\n- User needs on-device language model inference (NOT vision — that's VLM)\n\n## Reference Implementation\n\nStudy `hailo_apps\u002Fpython\u002Fgen_ai_apps\u002Fsimple_llm_chat\u002Fsimple_llm_chat.py` — the canonical LLM app.\n\n## Build Process\n\n### Step 1: Create App Directory\n\nCreate the app directory:\n\n```\nhailo_apps\u002Fpython\u002F\u003Ctype>\u002F\u003Capp_name>\u002F\n├── app.yaml              # App manifest (type: gen_ai)\n├── run.sh                # Launch wrapper\n├── __init__.py\n├── \u003Capp_name>.py         # Main app\n└── README.md             # Usage documentation (REQUIRED — never skip)\n```\n\nCreate `app.yaml` with `type: gen_ai` and `run.sh` wrapper.\nDo NOT register in `defines.py` or `resources_config.yaml`.\n\n### Step 2: Build Main App\n\n```python\nimport signal\nimport sys\n\nfrom hailo_platform import VDevice\nfrom hailo_platform.genai import LLM\n\nfrom hailo_apps.python.core.common.hailo_logger import get_logger\nfrom hailo_apps.python.core.common.core import resolve_hef_path\nfrom hailo_apps.python.core.common.parser import get_standalone_parser\nfrom hailo_apps.python.core.common.defines import (\n    SHARED_VDEVICE_GROUP_ID,\n    HAILO10H_ARCH,\n)\n\nlogger = get_logger(__name__)\n\nAPP_NAME = \"my_llm_app\"\n\nSYSTEM_PROMPT = \"You are a helpful assistant.\"\n\n\ndef format_prompt(system_prompt, user_text):\n    return [\n        {\"role\": \"system\", \"content\": [{\"type\": \"text\", \"text\": system_prompt}]},\n        {\"role\": \"user\", \"content\": [{\"type\": \"text\", \"text\": user_text}]},\n    ]\n\n\ndef main():\n    parser = get_standalone_parser()\n    parser.add_argument(\"--max-tokens\", type=int, default=200, help=\"Max tokens to generate\")\n    parser.add_argument(\"--temperature\", type=float, default=0.1, help=\"Sampling temperature\")\n    parser.add_argument(\"--system-prompt\", type=str, default=SYSTEM_PROMPT, help=\"System prompt\")\n    args = parser.parse_args()\n\n    # Signal handling\n    running = True\n    def signal_handler(sig, frame):\n        nonlocal running\n        running = False\n        print(\"\\nShutting down...\")\n    signal.signal(signal.SIGINT, signal_handler)\n\n    # Device and model\n    params = VDevice.create_params()\n    params.group_id = SHARED_VDEVICE_GROUP_ID\n    vdevice = VDevice(params)\n\n    hef_path = resolve_hef_path(args.hef_path, APP_NAME, arch=HAILO10H_ARCH)\n    llm = LLM(vdevice, str(hef_path))\n\n    logger.info(\"LLM loaded: %s\", hef_path)\n    print(f\"Chat started. Type 'quit' to exit.\\n\")\n\n    try:\n        while running:\n            try:\n                user_input = input(\"You: \").strip()\n            except EOFError:\n                break\n            if not user_input or user_input.lower() in (\"quit\", \"exit\", \"q\"):\n                break\n\n            prompt = format_prompt(args.system_prompt, user_input)\n            response = llm.generate_all(\n                prompt=prompt,\n                temperature=args.temperature,\n                seed=42,\n                max_generated_tokens=args.max_tokens,\n            )\n            print(f\"Assistant: {response}\\n\")\n            llm.clear_context()\n    finally:\n        llm.release()\n        vdevice.release()\n        logger.info(\"Cleanup complete\")\n\n\nif __name__ == \"__main__\":\n    main()\n```\n\n### Step 4: Validate\n\n```bash\npython3 .github\u002Fscripts\u002Fvalidate_app.py hailo_apps\u002Fpython\u002Fgen_ai_apps\u002Fmy_llm_app --smoke-test\n```\n\n## Critical Conventions\n\n1. **Hailo-10H only**: Use `HAILO10H_ARCH` — LLM is not available on Hailo-8\u002F8L\n2. **VDevice sharing**: `params.group_id = SHARED_VDEVICE_GROUP_ID`\n3. **Prompt format**: `[{\"role\": \"...\", \"content\": [{\"type\": \"text\", \"text\": \"...\"}]}]`\n4. **Clear context**: Always `llm.clear_context()` after each generation\n5. **Cleanup order**: `llm.clear_context()` → `llm.release()` → `vdevice.release()` in `finally`\n6. **End token**: Filter `\u003C|im_end|>` from streaming output\n7. **Token streaming**: `with llm.generate(...) as gen: for chunk in gen:` for real-time output\n8. **HEF resolution**: `resolve_hef_path(path, APP_NAME, arch=HAILO10H_ARCH)`\n\n## Streaming Pattern (Alternative)\n\n```python\nprint(\"Assistant: \", end=\"\", flush=True)\nwith llm.generate(prompt=prompt, temperature=0.1, max_generated_tokens=200) as gen:\n    for chunk in gen:\n        if chunk != \"\u003C|im_end|>\":\n            print(chunk, end=\"\", flush=True)\nprint()\nllm.clear_context()\n```\n\n","# Skill: Build LLM Chat Application\n\nBuild a complete LLM text generation app running on Hailo-10H.\n\n## When This Skill Is Loaded\n\n- User wants **text generation** or **chat** without vision\n- User mentions: LLM, chat, chatbot, text generation, Q&A\n- User needs on-device language model inference (NOT vision — that's VLM)\n\n## Reference Implementation\n\nStudy `hailo_apps\u002Fpython\u002Fgen_ai_apps\u002Fsimple_llm_chat\u002Fsimple_llm_chat.py` — the canonical LLM app.\n\n## Build Process\n\n### Step 1: Create App Directory\n\nCreate the app directory:\n\n```\nhailo_apps\u002Fpython\u002F\u003Ctype>\u002F\u003Capp_name>\u002F\n├── app.yaml              # App manifest (type: gen_ai)\n├── run.sh                # Launch wrapper\n├── __init__.py\n├── \u003Capp_name>.py         # Main app\n└── README.md             # Usage documentation (REQUIRED — never skip)\n```\n\nCreate `app.yaml` with `type: gen_ai` and `run.sh` wrapper.\nDo NOT register in `defines.py` or `resources_config.yaml`.\n\n### Step 2: Build Main App\n\n```python\nimport signal\nimport sys\n\nfrom hailo_platform import VDevice\nfrom hailo_platform.genai import LLM\n\nfrom hailo_apps.python.core.common.hailo_logger import get_logger\nfrom hailo_apps.python.core.common.core import resolve_hef_path\nfrom hailo_apps.python.core.common.parser import get_standalone_parser\nfrom hailo_apps.python.core.common.defines import (\n    SHARED_VDEVICE_GROUP_ID,\n    HAILO10H_ARCH,\n)\n\nlogger = get_logger(__name__)\n\nAPP_NAME = \"my_llm_app\"\n\nSYSTEM_PROMPT = \"You are a helpful assistant.\"\n\n\ndef format_prompt(system_prompt, user_text):\n    return [\n        {\"role\": \"system\", \"content\": [{\"type\": \"text\", \"text\": system_prompt}]},\n        {\"role\": \"user\", \"content\": [{\"type\": \"text\", \"text\": user_text}]},\n    ]\n\n\ndef main():\n    parser = get_standalone_parser()\n    parser.add_argument(\"--max-tokens\", type=int, default=200, help=\"Max tokens to generate\")\n    parser.add_argument(\"--temperature\", type=float, default=0.1, help=\"Sampling temperature\")\n    parser.add_argument(\"--system-prompt\", type=str, default=SYSTEM_PROMPT, help=\"System prompt\")\n    args = parser.parse_args()\n\n    # Signal handling\n    running = True\n    def signal_handler(sig, frame):\n        nonlocal running\n        running = False\n        print(\"\\nShutting down...\")\n    signal.signal(signal.SIGINT, signal_handler)\n\n    # Device and model\n    params = VDevice.create_params()\n    params.group_id = SHARED_VDEVICE_GROUP_ID\n    vdevice = VDevice(params)\n\n    hef_path = resolve_hef_path(args.hef_path, APP_NAME, arch=HAILO10H_ARCH)\n    llm = LLM(vdevice, str(hef_path))\n\n    logger.info(\"LLM loaded: %s\", hef_path)\n    print(f\"Chat started. Type 'quit' to exit.\\n\")\n\n    try:\n        while running:\n            try:\n                user_input = input(\"You: \").strip()\n            except EOFError:\n                break\n            if not user_input or user_input.lower() in (\"quit\", \"exit\", \"q\"):\n                break\n\n            prompt = format_prompt(args.system_prompt, user_input)\n            response = llm.generate_all(\n                prompt=prompt,\n                temperature=args.temperature,\n                seed=42,\n                max_generated_tokens=args.max_tokens,\n            )\n            print(f\"Assistant: {response}\\n\")\n            llm.clear_context()\n    finally:\n        llm.release()\n        vdevice.release()\n        logger.info(\"Cleanup complete\")\n\n\nif __name__ == \"__main__\":\n    main()\n```\n\n### Step 4: Validate\n\n```bash\npython3 .github\u002Fscripts\u002Fvalidate_app.py hailo_apps\u002Fpython\u002Fgen_ai_apps\u002Fmy_llm_app --smoke-test\n```\n\n## Critical Conventions\n\n1. **Hailo-10H only**: Use `HAILO10H_ARCH` — LLM is not available on Hailo-8\u002F8L\n2. **VDevice sharing**: `params.group_id = SHARED_VDEVICE_GROUP_ID`\n3. **Prompt format**: `[{\"role\": \"...\", \"content\": [{\"type\": \"text\", \"text\": \"...\"}]}]`\n4. **Clear context**: Always `llm.clear_context()` after each generation\n5. **Cleanup order**: `llm.clear_context()` → `llm.release()` → `vdevice.release()` in `finally`\n6. **End token**: Filter `\u003C|im_end|>` from streaming output\n7. **Token streaming**: `with llm.generate(...) as gen: for chunk in gen:` for real-time output\n8. **HEF resolution**: `resolve_hef_path(path, APP_NAME, arch=HAILO10H_ARCH)`\n\n## Streaming Pattern (Alternative)\n\n```python\nprint(\"Assistant: \", end=\"\", flush=True)\nwith llm.generate(prompt=prompt, temperature=0.1, max_generated_tokens=200) as gen:\n    for chunk in gen:\n        if chunk != \"\u003C|im_end|>\":\n            print(chunk, end=\"\", flush=True)\nprint()\nllm.clear_context()\n```\n\n",{"name":5,"description":7},"main","9beb824677028b4974e90b0cc558b6fd6de3d935",".github\u002Fskills\u002Fhl-build-llm-app","https:\u002F\u002Fgithub.com\u002FTejasLamba2006\u002Fhailo-apps","https:\u002F\u002Fgithub.com\u002FTejasLamba2006","https:\u002F\u002Ftejas.is-a.dev\u002F","Rust | Java |  TypeScript ","2026-11-12 16:44:30",{"source":8,"skillName":5,"commands":33,"prompt":43,"zipAvailable":44},[34,37,40],{"tool":35,"command":36},"npx","npx skills add TejasLamba2006\u002Fhailo-apps --skill hl-build-llm-app",{"tool":38,"command":39},"bunx","bunx skills add TejasLamba2006\u002Fhailo-apps --skill hl-build-llm-app",{"tool":41,"command":42},"pnpm","pnpm dlx skills add TejasLamba2006\u002Fhailo-apps --skill hl-build-llm-app","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002FTejasLamba2006\u002Fhailo-apps\u002Fblob\u002Fmain\u002F.github\u002Fskills\u002Fhl-build-llm-app\u002FSKILL.md",true,[],[47,53,60,67,74,81],{"skillNo":48,"name":49,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":50,"categories":51,"keywords":52,"publishedAt":19},"01M752Y17N6R7ME2TRA2NNS5X3","hl-build-voice-app","https:\u002F\u002Fgithub.com\u002FTejasLamba2006\u002Fhailo-apps\u002Fblob\u002Fmain\u002F.github\u002Fskills\u002Fhl-build-voice-app\u002FSKILL.md",[],[],{"skillNo":54,"name":55,"nameZh":6,"description":56,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":57,"categories":58,"keywords":59,"publishedAt":19},"01M752XW3BPNVCM0823YAEP6YA","hl-build-vlm-app","Build a complete Vision-Language Model application that uses the Hailo-10H VLM for image understanding.","https:\u002F\u002Fgithub.com\u002FTejasLamba2006\u002Fhailo-apps\u002Fblob\u002Fmain\u002F.github\u002Fskills\u002Fhl-build-vlm-app\u002FSKILL.md",[],[],{"skillNo":61,"name":62,"nameZh":6,"description":63,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":64,"categories":65,"keywords":66,"publishedAt":19},"01M752XT54VT5E95QASFX7F8JR","hl-build-standalone-app","Build a complete standalone app using HailoInfer + OpenCV on Hailo-8\u002F8L\u002F10H.","https:\u002F\u002Fgithub.com\u002FTejasLamba2006\u002Fhailo-apps\u002Fblob\u002Fmain\u002F.github\u002Fskills\u002Fhl-build-standalone-app\u002FSKILL.md",[],[],{"skillNo":68,"name":69,"nameZh":6,"description":70,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":71,"categories":72,"keywords":73,"publishedAt":19},"01M752XNJFF5KT07AZAZ6N07BP","hl-build-pipeline-app","Build a complete GStreamer pipeline app for real-time video processing on Hailo-8\u002F8L\u002F10H.","https:\u002F\u002Fgithub.com\u002FTejasLamba2006\u002Fhailo-apps\u002Fblob\u002Fmain\u002F.github\u002Fskills\u002Fhl-build-pipeline-app\u002FSKILL.md",[],[],{"skillNo":75,"name":76,"nameZh":6,"description":77,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":78,"categories":79,"keywords":80,"publishedAt":19},"01M752XFTEGGYMFEWZVECY31HM","hl-build-agent-app","Build a complete agent app with LLM reasoning + tool execution on Hailo-10H.","https:\u002F\u002Fgithub.com\u002FTejasLamba2006\u002Fhailo-apps\u002Fblob\u002Fmain\u002F.github\u002Fskills\u002Fhl-build-agent-app\u002FSKILL.md",[],[],{"skillNo":82,"name":83,"nameZh":6,"description":84,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":85,"categories":86,"keywords":87,"publishedAt":19},"01M752XBWXEB5MRRHGAQBK6JHC","hl-validate","Validation at every phase gate.","https:\u002F\u002Fgithub.com\u002FTejasLamba2006\u002Fhailo-apps\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Fhl-validate\u002FSKILL.md",[],[]]