@elizaos/plugin-training 2.0.3-beta.5 → 2.0.3-beta.7

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 (363) hide show
  1. package/dist/backends/native.d.ts +96 -0
  2. package/dist/backends/native.d.ts.map +1 -0
  3. package/dist/backends/native.js +308 -0
  4. package/dist/backends/native.js.map +1 -0
  5. package/dist/cli/train.d.ts +22 -0
  6. package/dist/cli/train.d.ts.map +1 -0
  7. package/dist/cli/train.js +219 -0
  8. package/dist/cli/train.js.map +1 -0
  9. package/dist/core/action-benchmark-runner.d.ts +55 -0
  10. package/dist/core/action-benchmark-runner.d.ts.map +1 -0
  11. package/dist/core/action-benchmark-runner.js +341 -0
  12. package/dist/core/action-benchmark-runner.js.map +1 -0
  13. package/dist/core/artifact-store.d.ts +72 -0
  14. package/dist/core/artifact-store.d.ts.map +1 -0
  15. package/dist/core/artifact-store.js +50 -0
  16. package/dist/core/artifact-store.js.map +1 -0
  17. package/dist/core/benchmark-matrix-artifact.d.ts +102 -0
  18. package/dist/core/benchmark-matrix-artifact.d.ts.map +1 -0
  19. package/dist/core/benchmark-matrix-artifact.js +381 -0
  20. package/dist/core/benchmark-matrix-artifact.js.map +1 -0
  21. package/dist/core/benchmark-vs-cerebras-runner.d.ts +37 -0
  22. package/dist/core/benchmark-vs-cerebras-runner.d.ts.map +1 -0
  23. package/dist/core/benchmark-vs-cerebras-runner.js +151 -0
  24. package/dist/core/benchmark-vs-cerebras-runner.js.map +1 -0
  25. package/dist/core/cerebras-eval-model.d.ts +54 -0
  26. package/dist/core/cerebras-eval-model.d.ts.map +1 -0
  27. package/dist/core/cerebras-eval-model.js +249 -0
  28. package/dist/core/cerebras-eval-model.js.map +1 -0
  29. package/dist/core/cli.d.ts +15 -0
  30. package/dist/core/cli.d.ts.map +1 -0
  31. package/dist/core/cli.js +1003 -0
  32. package/dist/core/cli.js.map +1 -0
  33. package/dist/core/context-audit.d.ts +51 -0
  34. package/dist/core/context-audit.d.ts.map +1 -0
  35. package/dist/core/context-audit.js +166 -0
  36. package/dist/core/context-audit.js.map +1 -0
  37. package/dist/core/context-catalog.d.ts +47 -0
  38. package/dist/core/context-catalog.d.ts.map +1 -0
  39. package/dist/core/context-catalog.js +269 -0
  40. package/dist/core/context-catalog.js.map +1 -0
  41. package/dist/core/context-types.d.ts +3 -0
  42. package/dist/core/context-types.d.ts.map +1 -0
  43. package/dist/core/context-types.js +18 -0
  44. package/dist/core/context-types.js.map +1 -0
  45. package/dist/core/dataset-generator.d.ts +135 -0
  46. package/dist/core/dataset-generator.d.ts.map +1 -0
  47. package/dist/core/dataset-generator.js +895 -0
  48. package/dist/core/dataset-generator.js.map +1 -0
  49. package/dist/core/eliza1-benchmark-recipe.d.ts +18 -0
  50. package/dist/core/eliza1-benchmark-recipe.d.ts.map +1 -0
  51. package/dist/core/eliza1-benchmark-recipe.js +64 -0
  52. package/dist/core/eliza1-benchmark-recipe.js.map +1 -0
  53. package/dist/core/eliza1-bundle-stager.d.ts +57 -0
  54. package/dist/core/eliza1-bundle-stager.d.ts.map +1 -0
  55. package/dist/core/eliza1-bundle-stager.js +149 -0
  56. package/dist/core/eliza1-bundle-stager.js.map +1 -0
  57. package/dist/core/ensure-cron-job.d.ts +53 -0
  58. package/dist/core/ensure-cron-job.d.ts.map +1 -0
  59. package/dist/core/ensure-cron-job.js +51 -0
  60. package/dist/core/ensure-cron-job.js.map +1 -0
  61. package/dist/core/eval-comparison-artifact.d.ts +72 -0
  62. package/dist/core/eval-comparison-artifact.d.ts.map +1 -0
  63. package/dist/core/eval-comparison-artifact.js +281 -0
  64. package/dist/core/eval-comparison-artifact.js.map +1 -0
  65. package/dist/core/feed-generation-runner.d.ts +37 -0
  66. package/dist/core/feed-generation-runner.d.ts.map +1 -0
  67. package/dist/core/feed-generation-runner.js +232 -0
  68. package/dist/core/feed-generation-runner.js.map +1 -0
  69. package/dist/core/html-escape.d.ts +5 -0
  70. package/dist/core/html-escape.d.ts.map +1 -0
  71. package/dist/core/html-escape.js +11 -0
  72. package/dist/core/html-escape.js.map +1 -0
  73. package/dist/core/huggingface-dataset-ingest.d.ts +52 -0
  74. package/dist/core/huggingface-dataset-ingest.d.ts.map +1 -0
  75. package/dist/core/huggingface-dataset-ingest.js +134 -0
  76. package/dist/core/huggingface-dataset-ingest.js.map +1 -0
  77. package/dist/core/index.d.ts +29 -0
  78. package/dist/core/index.d.ts.map +1 -0
  79. package/dist/core/index.js +204 -0
  80. package/dist/core/index.js.map +1 -0
  81. package/dist/core/privacy-filter.d.ts +95 -0
  82. package/dist/core/privacy-filter.d.ts.map +1 -0
  83. package/dist/core/privacy-filter.js +324 -0
  84. package/dist/core/privacy-filter.js.map +1 -0
  85. package/dist/core/promotion-gate.d.ts +117 -0
  86. package/dist/core/promotion-gate.d.ts.map +1 -0
  87. package/dist/core/promotion-gate.js +85 -0
  88. package/dist/core/promotion-gate.js.map +1 -0
  89. package/dist/core/promotion-persist.d.ts +116 -0
  90. package/dist/core/promotion-persist.d.ts.map +1 -0
  91. package/dist/core/promotion-persist.js +93 -0
  92. package/dist/core/promotion-persist.js.map +1 -0
  93. package/dist/core/prompt-compare.d.ts +99 -0
  94. package/dist/core/prompt-compare.d.ts.map +1 -0
  95. package/dist/core/prompt-compare.js +210 -0
  96. package/dist/core/prompt-compare.js.map +1 -0
  97. package/dist/core/replay-validator.d.ts +136 -0
  98. package/dist/core/replay-validator.d.ts.map +1 -0
  99. package/dist/core/replay-validator.js +312 -0
  100. package/dist/core/replay-validator.js.map +1 -0
  101. package/dist/core/roleplay-executor.d.ts +123 -0
  102. package/dist/core/roleplay-executor.d.ts.map +1 -0
  103. package/dist/core/roleplay-executor.js +675 -0
  104. package/dist/core/roleplay-executor.js.map +1 -0
  105. package/dist/core/roleplay-trajectories.d.ts +54 -0
  106. package/dist/core/roleplay-trajectories.d.ts.map +1 -0
  107. package/dist/core/roleplay-trajectories.js +88 -0
  108. package/dist/core/roleplay-trajectories.js.map +1 -0
  109. package/dist/core/scenario-blueprints.d.ts +62 -0
  110. package/dist/core/scenario-blueprints.d.ts.map +1 -0
  111. package/dist/core/scenario-blueprints.js +850 -0
  112. package/dist/core/scenario-blueprints.js.map +1 -0
  113. package/dist/core/scenario-runner.d.ts +36 -0
  114. package/dist/core/scenario-runner.d.ts.map +1 -0
  115. package/dist/core/scenario-runner.js +216 -0
  116. package/dist/core/scenario-runner.js.map +1 -0
  117. package/dist/core/skill-scoring-cron.d.ts +57 -0
  118. package/dist/core/skill-scoring-cron.d.ts.map +1 -0
  119. package/dist/core/skill-scoring-cron.js +180 -0
  120. package/dist/core/skill-scoring-cron.js.map +1 -0
  121. package/dist/core/test-trajectory-collector.d.ts +37 -0
  122. package/dist/core/test-trajectory-collector.d.ts.map +1 -0
  123. package/dist/core/test-trajectory-collector.js +225 -0
  124. package/dist/core/test-trajectory-collector.js.map +1 -0
  125. package/dist/core/track-c-queue-task.d.ts +37 -0
  126. package/dist/core/track-c-queue-task.d.ts.map +1 -0
  127. package/dist/core/track-c-queue-task.js +104 -0
  128. package/dist/core/track-c-queue-task.js.map +1 -0
  129. package/dist/core/training-analysis-index.d.ts +104 -0
  130. package/dist/core/training-analysis-index.d.ts.map +1 -0
  131. package/dist/core/training-analysis-index.js +3297 -0
  132. package/dist/core/training-analysis-index.js.map +1 -0
  133. package/dist/core/training-collection-runner.d.ts +508 -0
  134. package/dist/core/training-collection-runner.d.ts.map +1 -0
  135. package/dist/core/training-collection-runner.js +2299 -0
  136. package/dist/core/training-collection-runner.js.map +1 -0
  137. package/dist/core/training-config.d.ts +52 -0
  138. package/dist/core/training-config.d.ts.map +1 -0
  139. package/dist/core/training-config.js +117 -0
  140. package/dist/core/training-config.js.map +1 -0
  141. package/dist/core/training-orchestrator.d.ts +112 -0
  142. package/dist/core/training-orchestrator.d.ts.map +1 -0
  143. package/dist/core/training-orchestrator.js +729 -0
  144. package/dist/core/training-orchestrator.js.map +1 -0
  145. package/dist/core/training-readiness-report.d.ts +52 -0
  146. package/dist/core/training-readiness-report.d.ts.map +1 -0
  147. package/dist/core/training-readiness-report.js +765 -0
  148. package/dist/core/training-readiness-report.js.map +1 -0
  149. package/dist/core/trajectory-consumer.d.ts +15 -0
  150. package/dist/core/trajectory-consumer.d.ts.map +1 -0
  151. package/dist/core/trajectory-consumer.js +61 -0
  152. package/dist/core/trajectory-consumer.js.map +1 -0
  153. package/dist/core/trajectory-export-bundle.d.ts +95 -0
  154. package/dist/core/trajectory-export-bundle.d.ts.map +1 -0
  155. package/dist/core/trajectory-export-bundle.js +561 -0
  156. package/dist/core/trajectory-export-bundle.js.map +1 -0
  157. package/dist/core/trajectory-export-cron.d.ts +57 -0
  158. package/dist/core/trajectory-export-cron.d.ts.map +1 -0
  159. package/dist/core/trajectory-export-cron.js +170 -0
  160. package/dist/core/trajectory-export-cron.js.map +1 -0
  161. package/dist/core/trajectory-hf-upload.d.ts +50 -0
  162. package/dist/core/trajectory-hf-upload.d.ts.map +1 -0
  163. package/dist/core/trajectory-hf-upload.js +111 -0
  164. package/dist/core/trajectory-hf-upload.js.map +1 -0
  165. package/dist/core/trajectory-task-datasets.d.ts +62 -0
  166. package/dist/core/trajectory-task-datasets.d.ts.map +1 -0
  167. package/dist/core/trajectory-task-datasets.js +427 -0
  168. package/dist/core/trajectory-task-datasets.js.map +1 -0
  169. package/dist/core/wait-for-service.d.ts +25 -0
  170. package/dist/core/wait-for-service.d.ts.map +1 -0
  171. package/dist/core/wait-for-service.js +19 -0
  172. package/dist/core/wait-for-service.js.map +1 -0
  173. package/dist/core/workspace-runtime.d.ts +4 -0
  174. package/dist/core/workspace-runtime.d.ts.map +1 -0
  175. package/dist/core/workspace-runtime.js +25 -0
  176. package/dist/core/workspace-runtime.js.map +1 -0
  177. package/dist/dspy/artifact.d.ts +54 -0
  178. package/dist/dspy/artifact.d.ts.map +1 -0
  179. package/dist/dspy/artifact.js +61 -0
  180. package/dist/dspy/artifact.js.map +1 -0
  181. package/dist/dspy/chain-of-thought.d.ts +27 -0
  182. package/dist/dspy/chain-of-thought.d.ts.map +1 -0
  183. package/dist/dspy/chain-of-thought.js +43 -0
  184. package/dist/dspy/chain-of-thought.js.map +1 -0
  185. package/dist/dspy/examples.d.ts +72 -0
  186. package/dist/dspy/examples.d.ts.map +1 -0
  187. package/dist/dspy/examples.js +105 -0
  188. package/dist/dspy/examples.js.map +1 -0
  189. package/dist/dspy/index.d.ts +15 -0
  190. package/dist/dspy/index.d.ts.map +1 -0
  191. package/dist/dspy/index.js +40 -0
  192. package/dist/dspy/index.js.map +1 -0
  193. package/dist/dspy/lm-adapter.d.ts +100 -0
  194. package/dist/dspy/lm-adapter.d.ts.map +1 -0
  195. package/dist/dspy/lm-adapter.js +81 -0
  196. package/dist/dspy/lm-adapter.js.map +1 -0
  197. package/dist/dspy/optimizers/dspy-bootstrap-fewshot.d.ts +23 -0
  198. package/dist/dspy/optimizers/dspy-bootstrap-fewshot.d.ts.map +1 -0
  199. package/dist/dspy/optimizers/dspy-bootstrap-fewshot.js +85 -0
  200. package/dist/dspy/optimizers/dspy-bootstrap-fewshot.js.map +1 -0
  201. package/dist/dspy/optimizers/dspy-copro.d.ts +29 -0
  202. package/dist/dspy/optimizers/dspy-copro.d.ts.map +1 -0
  203. package/dist/dspy/optimizers/dspy-copro.js +141 -0
  204. package/dist/dspy/optimizers/dspy-copro.js.map +1 -0
  205. package/dist/dspy/optimizers/dspy-mipro.d.ts +37 -0
  206. package/dist/dspy/optimizers/dspy-mipro.d.ts.map +1 -0
  207. package/dist/dspy/optimizers/dspy-mipro.js +194 -0
  208. package/dist/dspy/optimizers/dspy-mipro.js.map +1 -0
  209. package/dist/dspy/optimizers/index.d.ts +5 -0
  210. package/dist/dspy/optimizers/index.d.ts.map +1 -0
  211. package/dist/dspy/optimizers/index.js +11 -0
  212. package/dist/dspy/optimizers/index.js.map +1 -0
  213. package/dist/dspy/optimizers/types.d.ts +39 -0
  214. package/dist/dspy/optimizers/types.d.ts.map +1 -0
  215. package/dist/dspy/optimizers/types.js +1 -0
  216. package/dist/dspy/optimizers/types.js.map +1 -0
  217. package/dist/dspy/predict.d.ts +49 -0
  218. package/dist/dspy/predict.d.ts.map +1 -0
  219. package/dist/dspy/predict.js +73 -0
  220. package/dist/dspy/predict.js.map +1 -0
  221. package/dist/dspy/signature.d.ts +88 -0
  222. package/dist/dspy/signature.d.ts.map +1 -0
  223. package/dist/dspy/signature.js +205 -0
  224. package/dist/dspy/signature.js.map +1 -0
  225. package/dist/index.d.ts +15 -0
  226. package/dist/index.d.ts.map +1 -0
  227. package/dist/index.js +15 -0
  228. package/dist/index.js.map +1 -0
  229. package/dist/optimizers/bootstrap-fewshot.d.ts +42 -0
  230. package/dist/optimizers/bootstrap-fewshot.d.ts.map +1 -0
  231. package/dist/optimizers/bootstrap-fewshot.js +92 -0
  232. package/dist/optimizers/bootstrap-fewshot.js.map +1 -0
  233. package/dist/optimizers/gepa.d.ts +63 -0
  234. package/dist/optimizers/gepa.d.ts.map +1 -0
  235. package/dist/optimizers/gepa.js +232 -0
  236. package/dist/optimizers/gepa.js.map +1 -0
  237. package/dist/optimizers/index.d.ts +7 -0
  238. package/dist/optimizers/index.d.ts.map +1 -0
  239. package/dist/optimizers/index.js +51 -0
  240. package/dist/optimizers/index.js.map +1 -0
  241. package/dist/optimizers/instruction-search.d.ts +39 -0
  242. package/dist/optimizers/instruction-search.d.ts.map +1 -0
  243. package/dist/optimizers/instruction-search.js +108 -0
  244. package/dist/optimizers/instruction-search.js.map +1 -0
  245. package/dist/optimizers/prompt-evolution.d.ts +39 -0
  246. package/dist/optimizers/prompt-evolution.d.ts.map +1 -0
  247. package/dist/optimizers/prompt-evolution.js +101 -0
  248. package/dist/optimizers/prompt-evolution.js.map +1 -0
  249. package/dist/optimizers/scoring.d.ts +139 -0
  250. package/dist/optimizers/scoring.d.ts.map +1 -0
  251. package/dist/optimizers/scoring.js +299 -0
  252. package/dist/optimizers/scoring.js.map +1 -0
  253. package/dist/optimizers/types.d.ts +105 -0
  254. package/dist/optimizers/types.d.ts.map +1 -0
  255. package/dist/optimizers/types.js +1 -0
  256. package/dist/optimizers/types.js.map +1 -0
  257. package/dist/register-runtime.d.ts +3 -0
  258. package/dist/register-runtime.d.ts.map +1 -0
  259. package/dist/register-runtime.js +60 -0
  260. package/dist/register-runtime.js.map +1 -0
  261. package/dist/register-terminal-view.d.ts +15 -0
  262. package/dist/register-terminal-view.d.ts.map +1 -0
  263. package/dist/register-terminal-view.js +31 -0
  264. package/dist/register-terminal-view.js.map +1 -0
  265. package/dist/routes/experience-routes.d.ts +21 -0
  266. package/dist/routes/experience-routes.d.ts.map +1 -0
  267. package/dist/routes/experience-routes.js +513 -0
  268. package/dist/routes/experience-routes.js.map +1 -0
  269. package/dist/routes/index.d.ts +5 -0
  270. package/dist/routes/index.d.ts.map +1 -0
  271. package/dist/routes/index.js +17 -0
  272. package/dist/routes/index.js.map +1 -0
  273. package/dist/routes/training-routes.d.ts +10 -0
  274. package/dist/routes/training-routes.d.ts.map +1 -0
  275. package/dist/routes/training-routes.js +1239 -0
  276. package/dist/routes/training-routes.js.map +1 -0
  277. package/dist/routes/training-vast-routes.d.ts +35 -0
  278. package/dist/routes/training-vast-routes.d.ts.map +1 -0
  279. package/dist/routes/training-vast-routes.js +249 -0
  280. package/dist/routes/training-vast-routes.js.map +1 -0
  281. package/dist/routes/trajectory-routes.d.ts +19 -0
  282. package/dist/routes/trajectory-routes.d.ts.map +1 -0
  283. package/dist/routes/trajectory-routes.js +1122 -0
  284. package/dist/routes/trajectory-routes.js.map +1 -0
  285. package/dist/services/index.d.ts +9 -0
  286. package/dist/services/index.d.ts.map +1 -0
  287. package/dist/services/index.js +63 -0
  288. package/dist/services/index.js.map +1 -0
  289. package/dist/services/training-backend-check.d.ts +8 -0
  290. package/dist/services/training-backend-check.d.ts.map +1 -0
  291. package/dist/services/training-backend-check.js +31 -0
  292. package/dist/services/training-backend-check.js.map +1 -0
  293. package/dist/services/training-service-like.d.ts +40 -0
  294. package/dist/services/training-service-like.d.ts.map +1 -0
  295. package/dist/services/training-service-like.js +1 -0
  296. package/dist/services/training-service-like.js.map +1 -0
  297. package/dist/services/training-service-registry.d.ts +4 -0
  298. package/dist/services/training-service-registry.d.ts.map +1 -0
  299. package/dist/services/training-service-registry.js +12 -0
  300. package/dist/services/training-service-registry.js.map +1 -0
  301. package/dist/services/training-service.d.ts +59 -0
  302. package/dist/services/training-service.d.ts.map +1 -0
  303. package/dist/services/training-service.js +154 -0
  304. package/dist/services/training-service.js.map +1 -0
  305. package/dist/services/training-trigger.d.ts +177 -0
  306. package/dist/services/training-trigger.d.ts.map +1 -0
  307. package/dist/services/training-trigger.js +300 -0
  308. package/dist/services/training-trigger.js.map +1 -0
  309. package/dist/services/training-vast-service.d.ts +149 -0
  310. package/dist/services/training-vast-service.d.ts.map +1 -0
  311. package/dist/services/training-vast-service.js +648 -0
  312. package/dist/services/training-vast-service.js.map +1 -0
  313. package/dist/services/vast-inference-stats.d.ts +37 -0
  314. package/dist/services/vast-inference-stats.d.ts.map +1 -0
  315. package/dist/services/vast-inference-stats.js +81 -0
  316. package/dist/services/vast-inference-stats.js.map +1 -0
  317. package/dist/services/vast-job-store.d.ts +74 -0
  318. package/dist/services/vast-job-store.d.ts.map +1 -0
  319. package/dist/services/vast-job-store.js +194 -0
  320. package/dist/services/vast-job-store.js.map +1 -0
  321. package/dist/services/vast-subprocess.d.ts +27 -0
  322. package/dist/services/vast-subprocess.d.ts.map +1 -0
  323. package/dist/services/vast-subprocess.js +78 -0
  324. package/dist/services/vast-subprocess.js.map +1 -0
  325. package/dist/setup-routes.d.ts +17 -0
  326. package/dist/setup-routes.d.ts.map +1 -0
  327. package/dist/setup-routes.js +319 -0
  328. package/dist/setup-routes.js.map +1 -0
  329. package/dist/ui/FineTuningSpatialView.d.ts +49 -0
  330. package/dist/ui/FineTuningSpatialView.d.ts.map +1 -0
  331. package/dist/ui/FineTuningSpatialView.js +154 -0
  332. package/dist/ui/FineTuningSpatialView.js.map +1 -0
  333. package/dist/ui/FineTuningView.d.ts +7 -0
  334. package/dist/ui/FineTuningView.d.ts.map +1 -0
  335. package/dist/ui/FineTuningView.helpers.d.ts +17 -0
  336. package/dist/ui/FineTuningView.helpers.d.ts.map +1 -0
  337. package/dist/ui/FineTuningView.helpers.js +30 -0
  338. package/dist/ui/FineTuningView.helpers.js.map +1 -0
  339. package/dist/ui/FineTuningView.interact.d.ts +2 -0
  340. package/dist/ui/FineTuningView.interact.d.ts.map +1 -0
  341. package/dist/ui/FineTuningView.interact.js +300 -0
  342. package/dist/ui/FineTuningView.interact.js.map +1 -0
  343. package/dist/ui/FineTuningView.js +4653 -0
  344. package/dist/ui/FineTuningView.js.map +1 -0
  345. package/dist/ui/fine-tuning-panels.d.ts +100 -0
  346. package/dist/ui/fine-tuning-panels.d.ts.map +1 -0
  347. package/dist/ui/fine-tuning-panels.helpers.d.ts +19 -0
  348. package/dist/ui/fine-tuning-panels.helpers.d.ts.map +1 -0
  349. package/dist/ui/fine-tuning-panels.helpers.js +77 -0
  350. package/dist/ui/fine-tuning-panels.helpers.js.map +1 -0
  351. package/dist/ui/fine-tuning-panels.js +928 -0
  352. package/dist/ui/fine-tuning-panels.js.map +1 -0
  353. package/dist/ui/index.d.ts +5 -0
  354. package/dist/ui/index.d.ts.map +1 -0
  355. package/dist/ui/index.js +5 -0
  356. package/dist/ui/index.js.map +1 -0
  357. package/dist/ui/training-view-bundle.d.ts +3 -0
  358. package/dist/ui/training-view-bundle.d.ts.map +1 -0
  359. package/dist/ui/training-view-bundle.js +7 -0
  360. package/dist/ui/training-view-bundle.js.map +1 -0
  361. package/dist/views/bundle.js +5312 -0
  362. package/dist/views/bundle.js.map +1 -0
  363. package/package.json +7 -7
@@ -0,0 +1,928 @@
1
+ import { jsx, jsxs } from "react/jsx-runtime";
2
+ import { useAgentElement } from "@elizaos/ui/agent-surface";
3
+ import { Button, Input } from "@elizaos/ui/components";
4
+ import {
5
+ Select,
6
+ SelectContent,
7
+ SelectItem,
8
+ SelectValue
9
+ } from "@elizaos/ui/components/ui/select";
10
+ import { SettingsControls } from "@elizaos/ui/components/ui/settings-controls";
11
+ import { formatTime } from "@elizaos/ui/utils";
12
+ import { memo } from "react";
13
+ import {
14
+ FINE_TUNING_ACTION_CLASS,
15
+ FINE_TUNING_PANEL_CLASS,
16
+ FINE_TUNING_SECTION_CLASS,
17
+ FINE_TUNING_SECTION_HEADER_CLASS,
18
+ formatDate,
19
+ formatProgress,
20
+ summarizeAvailability
21
+ } from "./fine-tuning-panels.helpers";
22
+ const FILTER_INPUT_CLASS = "h-10 rounded-sm border-border/50 bg-bg/80 text-sm text-txt ";
23
+ function AgentActionButton({
24
+ agentId,
25
+ label,
26
+ group,
27
+ description,
28
+ variant = "outline",
29
+ size = "sm",
30
+ className,
31
+ disabled,
32
+ onClick,
33
+ children
34
+ }) {
35
+ const { ref, agentProps } = useAgentElement({
36
+ id: agentId,
37
+ role: "button",
38
+ label,
39
+ group,
40
+ description,
41
+ onActivate: onClick
42
+ });
43
+ return /* @__PURE__ */ jsx(
44
+ Button,
45
+ {
46
+ ref,
47
+ variant,
48
+ size,
49
+ className,
50
+ disabled,
51
+ onClick,
52
+ "aria-label": label,
53
+ ...agentProps,
54
+ children
55
+ }
56
+ );
57
+ }
58
+ function AgentTextInput({
59
+ agentId,
60
+ label,
61
+ group,
62
+ description,
63
+ value,
64
+ onChange,
65
+ placeholder
66
+ }) {
67
+ const { ref, agentProps } = useAgentElement({
68
+ id: agentId,
69
+ role: "text-input",
70
+ label,
71
+ group,
72
+ description,
73
+ getValue: () => value,
74
+ onFill: onChange
75
+ });
76
+ return /* @__PURE__ */ jsx(
77
+ Input,
78
+ {
79
+ ref,
80
+ className: FILTER_INPUT_CLASS,
81
+ value,
82
+ onChange: (event) => onChange(event.target.value),
83
+ placeholder,
84
+ "aria-label": label,
85
+ ...agentProps
86
+ }
87
+ );
88
+ }
89
+ function AgentSelect({
90
+ agentId,
91
+ label,
92
+ group,
93
+ description,
94
+ value,
95
+ onValueChange,
96
+ options,
97
+ placeholder,
98
+ children
99
+ }) {
100
+ const { ref, agentProps } = useAgentElement({
101
+ id: agentId,
102
+ role: "select",
103
+ label,
104
+ group,
105
+ description,
106
+ options,
107
+ getValue: () => value,
108
+ onFill: (next) => onValueChange(next)
109
+ });
110
+ return /* @__PURE__ */ jsxs(Select, { value, onValueChange, children: [
111
+ /* @__PURE__ */ jsx(
112
+ SettingsControls.SelectTrigger,
113
+ {
114
+ ref,
115
+ variant: "toolbar",
116
+ "aria-label": label,
117
+ ...agentProps,
118
+ children: /* @__PURE__ */ jsx(SelectValue, { placeholder })
119
+ }
120
+ ),
121
+ children
122
+ ] });
123
+ }
124
+ const TrajectoryListItem = memo(function TrajectoryListItem2({
125
+ trajectory,
126
+ onSelectTrajectory,
127
+ t
128
+ }) {
129
+ const { ref, agentProps } = useAgentElement({
130
+ id: `trajectory-item-${trajectory.trajectoryId}`,
131
+ role: "list-item",
132
+ label: `Trajectory ${trajectory.trajectoryId}`,
133
+ group: "trajectory-list",
134
+ description: "Inspect this trajectory",
135
+ onActivate: () => onSelectTrajectory(trajectory.trajectoryId)
136
+ });
137
+ return /* @__PURE__ */ jsxs(
138
+ Button,
139
+ {
140
+ ref,
141
+ variant: "ghost",
142
+ className: "w-full justify-start rounded-none px-3 py-3 text-left text-xs hover:bg-bg-hover",
143
+ onClick: () => onSelectTrajectory(trajectory.trajectoryId),
144
+ ...agentProps,
145
+ children: [
146
+ /* @__PURE__ */ jsx("div", { className: "font-mono", children: trajectory.trajectoryId }),
147
+ /* @__PURE__ */ jsxs("div", { className: "text-muted mt-1", children: [
148
+ t("finetuningview.Calls"),
149
+ " ",
150
+ trajectory.llmCallCount,
151
+ " ",
152
+ t("finetuningview.Reward"),
153
+ " ",
154
+ trajectory.totalReward ?? "n/a",
155
+ " \xB7",
156
+ " ",
157
+ formatDate(trajectory.createdAt)
158
+ ] })
159
+ ]
160
+ }
161
+ );
162
+ });
163
+ const DatasetRadioItem = memo(function DatasetRadioItem2({
164
+ dataset,
165
+ selectedDatasetId,
166
+ setSelectedDatasetId,
167
+ t
168
+ }) {
169
+ const checked = selectedDatasetId === dataset.id;
170
+ const { ref, agentProps } = useAgentElement({
171
+ id: `dataset-select-${dataset.id}`,
172
+ role: "list-item",
173
+ label: `Select dataset ${dataset.id}`,
174
+ group: "dataset-list",
175
+ description: "Choose this dataset for training",
176
+ status: checked ? "active" : "inactive",
177
+ onActivate: () => setSelectedDatasetId(dataset.id)
178
+ });
179
+ return /* @__PURE__ */ jsxs("label", { className: "flex min-h-touch cursor-pointer items-center gap-3 rounded-xl border border-border/35 bg-bg/20 px-3 py-3 text-sm transition-colors hover:border-border/55 hover:bg-bg/35", children: [
180
+ /* @__PURE__ */ jsx(
181
+ "input",
182
+ {
183
+ ref,
184
+ type: "radio",
185
+ name: "dataset-select",
186
+ checked,
187
+ onChange: () => setSelectedDatasetId(dataset.id),
188
+ "aria-current": checked ? "true" : void 0,
189
+ ...agentProps
190
+ }
191
+ ),
192
+ /* @__PURE__ */ jsxs("div", { className: "min-w-0 flex-1", children: [
193
+ /* @__PURE__ */ jsx("div", { className: "font-mono text-sm text-txt", children: dataset.id }),
194
+ /* @__PURE__ */ jsxs("div", { className: "mt-1 text-xs text-muted", children: [
195
+ dataset.sampleCount,
196
+ " ",
197
+ t("finetuningview.samples"),
198
+ " ",
199
+ dataset.trajectoryCount,
200
+ " ",
201
+ t("finetuningview.trajectories")
202
+ ] })
203
+ ] })
204
+ ] });
205
+ });
206
+ const JobListItem = memo(function JobListItem2({
207
+ job,
208
+ selectedJobId,
209
+ setSelectedJobId,
210
+ cancellingJobId,
211
+ onCancelJob,
212
+ t
213
+ }) {
214
+ const { ref: selectRef, agentProps: selectProps } = useAgentElement({
215
+ id: `job-item-${job.id}`,
216
+ role: "list-item",
217
+ label: `Select job ${job.id}`,
218
+ group: "job-list",
219
+ description: "Inspect this training job's logs",
220
+ status: selectedJobId === job.id ? "active" : "inactive",
221
+ onActivate: () => setSelectedJobId(job.id)
222
+ });
223
+ const cancellable = job.status === "running" || job.status === "queued";
224
+ const { ref: cancelRef, agentProps: cancelProps } = useAgentElement({
225
+ id: `job-cancel-${job.id}`,
226
+ role: "button",
227
+ label: `Cancel job ${job.id}`,
228
+ group: "job-list",
229
+ description: "Cancel this training job",
230
+ onActivate: () => onCancelJob(job.id)
231
+ });
232
+ return /* @__PURE__ */ jsxs(
233
+ "div",
234
+ {
235
+ className: `px-3 py-3 text-sm ${selectedJobId === job.id ? "bg-bg-hover" : ""}`,
236
+ children: [
237
+ /* @__PURE__ */ jsxs("div", { className: "flex items-center justify-between gap-2", children: [
238
+ /* @__PURE__ */ jsx(
239
+ Button,
240
+ {
241
+ ref: selectRef,
242
+ variant: "link",
243
+ className: "h-auto w-auto justify-start p-0 text-left font-mono text-sm",
244
+ onClick: () => setSelectedJobId(job.id),
245
+ ...selectProps,
246
+ children: job.id
247
+ }
248
+ ),
249
+ cancellable && /* @__PURE__ */ jsx(
250
+ Button,
251
+ {
252
+ ref: cancelRef,
253
+ variant: "outline",
254
+ size: "sm",
255
+ className: "h-8 rounded-xl border-danger/35 px-3 text-xs-tight text-danger shadow-sm hover:border-danger hover:bg-danger/10 disabled:opacity-50",
256
+ disabled: cancellingJobId === job.id,
257
+ onClick: () => onCancelJob(job.id),
258
+ ...cancelProps,
259
+ children: cancellingJobId === job.id ? t("finetuningview.Cancelling") : t("finetuningview.Cancel")
260
+ }
261
+ )
262
+ ] }),
263
+ /* @__PURE__ */ jsxs("div", { className: "mt-1 text-xs text-muted", children: [
264
+ job.status,
265
+ " \xB7 ",
266
+ formatProgress(job.progress),
267
+ " \xB7 ",
268
+ job.phase
269
+ ] }),
270
+ /* @__PURE__ */ jsx("div", { className: "text-xs text-muted", children: formatDate(job.createdAt) })
271
+ ]
272
+ }
273
+ );
274
+ });
275
+ const ModelListItem = memo(function ModelListItem2({
276
+ model,
277
+ selectedModelId,
278
+ setSelectedModelId,
279
+ t
280
+ }) {
281
+ const { ref, agentProps } = useAgentElement({
282
+ id: `model-item-${model.id}`,
283
+ role: "list-item",
284
+ label: `Select model ${model.id}`,
285
+ group: "model-list",
286
+ description: "Choose this trained model for actions",
287
+ status: selectedModelId === model.id ? "active" : "inactive",
288
+ onActivate: () => setSelectedModelId(model.id)
289
+ });
290
+ return /* @__PURE__ */ jsxs(
291
+ Button,
292
+ {
293
+ ref,
294
+ variant: "ghost",
295
+ className: `w-full justify-start rounded-none px-3 py-3 text-left text-sm ${selectedModelId === model.id ? "bg-bg-hover" : "hover:bg-bg-hover"}`,
296
+ onClick: () => setSelectedModelId(model.id),
297
+ ...agentProps,
298
+ children: [
299
+ /* @__PURE__ */ jsxs("div", { className: "font-mono", children: [
300
+ model.id,
301
+ " ",
302
+ model.active ? t("finetuningview.ActiveIndicator") : ""
303
+ ] }),
304
+ /* @__PURE__ */ jsxs("div", { className: "mt-1 text-xs text-muted", children: [
305
+ t("finetuningview.backend"),
306
+ " ",
307
+ model.backend,
308
+ model.ollamaModel ? ` \xB7 ollama: ${model.ollamaModel}` : ""
309
+ ] }),
310
+ /* @__PURE__ */ jsxs("div", { className: "text-xs text-muted", children: [
311
+ t("finetuningview.benchmark"),
312
+ " ",
313
+ model.benchmark.status,
314
+ model.benchmark.lastRunAt ? ` \xB7 ${formatDate(model.benchmark.lastRunAt)}` : ""
315
+ ] })
316
+ ]
317
+ }
318
+ );
319
+ });
320
+ function TrajectoriesSection({
321
+ trajectoryList,
322
+ selectedTrajectory,
323
+ trajectoryLoading,
324
+ publishingTrajectories,
325
+ publishConfigured,
326
+ onRefresh,
327
+ onSelectTrajectory,
328
+ onPublishTrajectories,
329
+ t
330
+ }) {
331
+ return /* @__PURE__ */ jsxs("section", { className: FINE_TUNING_SECTION_CLASS, children: [
332
+ /* @__PURE__ */ jsxs("div", { className: FINE_TUNING_SECTION_HEADER_CLASS, children: [
333
+ /* @__PURE__ */ jsx("div", { className: "text-lg font-semibold text-txt", children: t("finetuningview.Trajectories") }),
334
+ /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2", children: [
335
+ /* @__PURE__ */ jsx(
336
+ AgentActionButton,
337
+ {
338
+ agentId: "trajectories-publish",
339
+ label: "Publish trajectories to HuggingFace",
340
+ group: "trajectories",
341
+ description: "Publish collected trajectories to HuggingFace",
342
+ className: FINE_TUNING_ACTION_CLASS,
343
+ disabled: publishingTrajectories || !publishConfigured,
344
+ onClick: onPublishTrajectories,
345
+ children: publishingTrajectories ? t("finetuningview.Publishing") : t("finetuningview.PublishToHuggingFace")
346
+ }
347
+ ),
348
+ /* @__PURE__ */ jsx(
349
+ AgentActionButton,
350
+ {
351
+ agentId: "trajectories-refresh",
352
+ label: "Refresh trajectories",
353
+ group: "trajectories",
354
+ description: "Reload the trajectory list",
355
+ className: FINE_TUNING_ACTION_CLASS,
356
+ onClick: onRefresh,
357
+ children: t("common.refresh")
358
+ }
359
+ )
360
+ ] })
361
+ ] }),
362
+ !trajectoryList.available ? /* @__PURE__ */ jsx(
363
+ "div",
364
+ {
365
+ className: `${FINE_TUNING_PANEL_CLASS} px-4 py-4 text-sm text-muted`,
366
+ children: summarizeAvailability(trajectoryList.reason, t)
367
+ }
368
+ ) : /* @__PURE__ */ jsxs("div", { className: "space-y-3", children: [
369
+ /* @__PURE__ */ jsxs("div", { className: "text-xs text-muted", children: [
370
+ trajectoryList.total,
371
+ " ",
372
+ t("finetuningview.trajectoryRowsAvai")
373
+ ] }),
374
+ /* @__PURE__ */ jsxs("div", { className: "grid grid-cols-1 gap-3", children: [
375
+ /* @__PURE__ */ jsx("div", { className: FINE_TUNING_PANEL_CLASS, children: /* @__PURE__ */ jsx("div", { className: "max-h-64 overflow-auto", children: trajectoryList.trajectories.length === 0 ? /* @__PURE__ */ jsx("div", { className: "p-3 text-xs text-muted", children: t("finetuningview.NoTrajectoriesFoun") }) : trajectoryList.trajectories.map((trajectory) => /* @__PURE__ */ jsx(
376
+ TrajectoryListItem,
377
+ {
378
+ trajectory,
379
+ onSelectTrajectory,
380
+ t
381
+ },
382
+ trajectory.trajectoryId
383
+ )) }) }),
384
+ /* @__PURE__ */ jsx("div", { className: `${FINE_TUNING_PANEL_CLASS} p-3`, children: trajectoryLoading ? /* @__PURE__ */ jsx("div", { className: "text-xs text-muted", children: t("finetuningview.LoadingTrajectoryD") }) : !selectedTrajectory ? /* @__PURE__ */ jsx("div", { className: "text-xs text-muted", children: t("finetuningview.ChooseATrajectory") }) : /* @__PURE__ */ jsxs("div", { className: "space-y-2", children: [
385
+ /* @__PURE__ */ jsxs("div", { className: "text-xs", children: [
386
+ /* @__PURE__ */ jsx("span", { className: "font-semibold", children: t("finetuningview.Trajectory") }),
387
+ " ",
388
+ /* @__PURE__ */ jsx("span", { className: "font-mono", children: selectedTrajectory.trajectoryId })
389
+ ] }),
390
+ /* @__PURE__ */ jsxs("div", { className: "text-xs", children: [
391
+ /* @__PURE__ */ jsx("span", { className: "font-semibold", children: t("finetuningview.Agent") }),
392
+ " ",
393
+ /* @__PURE__ */ jsx("span", { className: "font-mono", children: selectedTrajectory.agentId })
394
+ ] }),
395
+ /* @__PURE__ */ jsxs("div", { className: "text-xs", children: [
396
+ /* @__PURE__ */ jsx("span", { className: "font-semibold", children: t("finetuningview.Reward1") }),
397
+ " ",
398
+ selectedTrajectory.totalReward ?? "n/a"
399
+ ] }),
400
+ /* @__PURE__ */ jsx(
401
+ SettingsControls.Textarea,
402
+ {
403
+ readOnly: true,
404
+ value: selectedTrajectory.stepsJson,
405
+ className: "max-h-72 min-h-40 overflow-auto font-mono text-xs"
406
+ }
407
+ )
408
+ ] }) })
409
+ ] })
410
+ ] })
411
+ ] });
412
+ }
413
+ const DatasetSection = memo(function DatasetSection2({
414
+ buildLimit,
415
+ setBuildLimit,
416
+ buildMinCalls,
417
+ setBuildMinCalls,
418
+ datasetBuilding,
419
+ datasets,
420
+ selectedDatasetId,
421
+ setSelectedDatasetId,
422
+ onBuildDataset,
423
+ onRefreshDatasets,
424
+ t
425
+ }) {
426
+ return /* @__PURE__ */ jsxs("section", { className: FINE_TUNING_SECTION_CLASS, children: [
427
+ /* @__PURE__ */ jsx("div", { className: FINE_TUNING_SECTION_HEADER_CLASS, children: /* @__PURE__ */ jsx("div", { className: "text-lg font-semibold text-txt", children: t("finetuningview.Datasets1") }) }),
428
+ /* @__PURE__ */ jsxs("div", { className: "mb-3 grid grid-cols-1 gap-2 md:grid-cols-2 xl:grid-cols-4", children: [
429
+ /* @__PURE__ */ jsx(
430
+ AgentTextInput,
431
+ {
432
+ agentId: "dataset-limit",
433
+ label: "Limit trajectories",
434
+ group: "dataset-build",
435
+ description: "Maximum trajectories to include in the dataset",
436
+ value: buildLimit,
437
+ onChange: setBuildLimit,
438
+ placeholder: t("finetuningview.LimitTrajectories")
439
+ }
440
+ ),
441
+ /* @__PURE__ */ jsx(
442
+ AgentTextInput,
443
+ {
444
+ agentId: "dataset-min-calls",
445
+ label: "Min LLM calls per trajectory",
446
+ group: "dataset-build",
447
+ description: "Minimum LLM calls required per trajectory",
448
+ value: buildMinCalls,
449
+ onChange: setBuildMinCalls,
450
+ placeholder: t("finetuningview.MinLLMCallsPerTr")
451
+ }
452
+ ),
453
+ /* @__PURE__ */ jsx(
454
+ AgentActionButton,
455
+ {
456
+ agentId: "dataset-build",
457
+ label: "Build dataset",
458
+ group: "dataset-build",
459
+ description: "Build a training dataset from trajectories",
460
+ className: FINE_TUNING_ACTION_CLASS,
461
+ disabled: datasetBuilding,
462
+ onClick: onBuildDataset,
463
+ children: datasetBuilding ? t("finetuningview.Building") : t("finetuningview.BuildDataset")
464
+ }
465
+ ),
466
+ /* @__PURE__ */ jsx(
467
+ AgentActionButton,
468
+ {
469
+ agentId: "dataset-refresh",
470
+ label: "Refresh datasets",
471
+ group: "dataset-build",
472
+ description: "Reload the dataset list",
473
+ className: FINE_TUNING_ACTION_CLASS,
474
+ onClick: onRefreshDatasets,
475
+ children: t("finetuningview.RefreshDatasets")
476
+ }
477
+ )
478
+ ] }),
479
+ /* @__PURE__ */ jsx("div", { className: `${FINE_TUNING_PANEL_CLASS} max-h-56 overflow-auto p-3`, children: datasets.length === 0 ? /* @__PURE__ */ jsx("div", { className: "text-sm text-muted", children: t("finetuningview.NoDatasetsYet") }) : /* @__PURE__ */ jsx("div", { className: "space-y-2", children: datasets.map((dataset) => /* @__PURE__ */ jsx(
480
+ DatasetRadioItem,
481
+ {
482
+ dataset,
483
+ selectedDatasetId,
484
+ setSelectedDatasetId,
485
+ t
486
+ },
487
+ dataset.id
488
+ )) }) })
489
+ ] });
490
+ });
491
+ const TrainingJobsSection = memo(function TrainingJobsSection2({
492
+ selectedDatasetId,
493
+ setSelectedDatasetId,
494
+ datasets,
495
+ startBackend,
496
+ setStartBackend,
497
+ startModel,
498
+ setStartModel,
499
+ startIterations,
500
+ setStartIterations,
501
+ startBatchSize,
502
+ setStartBatchSize,
503
+ startLearningRate,
504
+ setStartLearningRate,
505
+ startingJob,
506
+ activeRunningJob,
507
+ jobs,
508
+ selectedJobId,
509
+ setSelectedJobId,
510
+ cancellingJobId,
511
+ selectedJob,
512
+ onStartJob,
513
+ onRefreshJobs,
514
+ onCancelJob,
515
+ t
516
+ }) {
517
+ return /* @__PURE__ */ jsxs("section", { className: FINE_TUNING_SECTION_CLASS, children: [
518
+ /* @__PURE__ */ jsx("div", { className: FINE_TUNING_SECTION_HEADER_CLASS, children: /* @__PURE__ */ jsx("div", { className: "text-lg font-semibold text-txt", children: t("finetuningview.TrainingJobs") }) }),
519
+ /* @__PURE__ */ jsxs("div", { className: "mb-3 grid grid-cols-1 gap-2 md:grid-cols-2 xl:grid-cols-3", children: [
520
+ /* @__PURE__ */ jsx(
521
+ AgentSelect,
522
+ {
523
+ agentId: "job-dataset",
524
+ label: "Training dataset",
525
+ group: "job-config",
526
+ description: "Dataset to train the job on",
527
+ value: selectedDatasetId,
528
+ onValueChange: setSelectedDatasetId,
529
+ options: [
530
+ "__auto__",
531
+ ...datasets.filter((dataset) => dataset.id).map((d) => d.id)
532
+ ],
533
+ placeholder: t("finetuningview.AutoBuildDatasetF"),
534
+ children: /* @__PURE__ */ jsxs(SelectContent, { children: [
535
+ /* @__PURE__ */ jsx(SelectItem, { value: "__auto__", children: t("finetuningview.AutoBuildDatasetF") }),
536
+ datasets.filter((dataset) => dataset.id).map((dataset) => /* @__PURE__ */ jsx(SelectItem, { value: dataset.id, children: dataset.id }, dataset.id))
537
+ ] })
538
+ }
539
+ ),
540
+ /* @__PURE__ */ jsx(
541
+ AgentSelect,
542
+ {
543
+ agentId: "job-backend",
544
+ label: "Training backend",
545
+ group: "job-config",
546
+ description: "Compute backend for the training job",
547
+ value: startBackend,
548
+ onValueChange: (value) => setStartBackend(value),
549
+ options: ["cpu", "mlx", "cuda"],
550
+ children: /* @__PURE__ */ jsxs(SelectContent, { children: [
551
+ /* @__PURE__ */ jsx(SelectItem, { value: "cpu", children: t("finetuningview.cpu") }),
552
+ /* @__PURE__ */ jsx(SelectItem, { value: "mlx", children: t("finetuningview.mlx") }),
553
+ /* @__PURE__ */ jsx(SelectItem, { value: "cuda", children: t("finetuningview.cuda") })
554
+ ] })
555
+ }
556
+ ),
557
+ /* @__PURE__ */ jsx(
558
+ AgentTextInput,
559
+ {
560
+ agentId: "job-base-model",
561
+ label: "Base model",
562
+ group: "job-config",
563
+ description: "Optional base model id for the training job",
564
+ value: startModel,
565
+ onChange: setStartModel,
566
+ placeholder: t("finetuningview.BaseModelOptional")
567
+ }
568
+ ),
569
+ /* @__PURE__ */ jsx(
570
+ AgentTextInput,
571
+ {
572
+ agentId: "job-iterations",
573
+ label: "Iterations",
574
+ group: "job-config",
575
+ description: "Optional number of training iterations",
576
+ value: startIterations,
577
+ onChange: setStartIterations,
578
+ placeholder: t("finetuningview.IterationsOptional")
579
+ }
580
+ ),
581
+ /* @__PURE__ */ jsx(
582
+ AgentTextInput,
583
+ {
584
+ agentId: "job-batch-size",
585
+ label: "Batch size",
586
+ group: "job-config",
587
+ description: "Optional training batch size",
588
+ value: startBatchSize,
589
+ onChange: setStartBatchSize,
590
+ placeholder: t("finetuningview.BatchSizeOptional")
591
+ }
592
+ ),
593
+ /* @__PURE__ */ jsx(
594
+ AgentTextInput,
595
+ {
596
+ agentId: "job-learning-rate",
597
+ label: "Learning rate",
598
+ group: "job-config",
599
+ description: "Optional training learning rate",
600
+ value: startLearningRate,
601
+ onChange: setStartLearningRate,
602
+ placeholder: t("finetuningview.LearningRateOptio")
603
+ }
604
+ )
605
+ ] }),
606
+ /* @__PURE__ */ jsxs("div", { className: "mb-3 flex flex-wrap items-center gap-2", children: [
607
+ /* @__PURE__ */ jsx(
608
+ AgentActionButton,
609
+ {
610
+ agentId: "job-start",
611
+ label: "Start training job",
612
+ group: "job-config",
613
+ description: "Start a new training job",
614
+ className: FINE_TUNING_ACTION_CLASS,
615
+ disabled: startingJob || Boolean(activeRunningJob),
616
+ onClick: onStartJob,
617
+ children: startingJob ? t("finetuningview.Starting") : t("finetuningview.StartTrainingJob")
618
+ }
619
+ ),
620
+ /* @__PURE__ */ jsx(
621
+ AgentActionButton,
622
+ {
623
+ agentId: "job-refresh",
624
+ label: "Refresh jobs",
625
+ group: "job-config",
626
+ description: "Reload the training jobs list",
627
+ className: FINE_TUNING_ACTION_CLASS,
628
+ onClick: onRefreshJobs,
629
+ children: t("finetuningview.RefreshJobs")
630
+ }
631
+ ),
632
+ activeRunningJob && /* @__PURE__ */ jsxs("div", { className: "rounded-full border border-warn/30 bg-warn/10 px-3 py-2 text-xs text-warn", children: [
633
+ t("finetuningview.ActiveJob"),
634
+ " ",
635
+ /* @__PURE__ */ jsx("span", { className: "ml-1 font-mono", children: activeRunningJob.id })
636
+ ] })
637
+ ] }),
638
+ /* @__PURE__ */ jsxs("div", { className: "grid grid-cols-1 gap-3", children: [
639
+ /* @__PURE__ */ jsx("div", { className: `${FINE_TUNING_PANEL_CLASS} max-h-64 overflow-auto`, children: jobs.length === 0 ? /* @__PURE__ */ jsx("div", { className: "p-4 text-sm text-muted", children: t("finetuningview.NoJobsYet") }) : jobs.map((job) => /* @__PURE__ */ jsx(
640
+ JobListItem,
641
+ {
642
+ job,
643
+ selectedJobId,
644
+ setSelectedJobId,
645
+ cancellingJobId,
646
+ onCancelJob,
647
+ t
648
+ },
649
+ job.id
650
+ )) }),
651
+ /* @__PURE__ */ jsx("div", { className: `${FINE_TUNING_PANEL_CLASS} p-3`, children: /* @__PURE__ */ jsx(SelectedJobPanel, { selectedJob, t }) })
652
+ ] })
653
+ ] });
654
+ });
655
+ const TrainedModelsSection = memo(function TrainedModelsSection2({
656
+ activateProviderModel,
657
+ importBaseModel,
658
+ importModelName,
659
+ importOllamaUrl,
660
+ modelAction,
661
+ models,
662
+ onActivate,
663
+ onBenchmark,
664
+ onImport,
665
+ onSmokeTest,
666
+ selectedModel,
667
+ selectedModelId,
668
+ setActivateProviderModel,
669
+ setImportBaseModel,
670
+ setImportModelName,
671
+ setImportOllamaUrl,
672
+ setSelectedModelId,
673
+ smokeResult,
674
+ t
675
+ }) {
676
+ return /* @__PURE__ */ jsxs("section", { className: FINE_TUNING_SECTION_CLASS, children: [
677
+ /* @__PURE__ */ jsx("div", { className: FINE_TUNING_SECTION_HEADER_CLASS, children: /* @__PURE__ */ jsx("div", { className: "text-lg font-semibold text-txt", children: t("finetuningview.TrainedModels") }) }),
678
+ /* @__PURE__ */ jsxs("div", { className: "grid grid-cols-1 gap-3", children: [
679
+ /* @__PURE__ */ jsx("div", { className: `${FINE_TUNING_PANEL_CLASS} max-h-64 overflow-auto`, children: models.length === 0 ? /* @__PURE__ */ jsx("div", { className: "p-4 text-sm text-muted", children: t("finetuningview.NoTrainedModelsYe") }) : models.map((model) => /* @__PURE__ */ jsx(
680
+ ModelListItem,
681
+ {
682
+ model,
683
+ selectedModelId,
684
+ setSelectedModelId,
685
+ t
686
+ },
687
+ model.id
688
+ )) }),
689
+ /* @__PURE__ */ jsx("div", { className: `${FINE_TUNING_PANEL_CLASS} p-3`, children: /* @__PURE__ */ jsx(
690
+ SelectedModelPanel,
691
+ {
692
+ selectedModel,
693
+ importModelName,
694
+ setImportModelName,
695
+ importBaseModel,
696
+ setImportBaseModel,
697
+ importOllamaUrl,
698
+ setImportOllamaUrl,
699
+ activateProviderModel,
700
+ setActivateProviderModel,
701
+ modelAction,
702
+ smokeResult,
703
+ onImport,
704
+ onActivate,
705
+ onBenchmark,
706
+ onSmokeTest,
707
+ t
708
+ }
709
+ ) })
710
+ ] })
711
+ ] });
712
+ });
713
+ const LiveEventsPanel = memo(function LiveEventsPanel2({
714
+ events,
715
+ t
716
+ }) {
717
+ return /* @__PURE__ */ jsxs("section", { className: FINE_TUNING_SECTION_CLASS, children: [
718
+ /* @__PURE__ */ jsx("div", { className: FINE_TUNING_SECTION_HEADER_CLASS, children: /* @__PURE__ */ jsx("div", { className: "text-lg font-semibold text-txt", children: t("finetuningview.LiveTrainingEvents") }) }),
719
+ /* @__PURE__ */ jsx("div", { className: `${FINE_TUNING_PANEL_CLASS} max-h-48 overflow-auto`, children: events.length === 0 ? /* @__PURE__ */ jsx("div", { className: "p-4 text-sm text-muted", children: t("finetuningview.NoLiveEventsYet") }) : events.slice(0, 80).map((event, index) => /* @__PURE__ */ jsxs(
720
+ "div",
721
+ {
722
+ className: "px-3 py-2 text-sm",
723
+ children: [
724
+ /* @__PURE__ */ jsx("span", { className: "mr-2 font-mono text-xs text-muted", children: formatTime(event.ts, { fallback: "\u2014" }) }),
725
+ /* @__PURE__ */ jsx("span", { className: "font-semibold", children: event.kind }),
726
+ typeof event.progress === "number" && /* @__PURE__ */ jsxs("span", { className: "text-muted", children: [
727
+ " ",
728
+ "\xB7 ",
729
+ formatProgress(event.progress)
730
+ ] }),
731
+ event.phase && /* @__PURE__ */ jsxs("span", { className: "text-muted", children: [
732
+ " \xB7 ",
733
+ event.phase
734
+ ] }),
735
+ /* @__PURE__ */ jsx("div", { className: "mt-0.5 text-xs text-muted", children: event.message })
736
+ ]
737
+ },
738
+ `${event.ts}-${event.kind}-${index}`
739
+ )) })
740
+ ] });
741
+ });
742
+ function SelectedJobPanel({
743
+ selectedJob,
744
+ t
745
+ }) {
746
+ if (!selectedJob) {
747
+ return /* @__PURE__ */ jsx("div", { className: "text-sm text-muted", children: t("finetuningview.SelectAJobToInsp") });
748
+ }
749
+ return /* @__PURE__ */ jsxs("div", { className: "space-y-2", children: [
750
+ /* @__PURE__ */ jsxs("div", { className: "text-sm", children: [
751
+ /* @__PURE__ */ jsx("span", { className: "font-semibold", children: t("finetuningview.Status1") }),
752
+ " ",
753
+ selectedJob.status,
754
+ " \xB7 ",
755
+ formatProgress(selectedJob.progress),
756
+ " \xB7",
757
+ " ",
758
+ selectedJob.phase
759
+ ] }),
760
+ /* @__PURE__ */ jsxs("div", { className: "text-sm", children: [
761
+ /* @__PURE__ */ jsx("span", { className: "font-semibold", children: t("finetuningview.Dataset") }),
762
+ " ",
763
+ /* @__PURE__ */ jsx("span", { className: "font-mono", children: selectedJob.datasetId })
764
+ ] }),
765
+ /* @__PURE__ */ jsx(
766
+ SettingsControls.Textarea,
767
+ {
768
+ readOnly: true,
769
+ value: selectedJob.logs.join("\n"),
770
+ className: "max-h-72 min-h-40 overflow-auto font-mono text-xs"
771
+ }
772
+ )
773
+ ] });
774
+ }
775
+ function SelectedModelPanel({
776
+ selectedModel,
777
+ importModelName,
778
+ setImportModelName,
779
+ importBaseModel,
780
+ setImportBaseModel,
781
+ importOllamaUrl,
782
+ setImportOllamaUrl,
783
+ activateProviderModel,
784
+ setActivateProviderModel,
785
+ modelAction,
786
+ smokeResult,
787
+ onImport,
788
+ onActivate,
789
+ onBenchmark,
790
+ onSmokeTest,
791
+ t
792
+ }) {
793
+ if (!selectedModel) {
794
+ return /* @__PURE__ */ jsx("div", { className: "text-sm text-muted", children: t("finetuningview.SelectAModelToIm") });
795
+ }
796
+ return /* @__PURE__ */ jsxs("div", { className: "space-y-2", children: [
797
+ /* @__PURE__ */ jsxs("div", { className: "text-sm", children: [
798
+ /* @__PURE__ */ jsx("span", { className: "font-semibold", children: t("finetuningview.Model") }),
799
+ " ",
800
+ /* @__PURE__ */ jsx("span", { className: "font-mono", children: selectedModel.id })
801
+ ] }),
802
+ /* @__PURE__ */ jsxs("div", { className: "text-sm", children: [
803
+ /* @__PURE__ */ jsx("span", { className: "font-semibold", children: t("finetuningview.AdapterPath") }),
804
+ " ",
805
+ /* @__PURE__ */ jsx("span", { className: "font-mono", children: selectedModel.adapterPath ?? "n/a" })
806
+ ] }),
807
+ /* @__PURE__ */ jsx(
808
+ AgentTextInput,
809
+ {
810
+ agentId: "model-import-name",
811
+ label: "Ollama model name",
812
+ group: "model-actions",
813
+ description: "Name for the imported Ollama model",
814
+ value: importModelName,
815
+ onChange: setImportModelName,
816
+ placeholder: t("finetuningview.OllamaModelNameO")
817
+ }
818
+ ),
819
+ /* @__PURE__ */ jsx(
820
+ AgentTextInput,
821
+ {
822
+ agentId: "model-import-base",
823
+ label: "Base model for Ollama",
824
+ group: "model-actions",
825
+ description: "Base model used for the Ollama import",
826
+ value: importBaseModel,
827
+ onChange: setImportBaseModel,
828
+ placeholder: t("finetuningview.BaseModelForOllam")
829
+ }
830
+ ),
831
+ /* @__PURE__ */ jsx(
832
+ AgentTextInput,
833
+ {
834
+ agentId: "model-import-url",
835
+ label: "Ollama URL",
836
+ group: "model-actions",
837
+ description: "Ollama server URL for the import",
838
+ value: importOllamaUrl,
839
+ onChange: setImportOllamaUrl,
840
+ placeholder: t("finetuningview.OllamaURL")
841
+ }
842
+ ),
843
+ /* @__PURE__ */ jsx(
844
+ AgentActionButton,
845
+ {
846
+ agentId: "model-import",
847
+ label: "Import to Ollama",
848
+ group: "model-actions",
849
+ description: "Import the selected model into Ollama",
850
+ className: FINE_TUNING_ACTION_CLASS,
851
+ disabled: modelAction === `import:${selectedModel.id}`,
852
+ onClick: onImport,
853
+ children: modelAction === `import:${selectedModel.id}` ? t("finetuningview.Importing") : t("finetuningview.ImportToOllama")
854
+ }
855
+ ),
856
+ /* @__PURE__ */ jsx(
857
+ AgentTextInput,
858
+ {
859
+ agentId: "model-provider-model",
860
+ label: "Provider model",
861
+ group: "model-actions",
862
+ description: "Provider model id to activate",
863
+ value: activateProviderModel,
864
+ onChange: setActivateProviderModel,
865
+ placeholder: t("finetuningview.ProviderModelEG")
866
+ }
867
+ ),
868
+ /* @__PURE__ */ jsxs("div", { className: "flex flex-wrap gap-2", children: [
869
+ /* @__PURE__ */ jsx(
870
+ AgentActionButton,
871
+ {
872
+ agentId: "model-activate",
873
+ label: "Activate model",
874
+ group: "model-actions",
875
+ description: "Activate the selected model",
876
+ className: FINE_TUNING_ACTION_CLASS,
877
+ disabled: modelAction === `activate:${selectedModel.id}`,
878
+ onClick: onActivate,
879
+ children: modelAction === `activate:${selectedModel.id}` ? t("finetuningview.Activating") : t("finetuningview.ActivateModel")
880
+ }
881
+ ),
882
+ /* @__PURE__ */ jsx(
883
+ AgentActionButton,
884
+ {
885
+ agentId: "model-benchmark",
886
+ label: "Benchmark model",
887
+ group: "model-actions",
888
+ description: "Run a benchmark against the selected model",
889
+ className: FINE_TUNING_ACTION_CLASS,
890
+ disabled: modelAction === `benchmark:${selectedModel.id}`,
891
+ onClick: onBenchmark,
892
+ children: modelAction === `benchmark:${selectedModel.id}` ? t("finetuningview.Benchmarking") : t("finetuningview.BenchmarkAction")
893
+ }
894
+ ),
895
+ /* @__PURE__ */ jsx(
896
+ AgentActionButton,
897
+ {
898
+ agentId: "model-smoke-test",
899
+ label: "Run smoke prompt",
900
+ group: "model-actions",
901
+ description: "Run a smoke-test prompt against the selected model",
902
+ className: FINE_TUNING_ACTION_CLASS,
903
+ disabled: modelAction === `smoke:${selectedModel.id}`,
904
+ onClick: onSmokeTest,
905
+ children: modelAction === `smoke:${selectedModel.id}` ? t("finetuningview.Testing") : t("finetuningview.RunSmokePrompt")
906
+ }
907
+ )
908
+ ] }),
909
+ smokeResult && /* @__PURE__ */ jsx(
910
+ SettingsControls.Textarea,
911
+ {
912
+ readOnly: true,
913
+ value: smokeResult,
914
+ className: "max-h-48 min-h-24 overflow-auto"
915
+ }
916
+ )
917
+ ] });
918
+ }
919
+ export {
920
+ DatasetSection,
921
+ LiveEventsPanel,
922
+ SelectedJobPanel,
923
+ SelectedModelPanel,
924
+ TrainedModelsSection,
925
+ TrainingJobsSection,
926
+ TrajectoriesSection
927
+ };
928
+ //# sourceMappingURL=fine-tuning-panels.js.map