@try-works/dsh-model-as-tool 0.1.3 → 0.4.0

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.
Files changed (260) hide show
  1. package/bin/dsh-tool-mode-credentials.mjs +20 -0
  2. package/bin/dsh-tool-mode.mjs +202 -0
  3. package/catalog/desert-ant-models.json +693 -693
  4. package/client/client.model-tools.js +614 -0
  5. package/client/index.js +1717 -0
  6. package/lib/adapters/index.d.ts.map +1 -1
  7. package/lib/adapters/index.js +4 -4
  8. package/lib/bindings.d.ts.map +1 -1
  9. package/lib/bindings.js +26 -25
  10. package/lib/capability.d.ts.map +1 -1
  11. package/lib/capability.js +17 -0
  12. package/lib/capture-path.d.ts +97 -0
  13. package/lib/capture-path.d.ts.map +1 -0
  14. package/lib/capture-path.js +152 -0
  15. package/lib/diagnostics.d.ts +166 -0
  16. package/lib/diagnostics.d.ts.map +1 -0
  17. package/lib/diagnostics.js +135 -0
  18. package/lib/extension-dependencies.d.ts +325 -0
  19. package/lib/extension-dependencies.d.ts.map +1 -0
  20. package/lib/extension-dependencies.js +858 -0
  21. package/lib/extension-dispatch.d.ts +117 -0
  22. package/lib/extension-dispatch.d.ts.map +1 -0
  23. package/lib/extension-dispatch.js +124 -0
  24. package/lib/extension-registrar.d.ts +100 -0
  25. package/lib/extension-registrar.d.ts.map +1 -0
  26. package/lib/extension-registrar.js +134 -0
  27. package/lib/extensions-api.d.ts +221 -0
  28. package/lib/extensions-api.d.ts.map +1 -0
  29. package/lib/extensions-api.js +17 -0
  30. package/lib/extensions-remote.d.ts +54 -0
  31. package/lib/extensions-remote.d.ts.map +1 -0
  32. package/lib/extensions-remote.js +66 -0
  33. package/lib/extensions-service.d.ts +367 -0
  34. package/lib/extensions-service.d.ts.map +1 -0
  35. package/lib/extensions-service.js +1527 -0
  36. package/lib/harness-llm.d.ts +138 -0
  37. package/lib/harness-llm.d.ts.map +1 -0
  38. package/lib/harness-llm.js +218 -0
  39. package/lib/harness-serving.d.ts +95 -0
  40. package/lib/harness-serving.d.ts.map +1 -0
  41. package/lib/harness-serving.js +157 -0
  42. package/lib/headless.d.ts +97 -0
  43. package/lib/headless.d.ts.map +1 -0
  44. package/lib/headless.js +349 -0
  45. package/lib/http-acquisition.d.ts +27 -0
  46. package/lib/http-acquisition.d.ts.map +1 -0
  47. package/lib/http-acquisition.js +136 -0
  48. package/lib/index.d.ts +271 -7
  49. package/lib/index.d.ts.map +1 -1
  50. package/lib/index.js +2644 -70
  51. package/lib/invocation-accounting.d.ts +169 -0
  52. package/lib/invocation-accounting.d.ts.map +1 -0
  53. package/lib/invocation-accounting.js +148 -0
  54. package/lib/legacy-migration.d.ts +95 -0
  55. package/lib/legacy-migration.d.ts.map +1 -0
  56. package/lib/legacy-migration.js +429 -0
  57. package/lib/managed-workers.d.ts +151 -0
  58. package/lib/managed-workers.d.ts.map +1 -0
  59. package/lib/managed-workers.js +249 -0
  60. package/lib/mcp/client-grant.d.ts +74 -0
  61. package/lib/mcp/client-grant.d.ts.map +1 -0
  62. package/lib/mcp/client-grant.js +60 -0
  63. package/lib/mcp/credential-cli.d.ts +38 -0
  64. package/lib/mcp/credential-cli.d.ts.map +1 -0
  65. package/lib/mcp/credential-cli.js +148 -0
  66. package/lib/mcp/credential-store.d.ts +143 -0
  67. package/lib/mcp/credential-store.d.ts.map +1 -0
  68. package/lib/mcp/credential-store.js +454 -0
  69. package/lib/mcp/host-binding.d.ts +25 -0
  70. package/lib/mcp/host-binding.d.ts.map +1 -1
  71. package/lib/mcp/host-binding.js +107 -14
  72. package/lib/mcp/http.d.ts +68 -18
  73. package/lib/mcp/http.d.ts.map +1 -1
  74. package/lib/mcp/http.js +390 -62
  75. package/lib/mcp/oauth.d.ts +149 -0
  76. package/lib/mcp/oauth.d.ts.map +1 -0
  77. package/lib/mcp/oauth.js +396 -0
  78. package/lib/mcp/protocol.d.ts +46 -7
  79. package/lib/mcp/protocol.d.ts.map +1 -1
  80. package/lib/mcp/protocol.js +63 -16
  81. package/lib/mcp/rate-limit.d.ts +68 -0
  82. package/lib/mcp/rate-limit.d.ts.map +1 -0
  83. package/lib/mcp/rate-limit.js +114 -0
  84. package/lib/mcp/sdk-v2.d.ts +17 -0
  85. package/lib/mcp/sdk-v2.d.ts.map +1 -0
  86. package/lib/mcp/sdk-v2.js +181 -0
  87. package/lib/mcp/server.d.ts +11 -1
  88. package/lib/mcp/server.d.ts.map +1 -1
  89. package/lib/mcp/server.js +80 -13
  90. package/lib/mcp/stdio.d.ts.map +1 -1
  91. package/lib/mcp/stdio.js +9 -1
  92. package/lib/mcp/subscriptions.d.ts +43 -1
  93. package/lib/mcp/subscriptions.d.ts.map +1 -1
  94. package/lib/mcp/subscriptions.js +90 -9
  95. package/lib/model-qualification.d.ts +192 -0
  96. package/lib/model-qualification.d.ts.map +1 -0
  97. package/lib/model-qualification.js +178 -0
  98. package/lib/planning.d.ts +246 -0
  99. package/lib/planning.d.ts.map +1 -0
  100. package/lib/planning.js +457 -0
  101. package/lib/prepared-assets.d.ts +178 -0
  102. package/lib/prepared-assets.d.ts.map +1 -0
  103. package/lib/prepared-assets.js +286 -0
  104. package/lib/provider-bridge.d.ts +37 -0
  105. package/lib/provider-bridge.d.ts.map +1 -1
  106. package/lib/provider-bridge.js +189 -12
  107. package/lib/ptc-authority.d.ts +140 -0
  108. package/lib/ptc-authority.d.ts.map +1 -0
  109. package/lib/ptc-authority.js +216 -0
  110. package/lib/ptc-runtime.d.ts +156 -0
  111. package/lib/ptc-runtime.d.ts.map +1 -0
  112. package/lib/ptc-runtime.js +191 -0
  113. package/lib/publication.d.ts +2 -1
  114. package/lib/publication.d.ts.map +1 -1
  115. package/lib/publication.js +13 -5
  116. package/lib/receipt.d.ts.map +1 -1
  117. package/lib/receipt.js +8 -0
  118. package/lib/title-proposal.d.ts +194 -0
  119. package/lib/title-proposal.d.ts.map +1 -0
  120. package/lib/title-proposal.js +244 -0
  121. package/lib/tool-mode-run.d.ts +235 -0
  122. package/lib/tool-mode-run.d.ts.map +1 -0
  123. package/lib/tool-mode-run.js +283 -0
  124. package/lib/types.d.ts +3 -1
  125. package/lib/types.d.ts.map +1 -1
  126. package/lib/update-surface.d.ts +79 -0
  127. package/lib/update-surface.d.ts.map +1 -0
  128. package/lib/update-surface.js +224 -0
  129. package/node_modules/@try-works/tool-mode-contracts/lib/contracts/standard.d.ts +38 -0
  130. package/node_modules/@try-works/tool-mode-contracts/lib/contracts/standard.d.ts.map +1 -0
  131. package/node_modules/@try-works/tool-mode-contracts/lib/contracts/standard.js +445 -0
  132. package/node_modules/@try-works/tool-mode-contracts/lib/contracts/text-embed.d.ts +14 -0
  133. package/node_modules/@try-works/tool-mode-contracts/lib/contracts/text-embed.d.ts.map +1 -0
  134. package/node_modules/@try-works/tool-mode-contracts/lib/contracts/text-embed.js +63 -0
  135. package/node_modules/@try-works/tool-mode-contracts/lib/contracts/text-rerank.d.ts +14 -0
  136. package/node_modules/@try-works/tool-mode-contracts/lib/contracts/text-rerank.d.ts.map +1 -0
  137. package/node_modules/@try-works/tool-mode-contracts/lib/contracts/text-rerank.js +76 -0
  138. package/node_modules/@try-works/tool-mode-contracts/lib/dsh.d.ts.map +1 -1
  139. package/node_modules/@try-works/tool-mode-contracts/lib/dsh.js +69 -55
  140. package/node_modules/@try-works/tool-mode-contracts/lib/index.d.ts +4 -1
  141. package/node_modules/@try-works/tool-mode-contracts/lib/index.d.ts.map +1 -1
  142. package/node_modules/@try-works/tool-mode-contracts/lib/index.js +26 -2
  143. package/node_modules/@try-works/tool-mode-contracts/lib/registry.d.ts +28 -2
  144. package/node_modules/@try-works/tool-mode-contracts/lib/registry.d.ts.map +1 -1
  145. package/node_modules/@try-works/tool-mode-contracts/lib/registry.js +93 -10
  146. package/node_modules/@try-works/tool-mode-contracts/package.json +0 -1
  147. package/node_modules/@try-works/tool-mode-extension-sdk/bin/dsh-tool-mode.mjs +20 -0
  148. package/node_modules/@try-works/tool-mode-extension-sdk/lib/cli.d.ts +80 -0
  149. package/node_modules/@try-works/tool-mode-extension-sdk/lib/cli.d.ts.map +1 -0
  150. package/node_modules/@try-works/tool-mode-extension-sdk/lib/cli.js +533 -0
  151. package/node_modules/@try-works/tool-mode-extension-sdk/lib/declarative-recipes.d.ts +83 -0
  152. package/node_modules/@try-works/tool-mode-extension-sdk/lib/declarative-recipes.d.ts.map +1 -0
  153. package/node_modules/@try-works/tool-mode-extension-sdk/lib/declarative-recipes.js +125 -0
  154. package/node_modules/@try-works/tool-mode-extension-sdk/lib/discovery.d.ts +70 -0
  155. package/node_modules/@try-works/tool-mode-extension-sdk/lib/discovery.d.ts.map +1 -0
  156. package/node_modules/@try-works/tool-mode-extension-sdk/lib/discovery.js +201 -0
  157. package/node_modules/@try-works/tool-mode-extension-sdk/lib/errors.d.ts +57 -0
  158. package/node_modules/@try-works/tool-mode-extension-sdk/lib/errors.d.ts.map +1 -0
  159. package/node_modules/@try-works/tool-mode-extension-sdk/lib/errors.js +83 -0
  160. package/node_modules/@try-works/tool-mode-extension-sdk/lib/index.d.ts +32 -0
  161. package/node_modules/@try-works/tool-mode-extension-sdk/lib/index.d.ts.map +1 -0
  162. package/node_modules/@try-works/tool-mode-extension-sdk/lib/index.js +32 -0
  163. package/node_modules/@try-works/tool-mode-extension-sdk/lib/install/archive.d.ts +86 -0
  164. package/node_modules/@try-works/tool-mode-extension-sdk/lib/install/archive.d.ts.map +1 -0
  165. package/node_modules/@try-works/tool-mode-extension-sdk/lib/install/archive.js +191 -0
  166. package/node_modules/@try-works/tool-mode-extension-sdk/lib/install/dependencies.d.ts +126 -0
  167. package/node_modules/@try-works/tool-mode-extension-sdk/lib/install/dependencies.d.ts.map +1 -0
  168. package/node_modules/@try-works/tool-mode-extension-sdk/lib/install/dependencies.js +297 -0
  169. package/node_modules/@try-works/tool-mode-extension-sdk/lib/install/lifecycle.d.ts +216 -0
  170. package/node_modules/@try-works/tool-mode-extension-sdk/lib/install/lifecycle.d.ts.map +1 -0
  171. package/node_modules/@try-works/tool-mode-extension-sdk/lib/install/lifecycle.js +800 -0
  172. package/node_modules/@try-works/tool-mode-extension-sdk/lib/install/migration.d.ts +210 -0
  173. package/node_modules/@try-works/tool-mode-extension-sdk/lib/install/migration.d.ts.map +1 -0
  174. package/node_modules/@try-works/tool-mode-extension-sdk/lib/install/migration.js +368 -0
  175. package/node_modules/@try-works/tool-mode-extension-sdk/lib/install/runtime-link.d.ts +63 -0
  176. package/node_modules/@try-works/tool-mode-extension-sdk/lib/install/runtime-link.d.ts.map +1 -0
  177. package/node_modules/@try-works/tool-mode-extension-sdk/lib/install/runtime-link.js +149 -0
  178. package/node_modules/@try-works/tool-mode-extension-sdk/lib/install/source-directory.d.ts +35 -0
  179. package/node_modules/@try-works/tool-mode-extension-sdk/lib/install/source-directory.d.ts.map +1 -0
  180. package/node_modules/@try-works/tool-mode-extension-sdk/lib/install/source-directory.js +179 -0
  181. package/node_modules/@try-works/tool-mode-extension-sdk/lib/install/staged.d.ts +179 -0
  182. package/node_modules/@try-works/tool-mode-extension-sdk/lib/install/staged.d.ts.map +1 -0
  183. package/node_modules/@try-works/tool-mode-extension-sdk/lib/install/staged.js +235 -0
  184. package/node_modules/@try-works/tool-mode-extension-sdk/lib/install/store.d.ts +367 -0
  185. package/node_modules/@try-works/tool-mode-extension-sdk/lib/install/store.d.ts.map +1 -0
  186. package/node_modules/@try-works/tool-mode-extension-sdk/lib/install/store.js +807 -0
  187. package/node_modules/@try-works/tool-mode-extension-sdk/lib/install/tar-gzip-source.d.ts +44 -0
  188. package/node_modules/@try-works/tool-mode-extension-sdk/lib/install/tar-gzip-source.d.ts.map +1 -0
  189. package/node_modules/@try-works/tool-mode-extension-sdk/lib/install/tar-gzip-source.js +243 -0
  190. package/node_modules/@try-works/tool-mode-extension-sdk/lib/install/update-flow.d.ts +185 -0
  191. package/node_modules/@try-works/tool-mode-extension-sdk/lib/install/update-flow.d.ts.map +1 -0
  192. package/node_modules/@try-works/tool-mode-extension-sdk/lib/install/update-flow.js +504 -0
  193. package/node_modules/@try-works/tool-mode-extension-sdk/lib/install/zip-source.d.ts +17 -0
  194. package/node_modules/@try-works/tool-mode-extension-sdk/lib/install/zip-source.d.ts.map +1 -0
  195. package/node_modules/@try-works/tool-mode-extension-sdk/lib/install/zip-source.js +80 -0
  196. package/node_modules/@try-works/tool-mode-extension-sdk/lib/load.d.ts +52 -0
  197. package/node_modules/@try-works/tool-mode-extension-sdk/lib/load.d.ts.map +1 -0
  198. package/node_modules/@try-works/tool-mode-extension-sdk/lib/load.js +102 -0
  199. package/node_modules/@try-works/tool-mode-extension-sdk/lib/manifest.d.ts +171 -0
  200. package/node_modules/@try-works/tool-mode-extension-sdk/lib/manifest.d.ts.map +1 -0
  201. package/node_modules/@try-works/tool-mode-extension-sdk/lib/manifest.js +271 -0
  202. package/node_modules/@try-works/tool-mode-extension-sdk/lib/runtime.d.ts +242 -0
  203. package/node_modules/@try-works/tool-mode-extension-sdk/lib/runtime.d.ts.map +1 -0
  204. package/node_modules/@try-works/tool-mode-extension-sdk/lib/runtime.js +58 -0
  205. package/node_modules/@try-works/tool-mode-extension-sdk/lib/state.d.ts +118 -0
  206. package/node_modules/@try-works/tool-mode-extension-sdk/lib/state.d.ts.map +1 -0
  207. package/node_modules/@try-works/tool-mode-extension-sdk/lib/state.js +113 -0
  208. package/node_modules/@try-works/tool-mode-extension-sdk/lib/worker/worker-child.d.ts +2 -0
  209. package/node_modules/@try-works/tool-mode-extension-sdk/lib/worker/worker-child.d.ts.map +1 -0
  210. package/node_modules/@try-works/tool-mode-extension-sdk/lib/worker/worker-child.js +351 -0
  211. package/node_modules/@try-works/tool-mode-extension-sdk/lib/worker.d.ts +150 -0
  212. package/node_modules/@try-works/tool-mode-extension-sdk/lib/worker.d.ts.map +1 -0
  213. package/node_modules/@try-works/tool-mode-extension-sdk/lib/worker.js +670 -0
  214. package/node_modules/@try-works/tool-mode-extension-sdk/package.json +53 -0
  215. package/node_modules/@try-works/tool-mode-extension-sdk/schema/extension-manifest-1.1.0.schema.json +253 -0
  216. package/node_modules/@try-works/tool-mode-recipes/bin/tool-mode-recipe.mjs +15 -0
  217. package/node_modules/@try-works/tool-mode-recipes/lib/broker.d.ts +427 -0
  218. package/node_modules/@try-works/tool-mode-recipes/lib/broker.d.ts.map +1 -0
  219. package/node_modules/@try-works/tool-mode-recipes/lib/broker.js +592 -0
  220. package/node_modules/@try-works/tool-mode-recipes/lib/cli.d.ts +60 -0
  221. package/node_modules/@try-works/tool-mode-recipes/lib/cli.d.ts.map +1 -0
  222. package/node_modules/@try-works/tool-mode-recipes/lib/cli.js +936 -0
  223. package/node_modules/@try-works/tool-mode-recipes/lib/dsh-adapter.d.ts +237 -0
  224. package/node_modules/@try-works/tool-mode-recipes/lib/dsh-adapter.d.ts.map +1 -0
  225. package/node_modules/@try-works/tool-mode-recipes/lib/dsh-adapter.js +200 -0
  226. package/node_modules/@try-works/tool-mode-recipes/lib/fixture-provider.d.ts +85 -0
  227. package/node_modules/@try-works/tool-mode-recipes/lib/fixture-provider.d.ts.map +1 -0
  228. package/node_modules/@try-works/tool-mode-recipes/lib/fixture-provider.js +176 -0
  229. package/node_modules/@try-works/tool-mode-recipes/lib/images.d.ts +105 -0
  230. package/node_modules/@try-works/tool-mode-recipes/lib/images.d.ts.map +1 -0
  231. package/node_modules/@try-works/tool-mode-recipes/lib/images.js +129 -0
  232. package/node_modules/@try-works/tool-mode-recipes/lib/index.d.ts +25 -0
  233. package/node_modules/@try-works/tool-mode-recipes/lib/index.d.ts.map +1 -0
  234. package/node_modules/@try-works/tool-mode-recipes/lib/index.js +25 -0
  235. package/node_modules/@try-works/tool-mode-recipes/lib/recipe-format.d.ts +325 -0
  236. package/node_modules/@try-works/tool-mode-recipes/lib/recipe-format.d.ts.map +1 -0
  237. package/node_modules/@try-works/tool-mode-recipes/lib/recipe-format.js +1310 -0
  238. package/node_modules/@try-works/tool-mode-recipes/lib/templates.d.ts +51 -0
  239. package/node_modules/@try-works/tool-mode-recipes/lib/templates.d.ts.map +1 -0
  240. package/node_modules/@try-works/tool-mode-recipes/lib/templates.js +310 -0
  241. package/node_modules/@try-works/tool-mode-recipes/lib/titles.d.ts +227 -0
  242. package/node_modules/@try-works/tool-mode-recipes/lib/titles.d.ts.map +1 -0
  243. package/node_modules/@try-works/tool-mode-recipes/lib/titles.js +407 -0
  244. package/node_modules/@try-works/tool-mode-recipes/package.json +56 -0
  245. package/node_modules/@try-works/tool-mode-recipes/recipes/describe-image.json +38 -0
  246. package/node_modules/@try-works/tool-mode-recipes/recipes/text-title.json +45 -0
  247. package/node_modules/@try-works/tool-mode-recipes/schema/harness-model-recipe.schema.json +273 -0
  248. package/package.json +43 -15
  249. package/remote/spec.mjs +462 -0
  250. package/remote/typert.host.mjs +14 -0
  251. package/remote/typert.remote-client.mjs +16 -0
  252. package/lib/adapters/tongue.d.ts +0 -31
  253. package/lib/adapters/tongue.d.ts.map +0 -1
  254. package/lib/adapters/tongue.js +0 -93
  255. package/lib/adapters/voz.d.ts +0 -28
  256. package/lib/adapters/voz.d.ts.map +0 -1
  257. package/lib/adapters/voz.js +0 -102
  258. /package/{lib → node_modules/@try-works/tool-mode-extension-sdk/lib}/licensing.d.ts +0 -0
  259. /package/{lib → node_modules/@try-works/tool-mode-extension-sdk/lib}/licensing.d.ts.map +0 -0
  260. /package/{lib → node_modules/@try-works/tool-mode-extension-sdk/lib}/licensing.js +0 -0
@@ -1,693 +1,693 @@
1
- [
2
- {
3
- "id": "align",
4
- "name": "Align",
5
- "summary": "Word-timestamp refinement for any transcript, on device, from 0.7MB.",
6
- "capability": "audio.word-alignment",
7
- "contract": null,
8
- "input": "audio",
9
- "output": "{ words: [{ text, start, end }] } aligned against the audio",
10
- "languages": null,
11
- "modelSizeMB": 0.7,
12
- "appleOnly": false,
13
- "closedBeta": false,
14
- "verifiedRunnableOnWindows": false,
15
- "windowsSupport": "browser-only",
16
- "npmPackage": "@desert-ant-labs/align",
17
- "npmSubpath": "/native",
18
- "requiresRuntime": [],
19
- "cliVerb": "align",
20
- "license": "source-available",
21
- "docsUrl": "https://desertant.com/models/align/",
22
- "hfRepo": "https://huggingface.co/desert-ant-labs/align",
23
- "tool": {
24
- "name": "align_transcript",
25
- "description": "Refine word-level timestamps in a transcript against its audio, for accurate captions, cuts and highlights.",
26
- "params": {
27
- "audio_path": "Absolute path to the audio or video file.",
28
- "transcript": "The transcript text to align against the audio."
29
- },
30
- "returns": "The transcript split into words, each with a start and end time in seconds."
31
- },
32
- "skill": {
33
- "name": "desert-ant-align",
34
- "description": "Align transcript words to audio timestamps with the Desert Ant Align model.",
35
- "whenToUse": "Use when captions, cuts or highlight spans need word-accurate timing rather than coarse segment times."
36
- }
37
- },
38
- {
39
- "id": "clear",
40
- "name": "Clear",
41
- "summary": "On-device speech enhancement: denoise, dereverb and loudness-normalize to 48 kHz.",
42
- "capability": "audio.speech-enhancement",
43
- "contract": null,
44
- "input": "audio",
45
- "output": "A cleaned audio file path plus processing metadata",
46
- "languages": null,
47
- "modelSizeMB": null,
48
- "appleOnly": false,
49
- "closedBeta": false,
50
- "verifiedRunnableOnWindows": false,
51
- "windowsSupport": "browser-only",
52
- "npmPackage": "@desert-ant-labs/clear",
53
- "npmSubpath": "/native",
54
- "requiresRuntime": [],
55
- "cliVerb": "clear",
56
- "license": "source-available",
57
- "docsUrl": "https://desertant.com/models/clear/",
58
- "hfRepo": "https://huggingface.co/desert-ant-labs/clear",
59
- "tool": {
60
- "name": "enhance_speech",
61
- "description": "Clean up a recording on device: remove noise and room echo and level the loudness to a podcast-ready 48 kHz.",
62
- "params": {
63
- "audio_path": "Absolute path to the input audio or video file.",
64
- "output_path": "Absolute path to write the enhanced audio to."
65
- },
66
- "returns": "The path of the enhanced audio file."
67
- },
68
- "skill": {
69
- "name": "desert-ant-clear",
70
- "description": "Enhance noisy speech recordings on device with the Desert Ant Clear model.",
71
- "whenToUse": "Use when a recording needs denoising, dereverberation or loudness normalization before publication."
72
- }
73
- },
74
- {
75
- "id": "clips",
76
- "name": "Clips",
77
- "summary": "Clip selection that turns a long recording into ranked shorts and highlights from a transcript.",
78
- "capability": "video.clip-selection",
79
- "contract": null,
80
- "input": "video",
81
- "output": "{ clips: [{ index, start, end, title, file }] } ranked by interest",
82
- "languages": null,
83
- "modelSizeMB": null,
84
- "appleOnly": false,
85
- "closedBeta": false,
86
- "verifiedRunnableOnWindows": false,
87
- "windowsSupport": "browser-only",
88
- "npmPackage": null,
89
- "npmSubpath": null,
90
- "requiresRuntime": [],
91
- "cliVerb": "clips",
92
- "license": "source-available",
93
- "docsUrl": "https://desertant.com/models/clips/",
94
- "hfRepo": "https://huggingface.co/desert-ant-labs/clips",
95
- "tool": {
96
- "name": "select_clips",
97
- "description": "Rank and cut the most interesting short clips and highlights out of a podcast, interview or meeting recording.",
98
- "params": {
99
- "media_path": "Absolute path to the recording to cut clips from.",
100
- "transcript": "Optional pre-computed transcript JSON, so transcription runs only once."
101
- },
102
- "returns": "Ranked clips, each with its start and end time, a title and the written clip file."
103
- },
104
- "skill": {
105
- "name": "desert-ant-clips",
106
- "description": "Select and cut ranked short clips from long recordings with the Desert Ant Clips model.",
107
- "whenToUse": "Use when a long recording must become shorts, highlights or a social cut list."
108
- }
109
- },
110
- {
111
- "id": "ear",
112
- "name": "Ear",
113
- "summary": "On-device spoken language identification across 102 languages from a short audio stretch.",
114
- "capability": "audio.spoken-language-identification",
115
- "contract": null,
116
- "input": "audio",
117
- "output": "{ language, confidence, candidates: [{ language, probability }] }",
118
- "languages": 102,
119
- "modelSizeMB": null,
120
- "appleOnly": false,
121
- "closedBeta": false,
122
- "verifiedRunnableOnWindows": false,
123
- "windowsSupport": "browser-only",
124
- "npmPackage": "@desert-ant-labs/ear",
125
- "npmSubpath": "/native",
126
- "requiresRuntime": [],
127
- "cliVerb": "ear",
128
- "license": "source-available",
129
- "docsUrl": "https://desertant.com/models/ear/",
130
- "hfRepo": "https://huggingface.co/desert-ant-labs/ear",
131
- "tool": {
132
- "name": "detect_spoken_language",
133
- "description": "Identify which language is being spoken in a recording, before transcription starts, across 102 languages.",
134
- "params": {
135
- "audio_path": "Absolute path to the audio or video file."
136
- },
137
- "returns": "The detected spoken language with a confidence and runner-up candidates."
138
- },
139
- "skill": {
140
- "name": "desert-ant-ear",
141
- "description": "Identify the spoken language of a recording on device with the Desert Ant Ear model.",
142
- "whenToUse": "Use to pick a transcription language or route audio before running speech recognition."
143
- }
144
- },
145
- {
146
- "id": "emo",
147
- "name": "Emo",
148
- "summary": "Type a task or message and get the emoji that fit, in 22 languages, on the device.",
149
- "capability": "text.emoji-suggestion",
150
- "contract": null,
151
- "input": "text",
152
- "output": "[{ emoji, confidence }] ranked suggestions",
153
- "languages": 22,
154
- "modelSizeMB": 10.2,
155
- "appleOnly": false,
156
- "closedBeta": false,
157
- "verifiedRunnableOnWindows": false,
158
- "windowsSupport": "browser-only",
159
- "npmPackage": "@desert-ant-labs/emo",
160
- "npmSubpath": "/native",
161
- "requiresRuntime": [],
162
- "cliVerb": "emo",
163
- "license": "source-available",
164
- "docsUrl": "https://desertant.com/models/emo/",
165
- "hfRepo": "https://huggingface.co/desert-ant-labs/emo",
166
- "tool": {
167
- "name": "suggest_emoji",
168
- "description": "Suggest emoji that fit a piece of text, in 22 languages, running entirely on device.",
169
- "params": {
170
- "text": "The text to suggest emoji for.",
171
- "limit": {
172
- "description": "Maximum number of suggestions to return (default 5).",
173
- "type": "integer"
174
- }
175
- },
176
- "returns": "Ranked emoji suggestions with confidence scores."
177
- },
178
- "skill": {
179
- "name": "desert-ant-emo",
180
- "description": "Suggest fitting emoji for text with the Desert Ant Emo model.",
181
- "whenToUse": "Use when writing release notes, commit summaries or UI copy that should carry emoji."
182
- }
183
- },
184
- {
185
- "id": "eye",
186
- "name": "Eye",
187
- "summary": "On-device frame scoring that tells you which shot to keep, what is in it, and which shots repeat.",
188
- "capability": "image.frame-scoring",
189
- "contract": null,
190
- "input": "image",
191
- "output": "[{ frame, score, labels, duplicate_of }]",
192
- "languages": null,
193
- "modelSizeMB": null,
194
- "appleOnly": false,
195
- "closedBeta": true,
196
- "verifiedRunnableOnWindows": false,
197
- "windowsSupport": "no-sdk",
198
- "npmPackage": null,
199
- "npmSubpath": null,
200
- "requiresRuntime": [],
201
- "cliVerb": null,
202
- "license": "source-available",
203
- "docsUrl": "https://desertant.com/models/eye/",
204
- "hfRepo": "https://huggingface.co/desert-ant-labs/eye",
205
- "tool": {
206
- "name": "score_frames",
207
- "description": "Score a burst or clip of frames to choose the best shot, describe what is in it and detect repeated shots.",
208
- "params": {
209
- "image_paths": {
210
- "description": "Absolute paths of the frames to score.",
211
- "type": "string[]"
212
- },
213
- "top": {
214
- "description": "How many top frames to return (default 5).",
215
- "type": "integer"
216
- }
217
- },
218
- "returns": "Frames ranked by score, with labels and duplicate grouping."
219
- },
220
- "skill": {
221
- "name": "desert-ant-eye",
222
- "description": "Score and rank frames to pick the best shot with the Desert Ant Eye model.",
223
- "whenToUse": "Use when a burst or clip must be reduced to the best shot or de-duplicated."
224
- }
225
- },
226
- {
227
- "id": "face",
228
- "name": "Face",
229
- "summary": "On-device face matching that finds the same person across a photo library or through a video.",
230
- "capability": "image.face-matching",
231
- "contract": null,
232
- "input": "image",
233
- "output": "[{ path, faces: [{ box, match_id }] }]",
234
- "languages": null,
235
- "modelSizeMB": null,
236
- "appleOnly": false,
237
- "closedBeta": true,
238
- "verifiedRunnableOnWindows": false,
239
- "windowsSupport": "no-sdk",
240
- "npmPackage": null,
241
- "npmSubpath": null,
242
- "requiresRuntime": [],
243
- "cliVerb": null,
244
- "license": "source-available",
245
- "docsUrl": "https://desertant.com/models/face/",
246
- "hfRepo": "https://huggingface.co/desert-ant-labs/face",
247
- "tool": {
248
- "name": "match_faces",
249
- "description": "Match the same person across a set of images or a video, entirely on device, with no image leaving the machine.",
250
- "params": {
251
- "image_paths": {
252
- "description": "Absolute paths of the images to match faces across.",
253
- "type": "string[]"
254
- },
255
- "video_path": "Optional video to track faces through instead of still images."
256
- },
257
- "returns": "Detected face boxes grouped by person identity."
258
- },
259
- "skill": {
260
- "name": "desert-ant-face",
261
- "description": "Match and group the same person across images with the Desert Ant Face model.",
262
- "whenToUse": "Use to group a photo set by person, or to find a person's appearances in footage, without uploading images."
263
- }
264
- },
265
- {
266
- "id": "gist",
267
- "name": "Gist",
268
- "summary": "On-device topic tagging across a 36-topic taxonomy, in 101 languages, with no server call.",
269
- "capability": "text.topic-tagging",
270
- "contract": null,
271
- "input": "text",
272
- "output": "{ topics: [{ topic, score }] }",
273
- "languages": 101,
274
- "modelSizeMB": null,
275
- "appleOnly": false,
276
- "closedBeta": false,
277
- "verifiedRunnableOnWindows": false,
278
- "windowsSupport": "browser-only",
279
- "npmPackage": "@desert-ant-labs/gist",
280
- "npmSubpath": "/native",
281
- "requiresRuntime": [],
282
- "cliVerb": "gist",
283
- "license": "source-available",
284
- "docsUrl": "https://desertant.com/models/gist/",
285
- "hfRepo": "https://huggingface.co/desert-ant-labs/gist",
286
- "tool": {
287
- "name": "tag_topics",
288
- "description": "Tag a title, post or article with the topics it covers, from a fixed 36-topic taxonomy across 101 languages.",
289
- "params": {
290
- "text": "The text to tag.",
291
- "limit": {
292
- "description": "Maximum number of topics to return (default 5).",
293
- "type": "integer"
294
- }
295
- },
296
- "returns": "Ranked topic labels from the fixed taxonomy with scores."
297
- },
298
- "skill": {
299
- "name": "desert-ant-gist",
300
- "description": "Tag content with topics from a fixed taxonomy using the Desert Ant Gist model.",
301
- "whenToUse": "Use to classify or route content into a stable topic taxonomy before indexing or display."
302
- }
303
- },
304
- {
305
- "id": "moderator",
306
- "name": "Moderator",
307
- "summary": "On-device NSFW detection that flags nudity before upload, trained only on licensed and synthetic data.",
308
- "capability": "image.nsfw-detection",
309
- "contract": null,
310
- "input": "image",
311
- "output": "{ nsfw, score, labels: [...] }",
312
- "languages": null,
313
- "modelSizeMB": 9.2,
314
- "appleOnly": false,
315
- "closedBeta": false,
316
- "verifiedRunnableOnWindows": false,
317
- "windowsSupport": "browser-only",
318
- "npmPackage": "@desert-ant-labs/moderator",
319
- "npmSubpath": "/native",
320
- "requiresRuntime": [],
321
- "cliVerb": "moderator",
322
- "license": "source-available",
323
- "docsUrl": "https://desertant.com/models/moderator/",
324
- "hfRepo": "https://huggingface.co/desert-ant-labs/moderator",
325
- "tool": {
326
- "name": "detect_nsfw",
327
- "description": "Check images for nudity or sexual content on device before they are uploaded or shown.",
328
- "params": {
329
- "image_paths": {
330
- "description": "Absolute paths of the images to check.",
331
- "type": "string[]"
332
- }
333
- },
334
- "returns": "A per-image NSFW verdict with score and labels."
335
- },
336
- "skill": {
337
- "name": "desert-ant-moderator",
338
- "description": "Screen images for NSFW content on device with the Desert Ant Moderator model.",
339
- "whenToUse": "Use to gate user-supplied images before storing, publishing or sending them anywhere."
340
- }
341
- },
342
- {
343
- "id": "redact",
344
- "name": "Redact",
345
- "summary": "On-device redaction that strips personal data as you type, in 27 languages, with restore support.",
346
- "capability": "text.pii-redaction",
347
- "contract": null,
348
- "input": "text",
349
- "output": "{ redactedText, items: [{ label, original, placeholder, confidence }] }",
350
- "languages": 27,
351
- "modelSizeMB": null,
352
- "appleOnly": false,
353
- "closedBeta": false,
354
- "verifiedRunnableOnWindows": false,
355
- "windowsSupport": "browser-only",
356
- "npmPackage": "@desert-ant-labs/redact",
357
- "npmSubpath": "/native",
358
- "requiresRuntime": [],
359
- "cliVerb": "redact",
360
- "license": "source-available",
361
- "docsUrl": "https://desertant.com/models/redact/",
362
- "hfRepo": "https://huggingface.co/desert-ant-labs/redact",
363
- "tool": {
364
- "name": "redact_pii",
365
- "description": "Replace personal data (names, emails, phone numbers, addresses, card numbers and more) in text with stable placeholders, on device, before the text reaches any remote service.",
366
- "params": {
367
- "text": "The text to redact.",
368
- "labels": {
369
- "description": "Optional list of entity labels to restrict redaction to, for example [\"EMAIL\", \"PHONE\"].",
370
- "type": "string[]"
371
- },
372
- "minimum_confidence": {
373
- "description": "Optional confidence floor between 0 and 1 (default 0.6).",
374
- "type": "number"
375
- }
376
- },
377
- "returns": "The redacted text plus the placeholder map, so originals can be restored after a remote round trip."
378
- },
379
- "skill": {
380
- "name": "desert-ant-redact",
381
- "description": "Strip personal data from text on device with the Desert Ant Redact model before sending it to any remote service.",
382
- "whenToUse": "Use before sending logs, transcripts, tickets or documents containing names, emails or numbers to a remote model or API."
383
- }
384
- },
385
- {
386
- "id": "schemer",
387
- "name": "Schemer",
388
- "summary": "Extract typed fields from any text against your own schema, on device, with empty fields left empty.",
389
- "capability": "text.structured-extraction",
390
- "contract": null,
391
- "input": "text",
392
- "output": "An object matching the caller-supplied schema",
393
- "languages": null,
394
- "modelSizeMB": null,
395
- "appleOnly": false,
396
- "closedBeta": true,
397
- "verifiedRunnableOnWindows": false,
398
- "windowsSupport": "no-sdk",
399
- "npmPackage": null,
400
- "npmSubpath": null,
401
- "requiresRuntime": [],
402
- "cliVerb": null,
403
- "license": "source-available",
404
- "docsUrl": "https://desertant.com/models/schemer/",
405
- "hfRepo": "https://huggingface.co/desert-ant-labs/schemer",
406
- "tool": {
407
- "name": "extract_fields",
408
- "description": "Extract typed fields from text against a caller-supplied JSON schema, on device, leaving a field empty where the text says nothing.",
409
- "params": {
410
- "text": "The text to extract from.",
411
- "schema": "A JSON Schema object describing the fields to extract."
412
- },
413
- "returns": "An object matching the supplied schema."
414
- },
415
- "skill": {
416
- "name": "desert-ant-schemer",
417
- "description": "Extract schema-constrained structured fields from text with the Desert Ant Schemer model.",
418
- "whenToUse": "Use when text must become typed JSON against a known schema without a round trip to a hosted model."
419
- }
420
- },
421
- {
422
- "id": "shapes",
423
- "name": "Shapes",
424
- "summary": "On-device shape recognition that turns one hand-drawn stroke into a rectangle, ellipse, triangle, star or line in under 10ms.",
425
- "capability": "stroke.shape-recognition",
426
- "contract": null,
427
- "input": "stroke",
428
- "output": "{ shape, confidence, candidates: [...] }",
429
- "languages": null,
430
- "modelSizeMB": null,
431
- "appleOnly": false,
432
- "closedBeta": false,
433
- "verifiedRunnableOnWindows": false,
434
- "windowsSupport": "browser-only",
435
- "npmPackage": "@desert-ant-labs/shapes",
436
- "npmSubpath": "/native",
437
- "requiresRuntime": [],
438
- "cliVerb": "shapes",
439
- "license": "source-available",
440
- "docsUrl": "https://desertant.com/models/shapes/",
441
- "hfRepo": "https://huggingface.co/desert-ant-labs/shapes",
442
- "tool": {
443
- "name": "recognize_shape",
444
- "description": "Turn a single hand-drawn stroke into a clean shape: rectangle, ellipse, triangle, star or line.",
445
- "params": {
446
- "points": "The stroke as an array of [x, y] points in drawing order.",
447
- "closed": "Whether the stroke is a closed shape."
448
- },
449
- "returns": "The recognized shape with a confidence and runner-up candidates."
450
- },
451
- "skill": {
452
- "name": "desert-ant-shapes",
453
- "description": "Recognize hand-drawn strokes as clean shapes with the Desert Ant Shapes model.",
454
- "whenToUse": "Use in drawing or diagram tooling to snap an ink stroke to a geometric shape."
455
- }
456
- },
457
- {
458
- "id": "title",
459
- "name": "Title",
460
- "summary": "On-device titles and descriptions: a short factual title and a one- or two-sentence description for any passage.",
461
- "capability": "text.title-generation",
462
- "contract": null,
463
- "input": "text",
464
- "output": "{ title, description, isEmpty }",
465
- "languages": null,
466
- "modelSizeMB": null,
467
- "appleOnly": true,
468
- "closedBeta": false,
469
- "verifiedRunnableOnWindows": false,
470
- "windowsSupport": "apple-only",
471
- "npmPackage": null,
472
- "npmSubpath": null,
473
- "requiresRuntime": [],
474
- "cliVerb": "title",
475
- "license": "source-available",
476
- "docsUrl": "https://desertant.com/models/title/",
477
- "hfRepo": "https://huggingface.co/desert-ant-labs/title",
478
- "tool": {
479
- "name": "suggest_title",
480
- "description": "Write a short factual title and a one- or two-sentence description for a passage of text: a landing-page section, a documentation page or an article.",
481
- "params": {
482
- "text": "The passage to title.",
483
- "max_tokens": {
484
- "description": "Optional generation cap in tokens (default 96).",
485
- "type": "integer"
486
- }
487
- },
488
- "returns": "A title and a description, or an empty card when the model returned neither."
489
- },
490
- "skill": {
491
- "name": "desert-ant-title",
492
- "description": "Generate short factual titles and descriptions for passages with the Desert Ant Title model.",
493
- "whenToUse": "Use when page sections, docs headings or article summaries need a title and one-line description."
494
- }
495
- },
496
- {
497
- "id": "tongue",
498
- "name": "Tongue",
499
- "summary": "On-device language identification for short text across 84 languages, from just a few words.",
500
- "capability": "text.language-identification",
501
- "contract": "text.language_detect",
502
- "input": "text",
503
- "output": "{ language, reliability, candidates: [{ language, probability }], isTooCloseToCall }",
504
- "languages": 84,
505
- "modelSizeMB": 2,
506
- "appleOnly": false,
507
- "closedBeta": false,
508
- "verifiedRunnableOnWindows": true,
509
- "windowsSupport": "native-node",
510
- "npmPackage": "@desert-ant-labs/tongue",
511
- "npmSubpath": null,
512
- "requiresRuntime": [],
513
- "cliVerb": "tongue",
514
- "license": "source-available",
515
- "docsUrl": "https://desertant.com/models/tongue/",
516
- "hfRepo": "https://huggingface.co/desert-ant-labs/tongue",
517
- "tool": {
518
- "name": "lang_detect",
519
- "description": "Identify the language of a short piece of text across 84 languages, on device, in microseconds. Works from as little as three words.",
520
- "params": {
521
- "text": "The text whose language to identify.",
522
- "top": {
523
- "description": "How many runner-up language candidates to include (default 3).",
524
- "type": "integer"
525
- }
526
- },
527
- "returns": "The detected language code, a reliability verdict, and the top scoring candidates with probabilities."
528
- },
529
- "skill": {
530
- "name": "desert-ant-tongue",
531
- "description": "Detect the language of short text on device with the Desert Ant Tongue model.",
532
- "whenToUse": "Use before translating, routing to a locale-specific template, or checking that generated copy is in the expected language."
533
- },
534
- "provider": {
535
- "extension": "@try-works/extension-desert-ant-tongue",
536
- "modelId": "tongue"
537
- }
538
- },
539
- {
540
- "id": "toxic",
541
- "name": "Toxic",
542
- "summary": "On-device moderation that flags hateful, abusive and threatening text in 23 European languages.",
543
- "capability": "text.toxicity-detection",
544
- "contract": null,
545
- "input": "text",
546
- "output": "{ toxic, score, labels: [...] }",
547
- "languages": 23,
548
- "modelSizeMB": null,
549
- "appleOnly": false,
550
- "closedBeta": true,
551
- "verifiedRunnableOnWindows": false,
552
- "windowsSupport": "no-sdk",
553
- "npmPackage": null,
554
- "npmSubpath": null,
555
- "requiresRuntime": [],
556
- "cliVerb": null,
557
- "license": "source-available",
558
- "docsUrl": "https://desertant.com/models/toxic/",
559
- "hfRepo": "https://huggingface.co/desert-ant-labs/toxic",
560
- "tool": {
561
- "name": "moderate_text",
562
- "description": "Flag hateful, abusive and threatening text in 23 European languages, on device, before the message is sent.",
563
- "params": {
564
- "text": "The text to check.",
565
- "minimum_confidence": {
566
- "description": "Optional confidence floor between 0 and 1.",
567
- "type": "number"
568
- }
569
- },
570
- "returns": "A toxicity verdict with score and the matched labels."
571
- },
572
- "skill": {
573
- "name": "desert-ant-toxic",
574
- "description": "Screen text for hate speech and abuse on device with the Desert Ant Toxic model.",
575
- "whenToUse": "Use to pre-screen user-generated text before publishing or forwarding it."
576
- }
577
- },
578
- {
579
- "id": "uhm",
580
- "name": "Uhm",
581
- "summary": "On-device filler detection that marks every um, uh and hmm to within 20ms, an hour of audio in 12s.",
582
- "capability": "audio.filler-detection",
583
- "contract": null,
584
- "input": "audio",
585
- "output": "[{ start, end, word }] filler spans to cut",
586
- "languages": null,
587
- "modelSizeMB": null,
588
- "appleOnly": true,
589
- "closedBeta": false,
590
- "verifiedRunnableOnWindows": false,
591
- "windowsSupport": "apple-only",
592
- "npmPackage": null,
593
- "npmSubpath": null,
594
- "requiresRuntime": [],
595
- "cliVerb": "uhm",
596
- "license": "source-available",
597
- "docsUrl": "https://desertant.com/models/uhm/",
598
- "hfRepo": "https://huggingface.co/desert-ant-labs/uhm",
599
- "tool": {
600
- "name": "detect_fillers",
601
- "description": "Find every um, uh and hmm in a recording with the exact span to cut.",
602
- "params": {
603
- "audio_path": "Absolute path to the audio or video file."
604
- },
605
- "returns": "Filler spans with start and end times in seconds, ready to cut."
606
- },
607
- "skill": {
608
- "name": "desert-ant-uhm",
609
- "description": "Detect filler words in speech on device with the Desert Ant Uhm model.",
610
- "whenToUse": "Use when editing spoken audio to remove hesitations and tighten a transcript."
611
- }
612
- },
613
- {
614
- "id": "voz",
615
- "name": "Voz",
616
- "summary": "Transcribe 10 minutes of audio in 2s on an iPhone, 14x faster than Whisper, with word timestamps.",
617
- "capability": "audio.speech-recognition",
618
- "contract": "stt.transcribe",
619
- "input": "audio",
620
- "output": "{ text, words: [{ text, start, end }], realtimeFactor }",
621
- "languages": 25,
622
- "modelSizeMB": 349,
623
- "appleOnly": false,
624
- "closedBeta": false,
625
- "verifiedRunnableOnWindows": true,
626
- "windowsSupport": "onnxruntime-node",
627
- "npmPackage": "@desert-ant-labs/voz",
628
- "npmSubpath": null,
629
- "requiresRuntime": [
630
- "onnxruntime-node"
631
- ],
632
- "cliVerb": "voz",
633
- "license": "source-available",
634
- "docsUrl": "https://desertant.com/models/voz/",
635
- "hfRepo": "https://huggingface.co/desert-ant-labs/voz",
636
- "tool": {
637
- "name": "transcribe_audio",
638
- "description": "Transcribe an audio or video file on device with word-level timestamps across 25 languages. Nothing is uploaded and no API key is needed.",
639
- "params": {
640
- "audio_path": "Absolute path to the audio or video file, or a 16 kHz mono WAV.",
641
- "include_words": {
642
- "description": "Whether to include the per-word timestamps (default true).",
643
- "type": "boolean"
644
- }
645
- },
646
- "returns": "The transcript text, optional per-word start and end times, and the measured realtime factor."
647
- },
648
- "skill": {
649
- "name": "desert-ant-voz",
650
- "description": "Transcribe audio on device with word timestamps using the Desert Ant Voz model.",
651
- "whenToUse": "Use to get a transcript or captions from a recording locally, without uploading audio to a hosted API."
652
- },
653
- "provider": {
654
- "extension": "@try-works/extension-desert-ant-voz",
655
- "modelId": "voz"
656
- }
657
- },
658
- {
659
- "id": "who",
660
- "name": "Who",
661
- "summary": "On-device speaker labeling that turns a recording into per-person turns with face boxes and timestamps.",
662
- "capability": "audio.speaker-labeling",
663
- "contract": null,
664
- "input": "audio",
665
- "output": "[{ speaker, start, end, face_box }] turns",
666
- "languages": null,
667
- "modelSizeMB": null,
668
- "appleOnly": false,
669
- "closedBeta": true,
670
- "verifiedRunnableOnWindows": false,
671
- "windowsSupport": "no-sdk",
672
- "npmPackage": null,
673
- "npmSubpath": null,
674
- "requiresRuntime": [],
675
- "cliVerb": null,
676
- "license": "source-available",
677
- "docsUrl": "https://desertant.com/models/who/",
678
- "hfRepo": "https://huggingface.co/desert-ant-labs/who",
679
- "tool": {
680
- "name": "detect_speakers",
681
- "description": "Split a recording into per-person speaking turns with timestamps and face boxes, ready to cut or caption.",
682
- "params": {
683
- "audio_path": "Absolute path to the audio or video file."
684
- },
685
- "returns": "Speaking turns labelled by speaker, with start and end times."
686
- },
687
- "skill": {
688
- "name": "desert-ant-who",
689
- "description": "Label speaker turns in a recording on device with the Desert Ant Who model.",
690
- "whenToUse": "Use when a transcript or edit needs to know who spoke when."
691
- }
692
- }
693
- ]
1
+ [
2
+ {
3
+ "id": "align",
4
+ "name": "Align",
5
+ "summary": "Word-timestamp refinement for any transcript, on device, from 0.7MB.",
6
+ "capability": "audio.word-alignment",
7
+ "contract": null,
8
+ "input": "audio",
9
+ "output": "{ words: [{ text, start, end }] } aligned against the audio",
10
+ "languages": null,
11
+ "modelSizeMB": 0.7,
12
+ "appleOnly": false,
13
+ "closedBeta": false,
14
+ "verifiedRunnableOnWindows": false,
15
+ "windowsSupport": "browser-only",
16
+ "npmPackage": "@desert-ant-labs/align",
17
+ "npmSubpath": "/native",
18
+ "requiresRuntime": [],
19
+ "cliVerb": "align",
20
+ "license": "source-available",
21
+ "docsUrl": "https://desertant.com/models/align/",
22
+ "hfRepo": "https://huggingface.co/desert-ant-labs/align",
23
+ "tool": {
24
+ "name": "align_transcript",
25
+ "description": "Refine word-level timestamps in a transcript against its audio, for accurate captions, cuts and highlights.",
26
+ "params": {
27
+ "audio_path": "Absolute path to the audio or video file.",
28
+ "transcript": "The transcript text to align against the audio."
29
+ },
30
+ "returns": "The transcript split into words, each with a start and end time in seconds."
31
+ },
32
+ "skill": {
33
+ "name": "desert-ant-align",
34
+ "description": "Align transcript words to audio timestamps with the Desert Ant Align model.",
35
+ "whenToUse": "Use when captions, cuts or highlight spans need word-accurate timing rather than coarse segment times."
36
+ }
37
+ },
38
+ {
39
+ "id": "clear",
40
+ "name": "Clear",
41
+ "summary": "On-device speech enhancement: denoise, dereverb and loudness-normalize to 48 kHz.",
42
+ "capability": "audio.speech-enhancement",
43
+ "contract": null,
44
+ "input": "audio",
45
+ "output": "A cleaned audio file path plus processing metadata",
46
+ "languages": null,
47
+ "modelSizeMB": null,
48
+ "appleOnly": false,
49
+ "closedBeta": false,
50
+ "verifiedRunnableOnWindows": false,
51
+ "windowsSupport": "browser-only",
52
+ "npmPackage": "@desert-ant-labs/clear",
53
+ "npmSubpath": "/native",
54
+ "requiresRuntime": [],
55
+ "cliVerb": "clear",
56
+ "license": "source-available",
57
+ "docsUrl": "https://desertant.com/models/clear/",
58
+ "hfRepo": "https://huggingface.co/desert-ant-labs/clear",
59
+ "tool": {
60
+ "name": "enhance_speech",
61
+ "description": "Clean up a recording on device: remove noise and room echo and level the loudness to a podcast-ready 48 kHz.",
62
+ "params": {
63
+ "audio_path": "Absolute path to the input audio or video file.",
64
+ "output_path": "Absolute path to write the enhanced audio to."
65
+ },
66
+ "returns": "The path of the enhanced audio file."
67
+ },
68
+ "skill": {
69
+ "name": "desert-ant-clear",
70
+ "description": "Enhance noisy speech recordings on device with the Desert Ant Clear model.",
71
+ "whenToUse": "Use when a recording needs denoising, dereverberation or loudness normalization before publication."
72
+ }
73
+ },
74
+ {
75
+ "id": "clips",
76
+ "name": "Clips",
77
+ "summary": "Clip selection that turns a long recording into ranked shorts and highlights from a transcript.",
78
+ "capability": "video.clip-selection",
79
+ "contract": null,
80
+ "input": "video",
81
+ "output": "{ clips: [{ index, start, end, title, file }] } ranked by interest",
82
+ "languages": null,
83
+ "modelSizeMB": null,
84
+ "appleOnly": false,
85
+ "closedBeta": false,
86
+ "verifiedRunnableOnWindows": false,
87
+ "windowsSupport": "browser-only",
88
+ "npmPackage": null,
89
+ "npmSubpath": null,
90
+ "requiresRuntime": [],
91
+ "cliVerb": "clips",
92
+ "license": "source-available",
93
+ "docsUrl": "https://desertant.com/models/clips/",
94
+ "hfRepo": "https://huggingface.co/desert-ant-labs/clips",
95
+ "tool": {
96
+ "name": "select_clips",
97
+ "description": "Rank and cut the most interesting short clips and highlights out of a podcast, interview or meeting recording.",
98
+ "params": {
99
+ "media_path": "Absolute path to the recording to cut clips from.",
100
+ "transcript": "Optional pre-computed transcript JSON, so transcription runs only once."
101
+ },
102
+ "returns": "Ranked clips, each with its start and end time, a title and the written clip file."
103
+ },
104
+ "skill": {
105
+ "name": "desert-ant-clips",
106
+ "description": "Select and cut ranked short clips from long recordings with the Desert Ant Clips model.",
107
+ "whenToUse": "Use when a long recording must become shorts, highlights or a social cut list."
108
+ }
109
+ },
110
+ {
111
+ "id": "ear",
112
+ "name": "Ear",
113
+ "summary": "On-device spoken language identification across 102 languages from a short audio stretch.",
114
+ "capability": "audio.spoken-language-identification",
115
+ "contract": null,
116
+ "input": "audio",
117
+ "output": "{ language, confidence, candidates: [{ language, probability }] }",
118
+ "languages": 102,
119
+ "modelSizeMB": null,
120
+ "appleOnly": false,
121
+ "closedBeta": false,
122
+ "verifiedRunnableOnWindows": false,
123
+ "windowsSupport": "browser-only",
124
+ "npmPackage": "@desert-ant-labs/ear",
125
+ "npmSubpath": "/native",
126
+ "requiresRuntime": [],
127
+ "cliVerb": "ear",
128
+ "license": "source-available",
129
+ "docsUrl": "https://desertant.com/models/ear/",
130
+ "hfRepo": "https://huggingface.co/desert-ant-labs/ear",
131
+ "tool": {
132
+ "name": "detect_spoken_language",
133
+ "description": "Identify which language is being spoken in a recording, before transcription starts, across 102 languages.",
134
+ "params": {
135
+ "audio_path": "Absolute path to the audio or video file."
136
+ },
137
+ "returns": "The detected spoken language with a confidence and runner-up candidates."
138
+ },
139
+ "skill": {
140
+ "name": "desert-ant-ear",
141
+ "description": "Identify the spoken language of a recording on device with the Desert Ant Ear model.",
142
+ "whenToUse": "Use to pick a transcription language or route audio before running speech recognition."
143
+ }
144
+ },
145
+ {
146
+ "id": "emo",
147
+ "name": "Emo",
148
+ "summary": "Type a task or message and get the emoji that fit, in 22 languages, on the device.",
149
+ "capability": "text.emoji-suggestion",
150
+ "contract": null,
151
+ "input": "text",
152
+ "output": "[{ emoji, confidence }] ranked suggestions",
153
+ "languages": 22,
154
+ "modelSizeMB": 10.2,
155
+ "appleOnly": false,
156
+ "closedBeta": false,
157
+ "verifiedRunnableOnWindows": false,
158
+ "windowsSupport": "browser-only",
159
+ "npmPackage": "@desert-ant-labs/emo",
160
+ "npmSubpath": "/native",
161
+ "requiresRuntime": [],
162
+ "cliVerb": "emo",
163
+ "license": "source-available",
164
+ "docsUrl": "https://desertant.com/models/emo/",
165
+ "hfRepo": "https://huggingface.co/desert-ant-labs/emo",
166
+ "tool": {
167
+ "name": "suggest_emoji",
168
+ "description": "Suggest emoji that fit a piece of text, in 22 languages, running entirely on device.",
169
+ "params": {
170
+ "text": "The text to suggest emoji for.",
171
+ "limit": {
172
+ "description": "Maximum number of suggestions to return (default 5).",
173
+ "type": "integer"
174
+ }
175
+ },
176
+ "returns": "Ranked emoji suggestions with confidence scores."
177
+ },
178
+ "skill": {
179
+ "name": "desert-ant-emo",
180
+ "description": "Suggest fitting emoji for text with the Desert Ant Emo model.",
181
+ "whenToUse": "Use when writing release notes, commit summaries or UI copy that should carry emoji."
182
+ }
183
+ },
184
+ {
185
+ "id": "eye",
186
+ "name": "Eye",
187
+ "summary": "On-device frame scoring that tells you which shot to keep, what is in it, and which shots repeat.",
188
+ "capability": "image.frame-scoring",
189
+ "contract": null,
190
+ "input": "image",
191
+ "output": "[{ frame, score, labels, duplicate_of }]",
192
+ "languages": null,
193
+ "modelSizeMB": null,
194
+ "appleOnly": false,
195
+ "closedBeta": true,
196
+ "verifiedRunnableOnWindows": false,
197
+ "windowsSupport": "no-sdk",
198
+ "npmPackage": null,
199
+ "npmSubpath": null,
200
+ "requiresRuntime": [],
201
+ "cliVerb": null,
202
+ "license": "source-available",
203
+ "docsUrl": "https://desertant.com/models/eye/",
204
+ "hfRepo": "https://huggingface.co/desert-ant-labs/eye",
205
+ "tool": {
206
+ "name": "score_frames",
207
+ "description": "Score a burst or clip of frames to choose the best shot, describe what is in it and detect repeated shots.",
208
+ "params": {
209
+ "image_paths": {
210
+ "description": "Absolute paths of the frames to score.",
211
+ "type": "string[]"
212
+ },
213
+ "top": {
214
+ "description": "How many top frames to return (default 5).",
215
+ "type": "integer"
216
+ }
217
+ },
218
+ "returns": "Frames ranked by score, with labels and duplicate grouping."
219
+ },
220
+ "skill": {
221
+ "name": "desert-ant-eye",
222
+ "description": "Score and rank frames to pick the best shot with the Desert Ant Eye model.",
223
+ "whenToUse": "Use when a burst or clip must be reduced to the best shot or de-duplicated."
224
+ }
225
+ },
226
+ {
227
+ "id": "face",
228
+ "name": "Face",
229
+ "summary": "On-device face matching that finds the same person across a photo library or through a video.",
230
+ "capability": "image.face-matching",
231
+ "contract": null,
232
+ "input": "image",
233
+ "output": "[{ path, faces: [{ box, match_id }] }]",
234
+ "languages": null,
235
+ "modelSizeMB": null,
236
+ "appleOnly": false,
237
+ "closedBeta": true,
238
+ "verifiedRunnableOnWindows": false,
239
+ "windowsSupport": "no-sdk",
240
+ "npmPackage": null,
241
+ "npmSubpath": null,
242
+ "requiresRuntime": [],
243
+ "cliVerb": null,
244
+ "license": "source-available",
245
+ "docsUrl": "https://desertant.com/models/face/",
246
+ "hfRepo": "https://huggingface.co/desert-ant-labs/face",
247
+ "tool": {
248
+ "name": "match_faces",
249
+ "description": "Match the same person across a set of images or a video, entirely on device, with no image leaving the machine.",
250
+ "params": {
251
+ "image_paths": {
252
+ "description": "Absolute paths of the images to match faces across.",
253
+ "type": "string[]"
254
+ },
255
+ "video_path": "Optional video to track faces through instead of still images."
256
+ },
257
+ "returns": "Detected face boxes grouped by person identity."
258
+ },
259
+ "skill": {
260
+ "name": "desert-ant-face",
261
+ "description": "Match and group the same person across images with the Desert Ant Face model.",
262
+ "whenToUse": "Use to group a photo set by person, or to find a person's appearances in footage, without uploading images."
263
+ }
264
+ },
265
+ {
266
+ "id": "gist",
267
+ "name": "Gist",
268
+ "summary": "On-device topic tagging across a 36-topic taxonomy, in 101 languages, with no server call.",
269
+ "capability": "text.topic-tagging",
270
+ "contract": null,
271
+ "input": "text",
272
+ "output": "{ topics: [{ topic, score }] }",
273
+ "languages": 101,
274
+ "modelSizeMB": null,
275
+ "appleOnly": false,
276
+ "closedBeta": false,
277
+ "verifiedRunnableOnWindows": false,
278
+ "windowsSupport": "browser-only",
279
+ "npmPackage": "@desert-ant-labs/gist",
280
+ "npmSubpath": "/native",
281
+ "requiresRuntime": [],
282
+ "cliVerb": "gist",
283
+ "license": "source-available",
284
+ "docsUrl": "https://desertant.com/models/gist/",
285
+ "hfRepo": "https://huggingface.co/desert-ant-labs/gist",
286
+ "tool": {
287
+ "name": "tag_topics",
288
+ "description": "Tag a title, post or article with the topics it covers, from a fixed 36-topic taxonomy across 101 languages.",
289
+ "params": {
290
+ "text": "The text to tag.",
291
+ "limit": {
292
+ "description": "Maximum number of topics to return (default 5).",
293
+ "type": "integer"
294
+ }
295
+ },
296
+ "returns": "Ranked topic labels from the fixed taxonomy with scores."
297
+ },
298
+ "skill": {
299
+ "name": "desert-ant-gist",
300
+ "description": "Tag content with topics from a fixed taxonomy using the Desert Ant Gist model.",
301
+ "whenToUse": "Use to classify or route content into a stable topic taxonomy before indexing or display."
302
+ }
303
+ },
304
+ {
305
+ "id": "moderator",
306
+ "name": "Moderator",
307
+ "summary": "On-device NSFW detection that flags nudity before upload, trained only on licensed and synthetic data.",
308
+ "capability": "image.nsfw-detection",
309
+ "contract": null,
310
+ "input": "image",
311
+ "output": "{ nsfw, score, labels: [...] }",
312
+ "languages": null,
313
+ "modelSizeMB": 9.2,
314
+ "appleOnly": false,
315
+ "closedBeta": false,
316
+ "verifiedRunnableOnWindows": false,
317
+ "windowsSupport": "browser-only",
318
+ "npmPackage": "@desert-ant-labs/moderator",
319
+ "npmSubpath": "/native",
320
+ "requiresRuntime": [],
321
+ "cliVerb": "moderator",
322
+ "license": "source-available",
323
+ "docsUrl": "https://desertant.com/models/moderator/",
324
+ "hfRepo": "https://huggingface.co/desert-ant-labs/moderator",
325
+ "tool": {
326
+ "name": "detect_nsfw",
327
+ "description": "Check images for nudity or sexual content on device before they are uploaded or shown.",
328
+ "params": {
329
+ "image_paths": {
330
+ "description": "Absolute paths of the images to check.",
331
+ "type": "string[]"
332
+ }
333
+ },
334
+ "returns": "A per-image NSFW verdict with score and labels."
335
+ },
336
+ "skill": {
337
+ "name": "desert-ant-moderator",
338
+ "description": "Screen images for NSFW content on device with the Desert Ant Moderator model.",
339
+ "whenToUse": "Use to gate user-supplied images before storing, publishing or sending them anywhere."
340
+ }
341
+ },
342
+ {
343
+ "id": "redact",
344
+ "name": "Redact",
345
+ "summary": "On-device redaction that strips personal data as you type, in 27 languages, with restore support.",
346
+ "capability": "text.pii-redaction",
347
+ "contract": null,
348
+ "input": "text",
349
+ "output": "{ redactedText, items: [{ label, original, placeholder, confidence }] }",
350
+ "languages": 27,
351
+ "modelSizeMB": null,
352
+ "appleOnly": false,
353
+ "closedBeta": false,
354
+ "verifiedRunnableOnWindows": false,
355
+ "windowsSupport": "browser-only",
356
+ "npmPackage": "@desert-ant-labs/redact",
357
+ "npmSubpath": "/native",
358
+ "requiresRuntime": [],
359
+ "cliVerb": "redact",
360
+ "license": "source-available",
361
+ "docsUrl": "https://desertant.com/models/redact/",
362
+ "hfRepo": "https://huggingface.co/desert-ant-labs/redact",
363
+ "tool": {
364
+ "name": "redact_pii",
365
+ "description": "Replace personal data (names, emails, phone numbers, addresses, card numbers and more) in text with stable placeholders, on device, before the text reaches any remote service.",
366
+ "params": {
367
+ "text": "The text to redact.",
368
+ "labels": {
369
+ "description": "Optional list of entity labels to restrict redaction to, for example [\"EMAIL\", \"PHONE\"].",
370
+ "type": "string[]"
371
+ },
372
+ "minimum_confidence": {
373
+ "description": "Optional confidence floor between 0 and 1 (default 0.6).",
374
+ "type": "number"
375
+ }
376
+ },
377
+ "returns": "The redacted text plus the placeholder map, so originals can be restored after a remote round trip."
378
+ },
379
+ "skill": {
380
+ "name": "desert-ant-redact",
381
+ "description": "Strip personal data from text on device with the Desert Ant Redact model before sending it to any remote service.",
382
+ "whenToUse": "Use before sending logs, transcripts, tickets or documents containing names, emails or numbers to a remote model or API."
383
+ }
384
+ },
385
+ {
386
+ "id": "schemer",
387
+ "name": "Schemer",
388
+ "summary": "Extract typed fields from any text against your own schema, on device, with empty fields left empty.",
389
+ "capability": "text.structured-extraction",
390
+ "contract": null,
391
+ "input": "text",
392
+ "output": "An object matching the caller-supplied schema",
393
+ "languages": null,
394
+ "modelSizeMB": null,
395
+ "appleOnly": false,
396
+ "closedBeta": true,
397
+ "verifiedRunnableOnWindows": false,
398
+ "windowsSupport": "no-sdk",
399
+ "npmPackage": null,
400
+ "npmSubpath": null,
401
+ "requiresRuntime": [],
402
+ "cliVerb": null,
403
+ "license": "source-available",
404
+ "docsUrl": "https://desertant.com/models/schemer/",
405
+ "hfRepo": "https://huggingface.co/desert-ant-labs/schemer",
406
+ "tool": {
407
+ "name": "extract_fields",
408
+ "description": "Extract typed fields from text against a caller-supplied JSON schema, on device, leaving a field empty where the text says nothing.",
409
+ "params": {
410
+ "text": "The text to extract from.",
411
+ "schema": "A JSON Schema object describing the fields to extract."
412
+ },
413
+ "returns": "An object matching the supplied schema."
414
+ },
415
+ "skill": {
416
+ "name": "desert-ant-schemer",
417
+ "description": "Extract schema-constrained structured fields from text with the Desert Ant Schemer model.",
418
+ "whenToUse": "Use when text must become typed JSON against a known schema without a round trip to a hosted model."
419
+ }
420
+ },
421
+ {
422
+ "id": "shapes",
423
+ "name": "Shapes",
424
+ "summary": "On-device shape recognition that turns one hand-drawn stroke into a rectangle, ellipse, triangle, star or line in under 10ms.",
425
+ "capability": "stroke.shape-recognition",
426
+ "contract": null,
427
+ "input": "stroke",
428
+ "output": "{ shape, confidence, candidates: [...] }",
429
+ "languages": null,
430
+ "modelSizeMB": null,
431
+ "appleOnly": false,
432
+ "closedBeta": false,
433
+ "verifiedRunnableOnWindows": false,
434
+ "windowsSupport": "browser-only",
435
+ "npmPackage": "@desert-ant-labs/shapes",
436
+ "npmSubpath": "/native",
437
+ "requiresRuntime": [],
438
+ "cliVerb": "shapes",
439
+ "license": "source-available",
440
+ "docsUrl": "https://desertant.com/models/shapes/",
441
+ "hfRepo": "https://huggingface.co/desert-ant-labs/shapes",
442
+ "tool": {
443
+ "name": "recognize_shape",
444
+ "description": "Turn a single hand-drawn stroke into a clean shape: rectangle, ellipse, triangle, star or line.",
445
+ "params": {
446
+ "points": "The stroke as an array of [x, y] points in drawing order.",
447
+ "closed": "Whether the stroke is a closed shape."
448
+ },
449
+ "returns": "The recognized shape with a confidence and runner-up candidates."
450
+ },
451
+ "skill": {
452
+ "name": "desert-ant-shapes",
453
+ "description": "Recognize hand-drawn strokes as clean shapes with the Desert Ant Shapes model.",
454
+ "whenToUse": "Use in drawing or diagram tooling to snap an ink stroke to a geometric shape."
455
+ }
456
+ },
457
+ {
458
+ "id": "title",
459
+ "name": "Title",
460
+ "summary": "On-device titles and descriptions: a short factual title and a one- or two-sentence description for any passage.",
461
+ "capability": "text.title-generation",
462
+ "contract": null,
463
+ "input": "text",
464
+ "output": "{ title, description, isEmpty }",
465
+ "languages": null,
466
+ "modelSizeMB": null,
467
+ "appleOnly": true,
468
+ "closedBeta": false,
469
+ "verifiedRunnableOnWindows": false,
470
+ "windowsSupport": "apple-only",
471
+ "npmPackage": null,
472
+ "npmSubpath": null,
473
+ "requiresRuntime": [],
474
+ "cliVerb": "title",
475
+ "license": "source-available",
476
+ "docsUrl": "https://desertant.com/models/title/",
477
+ "hfRepo": "https://huggingface.co/desert-ant-labs/title",
478
+ "tool": {
479
+ "name": "suggest_title",
480
+ "description": "Write a short factual title and a one- or two-sentence description for a passage of text: a landing-page section, a documentation page or an article.",
481
+ "params": {
482
+ "text": "The passage to title.",
483
+ "max_tokens": {
484
+ "description": "Optional generation cap in tokens (default 96).",
485
+ "type": "integer"
486
+ }
487
+ },
488
+ "returns": "A title and a description, or an empty card when the model returned neither."
489
+ },
490
+ "skill": {
491
+ "name": "desert-ant-title",
492
+ "description": "Generate short factual titles and descriptions for passages with the Desert Ant Title model.",
493
+ "whenToUse": "Use when page sections, docs headings or article summaries need a title and one-line description."
494
+ }
495
+ },
496
+ {
497
+ "id": "tongue",
498
+ "name": "Tongue",
499
+ "summary": "On-device language identification for short text across 84 languages, from just a few words.",
500
+ "capability": "text.language-identification",
501
+ "contract": "text.language_detect",
502
+ "input": "text",
503
+ "output": "{ language, reliability, candidates: [{ language, probability }], isTooCloseToCall }",
504
+ "languages": 84,
505
+ "modelSizeMB": 2,
506
+ "appleOnly": false,
507
+ "closedBeta": false,
508
+ "verifiedRunnableOnWindows": true,
509
+ "windowsSupport": "native-node",
510
+ "npmPackage": "@desert-ant-labs/tongue",
511
+ "npmSubpath": null,
512
+ "requiresRuntime": [],
513
+ "cliVerb": "tongue",
514
+ "license": "source-available",
515
+ "docsUrl": "https://desertant.com/models/tongue/",
516
+ "hfRepo": "https://huggingface.co/desert-ant-labs/tongue",
517
+ "tool": {
518
+ "name": "lang_detect",
519
+ "description": "Identify the language of a short piece of text across 84 languages, on device, in microseconds. Works from as little as three words.",
520
+ "params": {
521
+ "text": "The text whose language to identify.",
522
+ "top": {
523
+ "description": "How many runner-up language candidates to include (default 3).",
524
+ "type": "integer"
525
+ }
526
+ },
527
+ "returns": "The detected language code, a reliability verdict, and the top scoring candidates with probabilities."
528
+ },
529
+ "skill": {
530
+ "name": "desert-ant-tongue",
531
+ "description": "Detect the language of short text on device with the Desert Ant Tongue model.",
532
+ "whenToUse": "Use before translating, routing to a locale-specific template, or checking that generated copy is in the expected language."
533
+ },
534
+ "provider": {
535
+ "extension": "@try-works/extension-desert-ant-tongue",
536
+ "modelId": "tongue"
537
+ }
538
+ },
539
+ {
540
+ "id": "toxic",
541
+ "name": "Toxic",
542
+ "summary": "On-device moderation that flags hateful, abusive and threatening text in 23 European languages.",
543
+ "capability": "text.toxicity-detection",
544
+ "contract": null,
545
+ "input": "text",
546
+ "output": "{ toxic, score, labels: [...] }",
547
+ "languages": 23,
548
+ "modelSizeMB": null,
549
+ "appleOnly": false,
550
+ "closedBeta": true,
551
+ "verifiedRunnableOnWindows": false,
552
+ "windowsSupport": "no-sdk",
553
+ "npmPackage": null,
554
+ "npmSubpath": null,
555
+ "requiresRuntime": [],
556
+ "cliVerb": null,
557
+ "license": "source-available",
558
+ "docsUrl": "https://desertant.com/models/toxic/",
559
+ "hfRepo": "https://huggingface.co/desert-ant-labs/toxic",
560
+ "tool": {
561
+ "name": "moderate_text",
562
+ "description": "Flag hateful, abusive and threatening text in 23 European languages, on device, before the message is sent.",
563
+ "params": {
564
+ "text": "The text to check.",
565
+ "minimum_confidence": {
566
+ "description": "Optional confidence floor between 0 and 1.",
567
+ "type": "number"
568
+ }
569
+ },
570
+ "returns": "A toxicity verdict with score and the matched labels."
571
+ },
572
+ "skill": {
573
+ "name": "desert-ant-toxic",
574
+ "description": "Screen text for hate speech and abuse on device with the Desert Ant Toxic model.",
575
+ "whenToUse": "Use to pre-screen user-generated text before publishing or forwarding it."
576
+ }
577
+ },
578
+ {
579
+ "id": "uhm",
580
+ "name": "Uhm",
581
+ "summary": "On-device filler detection that marks every um, uh and hmm to within 20ms, an hour of audio in 12s.",
582
+ "capability": "audio.filler-detection",
583
+ "contract": null,
584
+ "input": "audio",
585
+ "output": "[{ start, end, word }] filler spans to cut",
586
+ "languages": null,
587
+ "modelSizeMB": null,
588
+ "appleOnly": true,
589
+ "closedBeta": false,
590
+ "verifiedRunnableOnWindows": false,
591
+ "windowsSupport": "apple-only",
592
+ "npmPackage": null,
593
+ "npmSubpath": null,
594
+ "requiresRuntime": [],
595
+ "cliVerb": "uhm",
596
+ "license": "source-available",
597
+ "docsUrl": "https://desertant.com/models/uhm/",
598
+ "hfRepo": "https://huggingface.co/desert-ant-labs/uhm",
599
+ "tool": {
600
+ "name": "detect_fillers",
601
+ "description": "Find every um, uh and hmm in a recording with the exact span to cut.",
602
+ "params": {
603
+ "audio_path": "Absolute path to the audio or video file."
604
+ },
605
+ "returns": "Filler spans with start and end times in seconds, ready to cut."
606
+ },
607
+ "skill": {
608
+ "name": "desert-ant-uhm",
609
+ "description": "Detect filler words in speech on device with the Desert Ant Uhm model.",
610
+ "whenToUse": "Use when editing spoken audio to remove hesitations and tighten a transcript."
611
+ }
612
+ },
613
+ {
614
+ "id": "voz",
615
+ "name": "Voz",
616
+ "summary": "Transcribe 10 minutes of audio in 2s on an iPhone, 14x faster than Whisper, with word timestamps.",
617
+ "capability": "audio.speech-recognition",
618
+ "contract": "stt.transcribe",
619
+ "input": "audio",
620
+ "output": "{ text, words: [{ text, start, end }], realtimeFactor }",
621
+ "languages": 25,
622
+ "modelSizeMB": 349,
623
+ "appleOnly": false,
624
+ "closedBeta": false,
625
+ "verifiedRunnableOnWindows": true,
626
+ "windowsSupport": "onnxruntime-node",
627
+ "npmPackage": "@desert-ant-labs/voz",
628
+ "npmSubpath": null,
629
+ "requiresRuntime": [
630
+ "onnxruntime-node"
631
+ ],
632
+ "cliVerb": "voz",
633
+ "license": "source-available",
634
+ "docsUrl": "https://desertant.com/models/voz/",
635
+ "hfRepo": "https://huggingface.co/desert-ant-labs/voz",
636
+ "tool": {
637
+ "name": "transcribe_audio",
638
+ "description": "Transcribe an audio or video file on device with word-level timestamps across 25 languages. Nothing is uploaded and no API key is needed.",
639
+ "params": {
640
+ "audio_path": "Absolute path to the audio or video file, or a 16 kHz mono WAV.",
641
+ "include_words": {
642
+ "description": "Whether to include the per-word timestamps (default true).",
643
+ "type": "boolean"
644
+ }
645
+ },
646
+ "returns": "The transcript text, optional per-word start and end times, and the measured realtime factor."
647
+ },
648
+ "skill": {
649
+ "name": "desert-ant-voz",
650
+ "description": "Transcribe audio on device with word timestamps using the Desert Ant Voz model.",
651
+ "whenToUse": "Use to get a transcript or captions from a recording locally, without uploading audio to a hosted API."
652
+ },
653
+ "provider": {
654
+ "extension": "@try-works/extension-desert-ant-voz",
655
+ "modelId": "voz"
656
+ }
657
+ },
658
+ {
659
+ "id": "who",
660
+ "name": "Who",
661
+ "summary": "On-device speaker labeling that turns a recording into per-person turns with face boxes and timestamps.",
662
+ "capability": "audio.speaker-labeling",
663
+ "contract": null,
664
+ "input": "audio",
665
+ "output": "[{ speaker, start, end, face_box }] turns",
666
+ "languages": null,
667
+ "modelSizeMB": null,
668
+ "appleOnly": false,
669
+ "closedBeta": true,
670
+ "verifiedRunnableOnWindows": false,
671
+ "windowsSupport": "no-sdk",
672
+ "npmPackage": null,
673
+ "npmSubpath": null,
674
+ "requiresRuntime": [],
675
+ "cliVerb": null,
676
+ "license": "source-available",
677
+ "docsUrl": "https://desertant.com/models/who/",
678
+ "hfRepo": "https://huggingface.co/desert-ant-labs/who",
679
+ "tool": {
680
+ "name": "detect_speakers",
681
+ "description": "Split a recording into per-person speaking turns with timestamps and face boxes, ready to cut or caption.",
682
+ "params": {
683
+ "audio_path": "Absolute path to the audio or video file."
684
+ },
685
+ "returns": "Speaking turns labelled by speaker, with start and end times."
686
+ },
687
+ "skill": {
688
+ "name": "desert-ant-who",
689
+ "description": "Label speaker turns in a recording on device with the Desert Ant Who model.",
690
+ "whenToUse": "Use when a transcript or edit needs to know who spoke when."
691
+ }
692
+ }
693
+ ]