@minimalcorp/tsunagi 0.1.49 → 0.1.50

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 (87) hide show
  1. package/.next/standalone/apps/web/.next/BUILD_ID +1 -1
  2. package/.next/standalone/apps/web/.next/build-manifest.json +3 -3
  3. package/.next/standalone/apps/web/.next/prerender-manifest.json +3 -3
  4. package/.next/standalone/apps/web/.next/server/app/_global-error.html +1 -1
  5. package/.next/standalone/apps/web/.next/server/app/_global-error.rsc +1 -1
  6. package/.next/standalone/apps/web/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
  7. package/.next/standalone/apps/web/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  8. package/.next/standalone/apps/web/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  9. package/.next/standalone/apps/web/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  10. package/.next/standalone/apps/web/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  11. package/.next/standalone/apps/web/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  12. package/.next/standalone/apps/web/.next/server/app/_not-found.html +1 -1
  13. package/.next/standalone/apps/web/.next/server/app/_not-found.rsc +2 -2
  14. package/.next/standalone/apps/web/.next/server/app/_not-found.segments/_full.segment.rsc +2 -2
  15. package/.next/standalone/apps/web/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
  16. package/.next/standalone/apps/web/.next/server/app/_not-found.segments/_index.segment.rsc +2 -2
  17. package/.next/standalone/apps/web/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
  18. package/.next/standalone/apps/web/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
  19. package/.next/standalone/apps/web/.next/server/app/_not-found.segments/_tree.segment.rsc +2 -2
  20. package/.next/standalone/apps/web/.next/server/app/index.html +1 -1
  21. package/.next/standalone/apps/web/.next/server/app/index.rsc +3 -3
  22. package/.next/standalone/apps/web/.next/server/app/index.segments/__PAGE__.segment.rsc +2 -2
  23. package/.next/standalone/apps/web/.next/server/app/index.segments/_full.segment.rsc +3 -3
  24. package/.next/standalone/apps/web/.next/server/app/index.segments/_head.segment.rsc +1 -1
  25. package/.next/standalone/apps/web/.next/server/app/index.segments/_index.segment.rsc +2 -2
  26. package/.next/standalone/apps/web/.next/server/app/index.segments/_tree.segment.rsc +2 -2
  27. package/.next/standalone/apps/web/.next/server/app/page_client-reference-manifest.js +1 -1
  28. package/.next/standalone/apps/web/.next/server/app/settings/page.js.nft.json +1 -1
  29. package/.next/standalone/apps/web/.next/server/app/settings/page_client-reference-manifest.js +1 -1
  30. package/.next/standalone/apps/web/.next/server/app/settings.html +1 -1
  31. package/.next/standalone/apps/web/.next/server/app/settings.rsc +3 -3
  32. package/.next/standalone/apps/web/.next/server/app/settings.segments/_full.segment.rsc +3 -3
  33. package/.next/standalone/apps/web/.next/server/app/settings.segments/_head.segment.rsc +1 -1
  34. package/.next/standalone/apps/web/.next/server/app/settings.segments/_index.segment.rsc +2 -2
  35. package/.next/standalone/apps/web/.next/server/app/settings.segments/_tree.segment.rsc +2 -2
  36. package/.next/standalone/apps/web/.next/server/app/settings.segments/settings/__PAGE__.segment.rsc +2 -2
  37. package/.next/standalone/apps/web/.next/server/app/settings.segments/settings.segment.rsc +1 -1
  38. package/.next/standalone/apps/web/.next/server/app/tasks/[id]/page.js.nft.json +1 -1
  39. package/.next/standalone/apps/web/.next/server/app/tasks/[id]/page_client-reference-manifest.js +1 -1
  40. package/.next/standalone/apps/web/.next/server/chunks/ssr/[root-of-the-server]__0mo_9ei._.js +1 -1
  41. package/.next/standalone/apps/web/.next/server/chunks/ssr/[root-of-the-server]__11y.qj~._.js +3 -0
  42. package/.next/standalone/apps/web/.next/server/chunks/ssr/_0g.cd6a._.js +1 -1
  43. package/.next/standalone/apps/web/.next/server/chunks/ssr/_0ydcfna._.js +3 -0
  44. package/.next/standalone/apps/web/.next/server/chunks/ssr/_0zu_05y._.js +3 -0
  45. package/.next/standalone/apps/web/.next/server/chunks/ssr/apps_web_src_app_settings_page_tsx_0i6itlb._.js +1 -1
  46. package/.next/standalone/apps/web/.next/server/chunks/ssr/apps_web_src_app_tasks_[id]_page_tsx_0jshsm2._.js +12 -12
  47. package/.next/standalone/apps/web/.next/server/chunks/ssr/{node_modules_0.lo~su._.js → node_modules_0-bra0k._.js} +2 -2
  48. package/.next/standalone/apps/web/.next/server/chunks/ssr/{node_modules_0mn5p-q._.js → node_modules_0-nk4sk._.js} +1 -1
  49. package/.next/standalone/apps/web/.next/server/chunks/ssr/{node_modules_0esrd80._.js → node_modules_0-yxz.k._.js} +1 -1
  50. package/.next/standalone/apps/web/.next/server/chunks/ssr/{node_modules_05v_qny._.js → node_modules_0g-5xh6._.js} +1 -1
  51. package/.next/standalone/apps/web/.next/server/chunks/ssr/{node_modules_0_j5e9s._.js → node_modules_0kuu0i_._.js} +1 -1
  52. package/.next/standalone/apps/web/.next/server/chunks/ssr/{node_modules_1132ajp._.js → node_modules_0rgnv~i._.js} +1 -1
  53. package/.next/standalone/apps/web/.next/server/chunks/ssr/{node_modules_102_61p._.js → node_modules_0s5.073._.js} +1 -1
  54. package/.next/standalone/apps/web/.next/server/chunks/ssr/{node_modules_0j-2rnz._.js → node_modules_0wg2e2t._.js} +1 -1
  55. package/.next/standalone/apps/web/.next/server/chunks/ssr/{node_modules_0bwy~wk._.js → node_modules_10vm5h.._.js} +1 -1
  56. package/.next/standalone/apps/web/.next/server/middleware-build-manifest.js +3 -3
  57. package/.next/standalone/apps/web/.next/server/pages/404.html +1 -1
  58. package/.next/standalone/apps/web/.next/server/pages/500.html +1 -1
  59. package/.next/standalone/apps/web/.next/server/server-reference-manifest.js +1 -1
  60. package/.next/standalone/apps/web/.next/server/server-reference-manifest.json +1 -1
  61. package/.next/standalone/apps/web/.next/static/chunks/0bhssqb0~3~7n.js +23 -0
  62. package/.next/standalone/apps/web/.next/static/chunks/0makl-d3f0_qh.js +2878 -0
  63. package/.next/standalone/apps/web/.next/static/chunks/0pg.320d4u8z5.js +1 -0
  64. package/.next/standalone/apps/web/.next/static/chunks/0plamn018wq.u.css +4 -0
  65. package/.next/standalone/apps/web/.next/static/chunks/{0hcpu00flu9x6.js → 0tcznr_934_ai.js} +1 -1
  66. package/.next/standalone/apps/web/.next/static/chunks/0ywpi-uf71k8s.js +1 -0
  67. package/.next/standalone/apps/web/.next/static/chunks/12av8cpq.8slk.js +5 -0
  68. package/.next/standalone/apps/web/package.json +3 -0
  69. package/.next/standalone/apps/web/public/vad/ort-wasm-simd-threaded.mjs +59 -0
  70. package/.next/standalone/apps/web/public/vad/ort-wasm-simd-threaded.wasm +0 -0
  71. package/.next/standalone/apps/web/public/vad/silero_vad_v5.onnx +0 -0
  72. package/.next/standalone/apps/web/public/vad/vad.worklet.bundle.min.js +1 -0
  73. package/dist/server/routes/whisper.js +8 -1
  74. package/dist/whisper-server/README.md +1 -1
  75. package/dist/whisper-server/server.py +54 -9
  76. package/npm-shrinkwrap.json +2 -2
  77. package/package.json +1 -1
  78. package/.next/standalone/apps/web/.next/server/chunks/ssr/_0_2b4wf._.js +0 -3
  79. package/.next/standalone/apps/web/.next/server/chunks/ssr/_0s18_3n._.js +0 -3
  80. package/.next/standalone/apps/web/.next/static/chunks/04g3fzo25y9_g.js +0 -23
  81. package/.next/standalone/apps/web/.next/static/chunks/06sk6d3k059.n.js +0 -1
  82. package/.next/standalone/apps/web/.next/static/chunks/0imnlpmbrdgiv.js +0 -5
  83. package/.next/standalone/apps/web/.next/static/chunks/0u-820sh7-.-1.js +0 -1
  84. package/.next/standalone/apps/web/.next/static/chunks/13~5_8644~sbn.css +0 -4
  85. /package/.next/standalone/apps/web/.next/static/{oezQccA9cBsGwIkuMGqIY → w7do3hyV84oyognhRCQuA}/_buildManifest.js +0 -0
  86. /package/.next/standalone/apps/web/.next/static/{oezQccA9cBsGwIkuMGqIY → w7do3hyV84oyognhRCQuA}/_clientMiddlewareManifest.js +0 -0
  87. /package/.next/standalone/apps/web/.next/static/{oezQccA9cBsGwIkuMGqIY → w7do3hyV84oyognhRCQuA}/_ssgManifest.js +0 -0
@@ -1,3 +0,0 @@
1
- module.exports=[210,a=>{"use strict";let b=(0,a.i(60137).default)("arrow-left",[["path",{d:"m12 19-7-7 7-7",key:"1l729n"}],["path",{d:"M19 12H5",key:"x3x0zl"}]]);a.s(["ArrowLeft",0,b],210)},11989,a=>{"use strict";let b=(0,a.i(60137).default)("chevron-right",[["path",{d:"m9 18 6-6-6-6",key:"mthhwq"}]]);a.s(["default",0,b])},99464,92e3,a=>{"use strict";var b=a.i(60137);let c=(0,b.default)("pencil",[["path",{d:"M21.174 6.812a1 1 0 0 0-3.986-3.987L3.842 16.174a2 2 0 0 0-.5.83l-1.321 4.352a.5.5 0 0 0 .623.622l4.353-1.32a2 2 0 0 0 .83-.497z",key:"1a8usu"}],["path",{d:"m15 5 4 4",key:"1mk7zo"}]]);a.s(["Pencil",0,c],99464);let d=(0,b.default)("circle-alert",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["line",{x1:"12",x2:"12",y1:"8",y2:"12",key:"1pkeuh"}],["line",{x1:"12",x2:"12.01",y1:"16",y2:"16",key:"4dfq90"}]]);a.s(["AlertCircle",0,d],92e3)},36620,a=>{"use strict";let b=(0,a.i(60137).default)("circle-question-mark",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3",key:"1u773s"}],["path",{d:"M12 17h.01",key:"p32p05"}]]);a.s(["CircleHelp",0,b],36620)},4975,48124,a=>{"use strict";var b=a.i(60137);let c=(0,b.default)("mic",[["path",{d:"M12 19v3",key:"npa21l"}],["path",{d:"M19 10v2a7 7 0 0 1-14 0v-2",key:"1vc78b"}],["rect",{x:"9",y:"2",width:"6",height:"13",rx:"3",key:"s6n7sd"}]]);a.s(["Mic",0,c],4975);let d=(0,b.default)("square",[["rect",{width:"18",height:"18",x:"3",y:"3",rx:"2",key:"afitv7"}]]);a.s(["Square",0,d],48124)},92552,a=>{"use strict";var b=a.i(87924),c=a.i(760);a.s(["Card",0,function({className:a,size:d="default",...e}){return(0,b.jsx)("div",{"data-slot":"card","data-size":d,className:(0,c.cn)("group/card flex flex-col gap-4 overflow-hidden rounded-lg bg-card py-4 text-xs/relaxed text-card-foreground ring-1 ring-foreground/10 has-[>img:first-child]:pt-0 data-[size=sm]:gap-3 data-[size=sm]:py-3 *:[img:first-child]:rounded-t-lg *:[img:last-child]:rounded-b-lg",a),...e})},"CardContent",0,function({className:a,...d}){return(0,b.jsx)("div",{"data-slot":"card-content",className:(0,c.cn)("px-4 group-data-[size=sm]/card:px-3",a),...d})},"CardDescription",0,function({className:a,...d}){return(0,b.jsx)("div",{"data-slot":"card-description",className:(0,c.cn)("text-xs/relaxed text-muted-foreground",a),...d})},"CardHeader",0,function({className:a,...d}){return(0,b.jsx)("div",{"data-slot":"card-header",className:(0,c.cn)("group/card-header @container/card-header grid auto-rows-min items-start gap-1 rounded-t-lg px-4 group-data-[size=sm]/card:px-3 has-data-[slot=card-action]:grid-cols-[1fr_auto] has-data-[slot=card-description]:grid-rows-[auto_auto] [.border-b]:pb-4 group-data-[size=sm]/card:[.border-b]:pb-3",a),...d})},"CardTitle",0,function({className:a,...d}){return(0,b.jsx)("div",{"data-slot":"card-title",className:(0,c.cn)("font-heading text-sm font-medium",a),...d})}])},82434,a=>{"use strict";let b=(0,a.i(60137).default)("bot",[["path",{d:"M12 8V4H8",key:"hb8ula"}],["rect",{width:"16",height:"12",x:"4",y:"8",rx:"2",key:"enze0r"}],["path",{d:"M2 14h2",key:"vft8re"}],["path",{d:"M20 14h2",key:"4cs60a"}],["path",{d:"M15 13v2",key:"1xurst"}],["path",{d:"M9 13v2",key:"rq6x2g"}]]);a.s(["Bot",0,b],82434)},56026,19768,94392,a=>{"use strict";a.s(["LLM_SYSTEM_PROMPT_STORAGE_KEY",()=>z,"VoiceInputButton",()=>B,"WHISPER_PROMPT_STORAGE_KEY",()=>y],56026);var b=a.i(87924),c=a.i(72131),d=a.i(96221),e=a.i(4975),f=a.i(48124),g=a.i(39524),h=a.i(91399),i=a.i(6828);a.s(["LOCAL_LLM_ENABLED_STORAGE_KEY",()=>s,"LocalLlmSection",()=>x],19768);var j=a.i(92e3),k=a.i(82434),l=a.i(67453),m=a.i(36620),n=a.i(92552),o=a.i(90002),p=a.i(65025),q=a.i(97463);let r="tsunagi:local-llm-enabled",s=r,t={not_running:"停止中",installing_deps:"依存関係をインストール中...",downloading_model:"モデルをダウンロード中...",starting_server:"サーバーを起動中... (モデルのロードに数十秒かかる場合があります)",running:"実行中",running_external:"実行中 (tsunagi外で起動)",error:"エラー"},u=["installing_deps","downloading_model","starting_server"],v=["running","running_external"];function w(a){let b=a/0x40000000;return b>=.1?`${b.toFixed(2)} GB`:`${(a/1048576).toFixed(0)} MB`}function x(){let[a,e]=(0,c.useState)(!1),[s,x]=(0,c.useState)(!1),[y,A]=(0,c.useState)(null),[B,C]=(0,c.useState)(""),D=(0,c.useRef)(null),E=(0,c.useCallback)(a=>{e(a),localStorage.setItem(r,String(a))},[]),F=(0,c.useCallback)(a=>{C(a),localStorage.setItem(z,a)},[]),G=(0,c.useCallback)(async()=>{let a=await fetch((0,h.apiUrl)("/api/llm/server/status")),b=await a.json();return A(b),b},[]);(0,c.useEffect)(()=>{e("true"===localStorage.getItem(r)),C(localStorage.getItem(z)??""),G()},[G]),(0,c.useEffect)(()=>{y&&v.includes(y.step)&&!a&&(E(!0),i.toaster.create({type:"success",title:"ローカルLLMが有効化されました"}))},[y,a,E]),(0,c.useEffect)(()=>(y&&u.includes(y.step)&&!D.current&&(D.current=setInterval(()=>{G().then(a=>{!u.includes(a.step)&&D.current&&(clearInterval(D.current),D.current=null)})},1e3)),()=>{D.current&&(clearInterval(D.current),D.current=null)}),[y,G]);let H=(0,c.useCallback)(()=>{G(),x(!0)},[G]),I=(0,c.useCallback)(async()=>{try{let a=await fetch((0,h.apiUrl)("/api/llm/server/start"),{method:"POST"});if(!a.ok){let b=await a.json().catch(()=>null);throw Error(b?.error||`HTTPエラー: ${a.status}`)}A(await a.json())}catch(a){i.toaster.create({type:"error",title:"サーバーの起動に失敗しました",description:a instanceof Error?a.message:String(a)})}},[]),J=(0,c.useCallback)(async()=>{try{let a=await fetch((0,h.apiUrl)("/api/llm/server/stop"),{method:"POST"});if(!a.ok){let b=await a.json().catch(()=>null);throw Error(b?.error||`HTTPエラー: ${a.status}`)}A(await a.json())}catch(a){i.toaster.create({type:"error",title:"サーバーの停止に失敗しました",description:a instanceof Error?a.message:String(a)})}},[]),K=(0,c.useCallback)(()=>{E(!1),y&&v.includes(y.step)&&J()},[E,J,y]),L=y?.serverDir,M=y?.downloadProgress,N=M?M.downloadedBytes/M.totalBytes*100:0,O=null!==y,P=O&&v.includes(y.step);return(0,b.jsxs)(n.Card,{children:[(0,b.jsxs)(n.CardHeader,{children:[(0,b.jsxs)("div",{className:"flex items-center gap-1",children:[(0,b.jsx)(n.CardTitle,{children:"ローカルLLM (実験的機能)"}),(0,b.jsx)(g.Button,{variant:"ghost",size:"icon-sm",onClick:H,title:"ローカルLLMについて",children:(0,b.jsx)(m.CircleHelp,{})})]}),(0,b.jsxs)(n.CardDescription,{children:["ローカルで動作するLLM(Qwen3-30B-A3B, MoE)を利用します。",(0,b.jsx)("strong",{className:"font-medium text-foreground",children:"有効にすると、音声入力の文字起こし結果がこのLLMで自動整形されるようになります"}),"(無効時は文字起こし結果をそのまま使用)。"]})]}),(0,b.jsx)(n.CardContent,{className:"flex flex-col gap-3",children:a?(0,b.jsxs)(b.Fragment,{children:[(0,b.jsxs)("div",{className:"flex flex-wrap items-center gap-2",children:[O?P?(0,b.jsxs)("span",{className:"flex items-center gap-2 text-success",children:[(0,b.jsx)(l.CheckCircle2,{className:"size-4"}),"ローカルLLM: 有効"]}):(0,b.jsxs)("span",{className:"flex items-center gap-2 text-warning",children:[(0,b.jsx)(j.AlertCircle,{className:"size-4"}),"ローカルLLM: 有効化済み(サーバー停止中)"]}):(0,b.jsxs)("span",{className:"flex items-center gap-2 text-muted-foreground",children:[(0,b.jsx)(d.Loader2,{className:"size-4 animate-spin"}),"状態を確認中..."]}),y&&(0,b.jsxs)("span",{className:"text-xs/relaxed text-muted-foreground",children:["(",t[y.step],")"]}),O&&!P&&(0,b.jsxs)(g.Button,{size:"default",onClick:H,children:[(0,b.jsx)(k.Bot,{}),"サーバーを起動"]}),(0,b.jsx)(g.Button,{size:"default",variant:"outline",onClick:K,children:"無効にする"})]}),(0,b.jsxs)("div",{children:[(0,b.jsx)("label",{className:"mb-1 block text-xs font-medium text-muted-foreground",children:"整形システムプロンプト (任意)"}),(0,b.jsx)(q.Textarea,{value:B,onChange:a=>F(a.target.value),placeholder:"例: 句読点の追加と誤字修正のみ行い、言い回しは変えないでください。",className:"min-h-16 text-xs"}),(0,b.jsx)("p",{className:"mt-1 text-[0.65rem] text-muted-foreground",children:"文字起こし結果をLLMで整形する際の指示です。空欄の場合は既定のプロンプト(句読点の追加・誤字修正のみを行う指示)を使用します。"})]})]}):(0,b.jsxs)(g.Button,{size:"default",onClick:H,children:[(0,b.jsx)(k.Bot,{}),"ローカルLLMを有効化する"]})}),(0,b.jsx)(o.Dialog,{open:s,onOpenChange:({open:a})=>x(a),title:"ローカルLLMについて",maxWidth:"2xl",children:(0,b.jsxs)("div",{className:"space-y-4 text-sm",children:[(0,b.jsxs)("div",{children:[(0,b.jsx)("p",{className:"font-medium text-foreground",children:"実験的機能です"}),(0,b.jsx)("p",{className:"text-muted-foreground",children:"音声入力の文字起こし結果を、ローカルで動作するLLM(mlx-lm / Qwen3-30B-A3B, MoE構成)で整形します。MoE構成のため実計算に使うアクティブパラメータは約3Bで、denseな同規模モデルより高速に動作します。精度・速度は環境に依存し、今後変更される可能性があります。"})]}),(0,b.jsxs)("div",{children:[(0,b.jsx)("p",{className:"font-medium text-foreground",children:"対応環境"}),(0,b.jsx)("p",{className:"text-muted-foreground",children:"Apple Silicon Mac (M1/M2/M3/M4) のみ対応。Windows/Linuxでは利用できません。メモリ32GB以上を推奨します。"})]}),(0,b.jsxs)("div",{children:[(0,b.jsx)("p",{className:"font-medium text-foreground",children:"必要なもの(事前に手動でインストール)"}),(0,b.jsx)("ul",{className:"list-disc pl-5 text-muted-foreground",children:(0,b.jsx)("li",{children:"Python 3.9以降(Xcode Command Line Tools または Homebrew経由で入手可能)"})})]}),(0,b.jsxs)("div",{children:[(0,b.jsx)("p",{className:"mb-1 font-medium text-foreground",children:"セットアップ・起動"}),(0,b.jsx)("p",{className:"text-muted-foreground",children:"下のボタンから、依存関係のインストール・モデルのダウンロード・サーバー起動まで自動で行われます(初回はモデルサイズが大きく数分〜数十分かかります)。"}),y&&!L&&(0,b.jsx)("p",{className:"mt-1 text-destructive",children:"llm-serverが見つかりませんでした。インストールが壊れている可能性があります。"})]}),(0,b.jsxs)("div",{children:[(0,b.jsx)("p",{className:"mb-1 font-medium text-foreground",children:"アンインストール"}),(0,b.jsxs)("p",{className:"text-muted-foreground",children:["ローカルLLMのためにダウンロードされるもの(Pythonの依存関係・LLMモデル、合計約17GB)は全て",(0,b.jsx)("code",{className:"rounded bg-muted px-1",children:"~/.tsunagi/llm"}),"に保存されます。不要になった場合はこのディレクトリを削除するだけで、関連リソースを完全に削除できます。"]})]}),(0,b.jsxs)("div",{className:"border-t border-border pt-4",children:[(!y||"not_running"===y.step||"error"===y.step)&&(0,b.jsxs)("div",{className:"flex flex-col gap-2",children:[(0,b.jsxs)(g.Button,{size:"default",onClick:()=>void I(),disabled:!y,children:[y?(0,b.jsx)(k.Bot,{}):(0,b.jsx)(d.Loader2,{className:"animate-spin"}),"LLMサーバーを起動"]}),y?.step==="error"&&y.error&&(0,b.jsx)("p",{className:"text-xs/relaxed text-destructive",children:y.error})]}),y?.step==="installing_deps"&&(0,b.jsxs)(g.Button,{size:"default",disabled:!0,children:[(0,b.jsx)(d.Loader2,{className:"animate-spin"}),"依存関係をインストール中... (数分かかる場合があります)"]}),y?.step==="downloading_model"&&(0,b.jsxs)("div",{className:"flex flex-col gap-2",children:[(0,b.jsxs)("div",{className:"flex items-center gap-2 text-xs/relaxed text-muted-foreground",children:[(0,b.jsx)(d.Loader2,{className:"size-4 animate-spin"}),"モデルをダウンロード中... (約17GB)"]}),M&&(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)(p.Progress,{value:N}),(0,b.jsxs)("p",{className:"text-xs/relaxed text-muted-foreground",children:[w(M.downloadedBytes)," / ",w(M.totalBytes)," (",N.toFixed(0),"%) ・ ",function(a){if(null===a)return"残り時間を計算中...";if(a<60)return`残り約${a}秒`;let b=Math.floor(a/60);return`残り約${b}分${a%60}秒`}(M.etaSeconds)]})]})]}),y?.step==="starting_server"&&(0,b.jsxs)(g.Button,{size:"default",disabled:!0,children:[(0,b.jsx)(d.Loader2,{className:"animate-spin"}),"サーバーを起動中... (モデルのロードに数十秒かかる場合があります)"]}),y&&v.includes(y.step)&&(0,b.jsxs)("div",{className:"flex flex-wrap items-center gap-2",children:[(0,b.jsxs)("span",{className:"flex items-center gap-2 text-success",children:[(0,b.jsx)(l.CheckCircle2,{className:"size-4"}),"サーバーは起動しています"]}),(0,b.jsxs)(g.Button,{size:"default",variant:"outline",onClick:()=>void J(),children:[(0,b.jsx)(f.Square,{}),"サーバーを停止"]})]})]})]})})]})}let y="tsunagi:whisper-prompt",z="tsunagi:llm-system-prompt",A=["running","running_external"];function B({onTranscribed:a}){let[j,k]=(0,c.useState)(!1),[l,m]=(0,c.useState)("idle"),[n,o]=(0,c.useState)(0),[p,q]=(0,c.useState)(null),r=(0,c.useRef)(null),t=(0,c.useRef)([]),u=(0,c.useRef)(null),v=(0,c.useRef)(null),w=(0,c.useRef)(null),x=(0,c.useRef)(0),C=(0,c.useRef)(0);(0,c.useEffect)(()=>{k("true"===localStorage.getItem("tsunagi:voice-input-enabled"))},[]),(0,c.useEffect)(()=>{if(!j)return;let a=!1,b=async()=>{try{let b=await fetch((0,h.apiUrl)("/api/whisper/server/status")),c=await b.json();a||q(c.step)}catch{a||q("not_running")}};b();let c=setInterval(b,5e3);return()=>{a=!0,clearInterval(c)}},[j]);let D=(0,c.useCallback)(()=>{w.current&&(clearInterval(w.current),w.current=null),v.current?.close(),v.current=null,o(0)},[]);(0,c.useEffect)(()=>()=>{D()},[D]);let E=(0,c.useCallback)(a=>{let b=new AudioContext,c=b.createMediaStreamSource(a),d=b.createAnalyser();d.fftSize=2048,c.connect(d),v.current=b,x.current=0,C.current=0;let e=new Float32Array(d.fftSize);w.current=setInterval(()=>{d.getFloatTimeDomainData(e);let a=0;for(let b=0;b<e.length;b++)a+=e[b]*e[b];let b=Math.sqrt(a/e.length),c=Math.min(1,Math.max(0,((b>0?20*Math.log10(b):-60)- -60)/50));C.current=Math.max(C.current,c),x.current=.3*x.current+.7*c,o(x.current)},50)},[]),F=(0,c.useCallback)(async b=>{m("transcribing");try{let c=new FormData,d=localStorage.getItem(y);d&&c.append("prompt",d);let e="true"===localStorage.getItem(s);c.append("useLlm",String(e));let f=localStorage.getItem(z);f&&c.append("systemPrompt",f),c.append("file",b,"recording.webm");let g=await fetch((0,h.apiUrl)("/api/whisper/transcribe"),{method:"POST",body:c});if(!g.ok){let a=await g.json().catch(()=>null);throw Error(a?.error||`HTTPエラー: ${g.status}`)}let j=await g.json();j.warning&&i.toaster.create({type:"error",title:"LLM整形をスキップしました",description:j.warning}),j.text&&a(j.text)}catch(a){i.toaster.create({type:"error",title:"文字起こしに失敗しました",description:a instanceof Error?a.message:String(a)})}finally{m("idle")}},[a]),G=(0,c.useCallback)(async()=>{try{let a=await navigator.mediaDevices.getUserMedia({audio:!0});u.current=a,t.current=[],E(a);let b=new MediaRecorder(a,{audioBitsPerSecond:128e3});b.ondataavailable=a=>{a.data.size>0&&t.current.push(a.data)},b.onstop=()=>{u.current?.getTracks().forEach(a=>a.stop()),u.current=null;let a=C.current;if(D(),a<.15){i.toaster.create({type:"error",title:"音声が検出されませんでした",description:"マイクに向かって話してから、もう一度お試しください。"}),m("idle");return}let b=new Blob(t.current,{type:"audio/webm"});F(b)},r.current=b,b.start(),m("recording")}catch(a){i.toaster.create({type:"error",title:"マイクにアクセスできませんでした",description:a instanceof Error?a.message:String(a)})}},[F,E,D]),H=(0,c.useCallback)(()=>{r.current?.stop()},[]);if(!j)return null;let I=null!==p&&A.includes(p);return(0,b.jsxs)("div",{className:"recording"===l?"inline-flex items-center gap-2 rounded-md bg-destructive/10 p-1":"inline-flex",children:[(0,b.jsx)(g.Button,{size:"icon",variant:"recording"===l?"destructive":"default",onClick:"recording"===l?H:()=>void G(),disabled:"transcribing"===l||"idle"===l&&!I,title:"recording"===l?"停止して入力":"idle"!==l||I?"音声入力":"Whisperサーバーが起動していません(Settingsから起動してください)",children:"transcribing"===l?(0,b.jsx)(d.Loader2,{className:"w-4 h-4 animate-spin"}):"recording"===l?(0,b.jsx)(f.Square,{className:"w-4 h-4"}):(0,b.jsx)(e.Mic,{className:"w-4 h-4"})}),"recording"===l&&(0,b.jsx)("div",{"aria-hidden":!0,className:"h-1.5 w-16 overflow-hidden rounded-full bg-background/60",children:(0,b.jsx)("div",{className:"h-full rounded-full bg-destructive",style:{width:`${Math.round(100*n)}%`}})})]})}let C=(0,a.i(60137).default)("cpu",[["path",{d:"M12 20v2",key:"1lh1kg"}],["path",{d:"M12 2v2",key:"tus03m"}],["path",{d:"M17 20v2",key:"1rnc9c"}],["path",{d:"M17 2v2",key:"11trls"}],["path",{d:"M2 12h2",key:"1t8f8n"}],["path",{d:"M2 17h2",key:"7oei6x"}],["path",{d:"M2 7h2",key:"asdhe0"}],["path",{d:"M20 12h2",key:"1q8mjw"}],["path",{d:"M20 17h2",key:"1fpfkl"}],["path",{d:"M20 7h2",key:"1o8tra"}],["path",{d:"M7 20v2",key:"4gnj0m"}],["path",{d:"M7 2v2",key:"1i4yhu"}],["rect",{x:"4",y:"4",width:"16",height:"16",rx:"2",key:"1vbyd7"}],["rect",{x:"8",y:"8",width:"8",height:"8",rx:"1",key:"z9xiuo"}]]);a.s(["Cpu",0,C],94392)},25015,a=>{"use strict";let b=(0,a.i(60137).default)("play",[["path",{d:"M5 5a2 2 0 0 1 3.008-1.728l11.997 6.998a2 2 0 0 1 .003 3.458l-12 7A2 2 0 0 1 5 19z",key:"10ikf1"}]]);a.s(["Play",0,b],25015)},1464,a=>{"use strict";var b=a.i(87924),c=a.i(94392);function d(a){return(0,b.jsx)("svg",{viewBox:"0 0 24 24",fill:"currentColor","aria-hidden":"true",...a,children:(0,b.jsx)("path",{d:"M16.361 10.26a.894.894 0 0 0-.558.47l-.072.148.001.207c0 .193.004.217.059.353.076.193.152.312.291.448.24.238.51.3.872.205a.86.86 0 0 0 .517-.436.752.752 0 0 0 .08-.498c-.064-.453-.33-.782-.724-.897a1.06 1.06 0 0 0-.466 0zm-9.203.005c-.305.096-.533.32-.65.639a1.187 1.187 0 0 0-.06.52c.057.309.31.59.598.667.362.095.632.033.872-.205.14-.136.215-.255.291-.448.055-.136.059-.16.059-.353l.001-.207-.072-.148a.894.894 0 0 0-.565-.472 1.02 1.02 0 0 0-.474.007Zm4.184 2c-.131.071-.223.25-.195.383.031.143.157.288.353.407.105.063.112.072.117.136.004.038-.01.146-.029.243-.02.094-.036.194-.036.222.002.074.07.195.143.253.064.052.076.054.255.059.164.005.198.001.264-.03.169-.082.212-.234.15-.525-.052-.243-.042-.28.087-.355.137-.08.281-.219.324-.314a.365.365 0 0 0-.175-.48.394.394 0 0 0-.181-.033c-.126 0-.207.03-.355.124l-.085.053-.053-.032c-.219-.13-.259-.145-.391-.143a.396.396 0 0 0-.193.032zm.39-2.195c-.373.036-.475.05-.654.086-.291.06-.68.195-.951.328-.94.46-1.589 1.226-1.787 2.114-.04.176-.045.234-.045.53 0 .294.005.357.043.524.264 1.16 1.332 2.017 2.714 2.173.3.033 1.596.033 1.896 0 1.11-.125 2.064-.727 2.493-1.571.114-.226.169-.372.22-.602.039-.167.044-.23.044-.523 0-.297-.005-.355-.045-.531-.288-1.29-1.539-2.304-3.072-2.497a6.873 6.873 0 0 0-.855-.031zm.645.937a3.283 3.283 0 0 1 1.44.514c.223.148.537.458.671.662.166.251.26.508.303.82.02.143.01.251-.043.482-.08.345-.332.705-.672.957a3.115 3.115 0 0 1-.689.348c-.382.122-.632.144-1.525.138-.582-.006-.686-.01-.853-.042-.57-.107-1.022-.334-1.35-.68-.264-.28-.385-.535-.45-.946-.03-.192.025-.509.137-.776.136-.326.488-.73.836-.963.403-.269.934-.46 1.422-.512.187-.02.586-.02.773-.002zm-5.503-11a1.653 1.653 0 0 0-.683.298C5.617.74 5.173 1.666 4.985 2.819c-.07.436-.119 1.04-.119 1.503 0 .544.064 1.24.155 1.721.02.107.031.202.023.208a8.12 8.12 0 0 1-.187.152 5.324 5.324 0 0 0-.949 1.02 5.49 5.49 0 0 0-.94 2.339 6.625 6.625 0 0 0-.023 1.357c.091.78.325 1.438.727 2.04l.13.195-.037.064c-.269.452-.498 1.105-.605 1.732-.084.496-.095.629-.095 1.294 0 .67.009.803.088 1.266.095.555.288 1.143.503 1.534.071.128.243.393.264.407.007.003-.014.067-.046.141a7.405 7.405 0 0 0-.548 1.873c-.062.417-.071.552-.071.991 0 .56.031.832.148 1.279L3.42 24h1.478l-.05-.091c-.297-.552-.325-1.575-.068-2.597.117-.472.25-.819.498-1.296l.148-.29v-.177c0-.165-.003-.184-.057-.293a.915.915 0 0 0-.194-.25 1.74 1.74 0 0 1-.385-.543c-.424-.92-.506-2.286-.208-3.451.124-.486.329-.918.544-1.154a.787.787 0 0 0 .223-.531c0-.195-.07-.355-.224-.522a3.136 3.136 0 0 1-.817-1.729c-.14-.96.114-2.005.69-2.834.563-.814 1.353-1.336 2.237-1.475.199-.033.57-.028.776.01.226.04.367.028.512-.041.179-.085.268-.19.374-.431.093-.215.165-.333.36-.576.234-.29.46-.489.822-.729.413-.27.884-.467 1.352-.561.17-.035.25-.04.569-.04.319 0 .398.005.569.04a4.07 4.07 0 0 1 1.914.997c.117.109.398.457.488.602.034.057.095.177.132.267.105.241.195.346.374.43.14.068.286.082.503.045.343-.058.607-.053.943.016 1.144.23 2.14 1.173 2.581 2.437.385 1.108.276 2.267-.296 3.153-.097.15-.193.27-.333.419-.301.322-.301.722-.001 1.053.493.539.801 1.866.708 3.036-.062.772-.26 1.463-.533 1.854a2.096 2.096 0 0 1-.224.258.916.916 0 0 0-.194.25c-.054.109-.057.128-.057.293v.178l.148.29c.248.476.38.823.498 1.295.253 1.008.231 2.01-.059 2.581a.845.845 0 0 0-.044.098c0 .006.329.009.732.009h.73l.02-.074.036-.134c.019-.076.057-.3.088-.516.029-.217.029-1.016 0-1.258-.11-.875-.295-1.57-.597-2.226-.032-.074-.053-.138-.046-.141.008-.005.057-.074.108-.152.376-.569.607-1.284.724-2.228.031-.26.031-1.378 0-1.628-.083-.645-.182-1.082-.348-1.525a6.083 6.083 0 0 0-.329-.7l-.038-.064.131-.194c.402-.604.636-1.262.727-2.04a6.625 6.625 0 0 0-.024-1.358 5.512 5.512 0 0 0-.939-2.339 5.325 5.325 0 0 0-.95-1.02 8.097 8.097 0 0 1-.186-.152.692.692 0 0 1 .023-.208c.208-1.087.201-2.443-.017-3.503-.19-.924-.535-1.658-.98-2.082-.354-.338-.716-.482-1.15-.455-.996.059-1.8 1.205-2.116 3.01a6.805 6.805 0 0 0-.097.726c0 .036-.007.066-.015.066a.96.96 0 0 1-.149-.078A4.857 4.857 0 0 0 12 3.03c-.832 0-1.687.243-2.456.698a.958.958 0 0 1-.148.078c-.008 0-.015-.03-.015-.066a6.71 6.71 0 0 0-.097-.725C8.997 1.392 8.337.319 7.46.048a2.096 2.096 0 0 0-.585-.041Zm.293 1.402c.248.197.523.759.682 1.388.03.113.06.244.069.292.007.047.026.152.041.233.067.365.098.76.102 1.24l.002.475-.12.175-.118.178h-.278c-.324 0-.646.041-.954.124l-.238.06c-.033.007-.038-.003-.057-.144a8.438 8.438 0 0 1 .016-2.323c.124-.788.413-1.501.696-1.711.067-.05.079-.049.157.013zm9.825-.012c.17.126.358.46.498.888.28.854.36 2.028.212 3.145-.019.14-.024.151-.057.144l-.238-.06a3.693 3.693 0 0 0-.954-.124h-.278l-.119-.178-.119-.175.002-.474c.004-.669.066-1.19.214-1.772.157-.623.434-1.185.68-1.382.078-.062.09-.063.159-.012z"})})}function e(a){return(0,b.jsx)("svg",{viewBox:"0 0 24 24",fill:"currentColor","aria-hidden":"true",...a,children:(0,b.jsx)("path",{d:"M14.025 0c3.492 0 5.237 0 6.571.68a6.24 6.24 0 0 1 2.725 2.724C24 4.738 24 6.484 24 9.975v4.05c0 3.492 0 5.237-.68 6.571a6.24 6.24 0 0 1-2.724 2.725c-1.334.679-3.08.679-6.571.679h-4.05c-3.492 0-5.237 0-6.571-.68A6.24 6.24 0 0 1 .68 20.597C0 19.262 0 17.516 0 14.025v-4.05c0-3.492 0-5.237.68-6.571A6.23 6.23 0 0 1 3.404.68C4.738 0 6.484 0 9.975 0zM7.688 16.313a1.313 1.313 0 0 0 0 2.625h11.625a1.313 1.313 0 0 0 0-2.625zm-3-3.75a1.313 1.313 0 0 0 0 2.624h11.625a1.313 1.313 0 0 0 0-2.624zm3-3.75a1.313 1.313 0 0 0 0 2.624h11.625a1.313 1.313 0 0 0 0-2.624zm-3-3.75a1.313 1.313 0 0 0 0 2.625h11.625a1.313 1.313 0 0 0 0-2.625z"})})}let f={ollama:d,lmstudio:e};function g({provider:a,...c}){let d=f[a];return(0,b.jsx)(d,{...c})}a.s(["ClaudeIcon",0,function(a){return(0,b.jsx)("svg",{viewBox:"0 0 24 24",fill:"currentColor","aria-hidden":"true",...a,children:(0,b.jsx)("path",{d:"m4.7144 15.9555 4.7174-2.6471.079-.2307-.079-.1275h-.2307l-.7893-.0486-2.6956-.0729-2.3375-.0971-2.2646-.1214-.5707-.1215-.5343-.7042.0546-.3522.4797-.3218.686.0608 1.5179.1032 2.2767.1578 1.6514.0972 2.4468.255h.3886l.0546-.1579-.1336-.0971-.1032-.0972L6.973 9.8356l-2.55-1.6879-1.3356-.9714-.7225-.4918-.3643-.4614-.1578-1.0078.6557-.7225.8803.0607.2246.0607.8925.686 1.9064 1.4754 2.4893 1.8336.3643.3035.1457-.1032.0182-.0728-.164-.2733-1.3539-2.4467-1.445-2.4893-.6435-1.032-.17-.6194c-.0607-.255-.1032-.4674-.1032-.7285L6.287.1335 6.6997 0l.9957.1336.419.3642.6192 1.4147 1.0018 2.2282 1.5543 3.0296.4553.8985.2429.8318.091.255h.1579v-.1457l.1275-1.706.2368-2.0947.2307-2.6957.0789-.7589.3764-.9107.7468-.4918.5828.2793.4797.686-.0668.4433-.2853 1.8517-.5586 2.9021-.3643 1.9429h.2125l.2429-.2429.9835-1.3053 1.6514-2.0643.7286-.8196.85-.9046.5464-.4311h1.0321l.759 1.1293-.34 1.1657-1.0625 1.3478-.8804 1.1414-1.2628 1.7-.7893 1.36.0729.1093.1882-.0183 2.8535-.607 1.5421-.2794 1.8396-.3157.8318.3886.091.3946-.3278.8075-1.967.4857-2.3072.4614-3.4364.8136-.0425.0304.0486.0607 1.5482.1457.6618.0364h1.621l3.0175.2247.7892.522.4736.6376-.079.4857-1.2142.6193-1.6393-.3886-3.825-.9107-1.3113-.3279h-.1822v.1093l1.0929 1.0686 2.0035 1.8092 2.5075 2.3314.1275.5768-.3218.4554-.34-.0486-2.2039-1.6575-.85-.7468-1.9246-1.621h-.1275v.17l.4432.6496 2.3436 3.5214.1214 1.0807-.17.3521-.6071.2125-.6679-.1214-1.3721-1.9246L14.38 17.959l-1.1414-1.9428-.1397.079-.674 7.2552-.3156.3703-.7286.2793-.6071-.4614-.3218-.7468.3218-1.4753.3886-1.9246.3157-1.53.2853-1.9004.17-.6314-.0121-.0425-.1397.0182-1.4328 1.9672-2.1796 2.9446-1.7243 1.8456-.4128.164-.7164-.3704.0667-.6618.4008-.5889 2.386-3.0357 1.4389-1.882.929-1.0868-.0062-.1579h-.0546l-6.3385 4.1164-1.1293.1457-.4857-.4554.0608-.7467.2307-.2429 1.9064-1.3114Z"})})},"LmStudioIcon",0,e,"LocalLlmIcon",0,g,"LocalLlmTabIcon",0,function({provider:a,className:d}){return a?(0,b.jsx)(g,{provider:a,className:d}):(0,b.jsx)(c.Cpu,{className:d})},"OllamaIcon",0,d])},12223,a=>{"use strict";var b=a.i(72131),c=a.i(91399);function d(a){let[d,e]=(0,b.useState)(null),f=(0,b.useCallback)(async()=>{try{let b=await fetch((0,c.apiUrl)(`/api/settings/${a}`));if(!b.ok)throw Error(`HTTP ${b.status}`);let d=await b.json();e(d.data)}catch(b){console.error(`Failed to fetch ${a} settings:`,b),e(null)}},[a]);return(0,b.useEffect)(()=>{f()},[f]),{settings:d,setSettings:e,reload:f}}a.s(["useLmStudioSettings",0,function(){return d("lmstudio")},"useLocalLlmSettings",0,function(){return d("local-llm")},"useOllamaSettings",0,function(){return d("ollama")}])},29801,a=>{"use strict";let b={ollama:"Ollama",lmstudio:"LM Studio"};a.s(["LOCAL_LLM_PROVIDER_LABEL",0,b,"localLlmTabLabel",0,function(a){return a?b[a]:"ローカルLLM"}])}];
2
-
3
- //# sourceMappingURL=_0_2b4wf._.js.map
@@ -1,3 +0,0 @@
1
- module.exports=[210,a=>{"use strict";let b=(0,a.i(60137).default)("arrow-left",[["path",{d:"m12 19-7-7 7-7",key:"1l729n"}],["path",{d:"M19 12H5",key:"x3x0zl"}]]);a.s(["ArrowLeft",0,b],210)},99464,92e3,a=>{"use strict";var b=a.i(60137);let c=(0,b.default)("pencil",[["path",{d:"M21.174 6.812a1 1 0 0 0-3.986-3.987L3.842 16.174a2 2 0 0 0-.5.83l-1.321 4.352a.5.5 0 0 0 .623.622l4.353-1.32a2 2 0 0 0 .83-.497z",key:"1a8usu"}],["path",{d:"m15 5 4 4",key:"1mk7zo"}]]);a.s(["Pencil",0,c],99464);let d=(0,b.default)("circle-alert",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["line",{x1:"12",x2:"12",y1:"8",y2:"12",key:"1pkeuh"}],["line",{x1:"12",x2:"12.01",y1:"16",y2:"16",key:"4dfq90"}]]);a.s(["AlertCircle",0,d],92e3)},4975,48124,a=>{"use strict";var b=a.i(60137);let c=(0,b.default)("mic",[["path",{d:"M12 19v3",key:"npa21l"}],["path",{d:"M19 10v2a7 7 0 0 1-14 0v-2",key:"1vc78b"}],["rect",{x:"9",y:"2",width:"6",height:"13",rx:"3",key:"s6n7sd"}]]);a.s(["Mic",0,c],4975);let d=(0,b.default)("square",[["rect",{width:"18",height:"18",x:"3",y:"3",rx:"2",key:"afitv7"}]]);a.s(["Square",0,d],48124)},82434,a=>{"use strict";let b=(0,a.i(60137).default)("bot",[["path",{d:"M12 8V4H8",key:"hb8ula"}],["rect",{width:"16",height:"12",x:"4",y:"8",rx:"2",key:"enze0r"}],["path",{d:"M2 14h2",key:"vft8re"}],["path",{d:"M20 14h2",key:"4cs60a"}],["path",{d:"M15 13v2",key:"1xurst"}],["path",{d:"M9 13v2",key:"rq6x2g"}]]);a.s(["Bot",0,b],82434)},36620,a=>{"use strict";let b=(0,a.i(60137).default)("circle-question-mark",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3",key:"1u773s"}],["path",{d:"M12 17h.01",key:"p32p05"}]]);a.s(["CircleHelp",0,b],36620)},92552,a=>{"use strict";var b=a.i(87924),c=a.i(760);a.s(["Card",0,function({className:a,size:d="default",...e}){return(0,b.jsx)("div",{"data-slot":"card","data-size":d,className:(0,c.cn)("group/card flex flex-col gap-4 overflow-hidden rounded-lg bg-card py-4 text-xs/relaxed text-card-foreground ring-1 ring-foreground/10 has-[>img:first-child]:pt-0 data-[size=sm]:gap-3 data-[size=sm]:py-3 *:[img:first-child]:rounded-t-lg *:[img:last-child]:rounded-b-lg",a),...e})},"CardContent",0,function({className:a,...d}){return(0,b.jsx)("div",{"data-slot":"card-content",className:(0,c.cn)("px-4 group-data-[size=sm]/card:px-3",a),...d})},"CardDescription",0,function({className:a,...d}){return(0,b.jsx)("div",{"data-slot":"card-description",className:(0,c.cn)("text-xs/relaxed text-muted-foreground",a),...d})},"CardHeader",0,function({className:a,...d}){return(0,b.jsx)("div",{"data-slot":"card-header",className:(0,c.cn)("group/card-header @container/card-header grid auto-rows-min items-start gap-1 rounded-t-lg px-4 group-data-[size=sm]/card:px-3 has-data-[slot=card-action]:grid-cols-[1fr_auto] has-data-[slot=card-description]:grid-rows-[auto_auto] [.border-b]:pb-4 group-data-[size=sm]/card:[.border-b]:pb-3",a),...d})},"CardTitle",0,function({className:a,...d}){return(0,b.jsx)("div",{"data-slot":"card-title",className:(0,c.cn)("font-heading text-sm font-medium",a),...d})}])},56026,19768,94392,a=>{"use strict";a.s(["LLM_SYSTEM_PROMPT_STORAGE_KEY",()=>z,"VoiceInputButton",()=>B,"WHISPER_PROMPT_STORAGE_KEY",()=>y],56026);var b=a.i(87924),c=a.i(72131),d=a.i(96221),e=a.i(4975),f=a.i(48124),g=a.i(39524),h=a.i(91399),i=a.i(6828);a.s(["LOCAL_LLM_ENABLED_STORAGE_KEY",()=>s,"LocalLlmSection",()=>x],19768);var j=a.i(92e3),k=a.i(82434),l=a.i(67453),m=a.i(36620),n=a.i(92552),o=a.i(90002),p=a.i(65025),q=a.i(97463);let r="tsunagi:local-llm-enabled",s=r,t={not_running:"停止中",installing_deps:"依存関係をインストール中...",downloading_model:"モデルをダウンロード中...",starting_server:"サーバーを起動中... (モデルのロードに数十秒かかる場合があります)",running:"実行中",running_external:"実行中 (tsunagi外で起動)",error:"エラー"},u=["installing_deps","downloading_model","starting_server"],v=["running","running_external"];function w(a){let b=a/0x40000000;return b>=.1?`${b.toFixed(2)} GB`:`${(a/1048576).toFixed(0)} MB`}function x(){let[a,e]=(0,c.useState)(!1),[s,x]=(0,c.useState)(!1),[y,A]=(0,c.useState)(null),[B,C]=(0,c.useState)(""),D=(0,c.useRef)(null),E=(0,c.useCallback)(a=>{e(a),localStorage.setItem(r,String(a))},[]),F=(0,c.useCallback)(a=>{C(a),localStorage.setItem(z,a)},[]),G=(0,c.useCallback)(async()=>{let a=await fetch((0,h.apiUrl)("/api/llm/server/status")),b=await a.json();return A(b),b},[]);(0,c.useEffect)(()=>{e("true"===localStorage.getItem(r)),C(localStorage.getItem(z)??""),G()},[G]),(0,c.useEffect)(()=>{y&&v.includes(y.step)&&!a&&(E(!0),i.toaster.create({type:"success",title:"ローカルLLMが有効化されました"}))},[y,a,E]),(0,c.useEffect)(()=>(y&&u.includes(y.step)&&!D.current&&(D.current=setInterval(()=>{G().then(a=>{!u.includes(a.step)&&D.current&&(clearInterval(D.current),D.current=null)})},1e3)),()=>{D.current&&(clearInterval(D.current),D.current=null)}),[y,G]);let H=(0,c.useCallback)(()=>{G(),x(!0)},[G]),I=(0,c.useCallback)(async()=>{try{let a=await fetch((0,h.apiUrl)("/api/llm/server/start"),{method:"POST"});if(!a.ok){let b=await a.json().catch(()=>null);throw Error(b?.error||`HTTPエラー: ${a.status}`)}A(await a.json())}catch(a){i.toaster.create({type:"error",title:"サーバーの起動に失敗しました",description:a instanceof Error?a.message:String(a)})}},[]),J=(0,c.useCallback)(async()=>{try{let a=await fetch((0,h.apiUrl)("/api/llm/server/stop"),{method:"POST"});if(!a.ok){let b=await a.json().catch(()=>null);throw Error(b?.error||`HTTPエラー: ${a.status}`)}A(await a.json())}catch(a){i.toaster.create({type:"error",title:"サーバーの停止に失敗しました",description:a instanceof Error?a.message:String(a)})}},[]),K=(0,c.useCallback)(()=>{E(!1),y&&v.includes(y.step)&&J()},[E,J,y]),L=y?.serverDir,M=y?.downloadProgress,N=M?M.downloadedBytes/M.totalBytes*100:0,O=null!==y,P=O&&v.includes(y.step);return(0,b.jsxs)(n.Card,{children:[(0,b.jsxs)(n.CardHeader,{children:[(0,b.jsxs)("div",{className:"flex items-center gap-1",children:[(0,b.jsx)(n.CardTitle,{children:"ローカルLLM (実験的機能)"}),(0,b.jsx)(g.Button,{variant:"ghost",size:"icon-sm",onClick:H,title:"ローカルLLMについて",children:(0,b.jsx)(m.CircleHelp,{})})]}),(0,b.jsxs)(n.CardDescription,{children:["ローカルで動作するLLM(Qwen3-30B-A3B, MoE)を利用します。",(0,b.jsx)("strong",{className:"font-medium text-foreground",children:"有効にすると、音声入力の文字起こし結果がこのLLMで自動整形されるようになります"}),"(無効時は文字起こし結果をそのまま使用)。"]})]}),(0,b.jsx)(n.CardContent,{className:"flex flex-col gap-3",children:a?(0,b.jsxs)(b.Fragment,{children:[(0,b.jsxs)("div",{className:"flex flex-wrap items-center gap-2",children:[O?P?(0,b.jsxs)("span",{className:"flex items-center gap-2 text-success",children:[(0,b.jsx)(l.CheckCircle2,{className:"size-4"}),"ローカルLLM: 有効"]}):(0,b.jsxs)("span",{className:"flex items-center gap-2 text-warning",children:[(0,b.jsx)(j.AlertCircle,{className:"size-4"}),"ローカルLLM: 有効化済み(サーバー停止中)"]}):(0,b.jsxs)("span",{className:"flex items-center gap-2 text-muted-foreground",children:[(0,b.jsx)(d.Loader2,{className:"size-4 animate-spin"}),"状態を確認中..."]}),y&&(0,b.jsxs)("span",{className:"text-xs/relaxed text-muted-foreground",children:["(",t[y.step],")"]}),O&&!P&&(0,b.jsxs)(g.Button,{size:"default",onClick:H,children:[(0,b.jsx)(k.Bot,{}),"サーバーを起動"]}),(0,b.jsx)(g.Button,{size:"default",variant:"outline",onClick:K,children:"無効にする"})]}),(0,b.jsxs)("div",{children:[(0,b.jsx)("label",{className:"mb-1 block text-xs font-medium text-muted-foreground",children:"整形システムプロンプト (任意)"}),(0,b.jsx)(q.Textarea,{value:B,onChange:a=>F(a.target.value),placeholder:"例: 句読点の追加と誤字修正のみ行い、言い回しは変えないでください。",className:"min-h-16 text-xs"}),(0,b.jsx)("p",{className:"mt-1 text-[0.65rem] text-muted-foreground",children:"文字起こし結果をLLMで整形する際の指示です。空欄の場合は既定のプロンプト(句読点の追加・誤字修正のみを行う指示)を使用します。"})]})]}):(0,b.jsxs)(g.Button,{size:"default",onClick:H,children:[(0,b.jsx)(k.Bot,{}),"ローカルLLMを有効化する"]})}),(0,b.jsx)(o.Dialog,{open:s,onOpenChange:({open:a})=>x(a),title:"ローカルLLMについて",maxWidth:"2xl",children:(0,b.jsxs)("div",{className:"space-y-4 text-sm",children:[(0,b.jsxs)("div",{children:[(0,b.jsx)("p",{className:"font-medium text-foreground",children:"実験的機能です"}),(0,b.jsx)("p",{className:"text-muted-foreground",children:"音声入力の文字起こし結果を、ローカルで動作するLLM(mlx-lm / Qwen3-30B-A3B, MoE構成)で整形します。MoE構成のため実計算に使うアクティブパラメータは約3Bで、denseな同規模モデルより高速に動作します。精度・速度は環境に依存し、今後変更される可能性があります。"})]}),(0,b.jsxs)("div",{children:[(0,b.jsx)("p",{className:"font-medium text-foreground",children:"対応環境"}),(0,b.jsx)("p",{className:"text-muted-foreground",children:"Apple Silicon Mac (M1/M2/M3/M4) のみ対応。Windows/Linuxでは利用できません。メモリ32GB以上を推奨します。"})]}),(0,b.jsxs)("div",{children:[(0,b.jsx)("p",{className:"font-medium text-foreground",children:"必要なもの(事前に手動でインストール)"}),(0,b.jsx)("ul",{className:"list-disc pl-5 text-muted-foreground",children:(0,b.jsx)("li",{children:"Python 3.9以降(Xcode Command Line Tools または Homebrew経由で入手可能)"})})]}),(0,b.jsxs)("div",{children:[(0,b.jsx)("p",{className:"mb-1 font-medium text-foreground",children:"セットアップ・起動"}),(0,b.jsx)("p",{className:"text-muted-foreground",children:"下のボタンから、依存関係のインストール・モデルのダウンロード・サーバー起動まで自動で行われます(初回はモデルサイズが大きく数分〜数十分かかります)。"}),y&&!L&&(0,b.jsx)("p",{className:"mt-1 text-destructive",children:"llm-serverが見つかりませんでした。インストールが壊れている可能性があります。"})]}),(0,b.jsxs)("div",{children:[(0,b.jsx)("p",{className:"mb-1 font-medium text-foreground",children:"アンインストール"}),(0,b.jsxs)("p",{className:"text-muted-foreground",children:["ローカルLLMのためにダウンロードされるもの(Pythonの依存関係・LLMモデル、合計約17GB)は全て",(0,b.jsx)("code",{className:"rounded bg-muted px-1",children:"~/.tsunagi/llm"}),"に保存されます。不要になった場合はこのディレクトリを削除するだけで、関連リソースを完全に削除できます。"]})]}),(0,b.jsxs)("div",{className:"border-t border-border pt-4",children:[(!y||"not_running"===y.step||"error"===y.step)&&(0,b.jsxs)("div",{className:"flex flex-col gap-2",children:[(0,b.jsxs)(g.Button,{size:"default",onClick:()=>void I(),disabled:!y,children:[y?(0,b.jsx)(k.Bot,{}):(0,b.jsx)(d.Loader2,{className:"animate-spin"}),"LLMサーバーを起動"]}),y?.step==="error"&&y.error&&(0,b.jsx)("p",{className:"text-xs/relaxed text-destructive",children:y.error})]}),y?.step==="installing_deps"&&(0,b.jsxs)(g.Button,{size:"default",disabled:!0,children:[(0,b.jsx)(d.Loader2,{className:"animate-spin"}),"依存関係をインストール中... (数分かかる場合があります)"]}),y?.step==="downloading_model"&&(0,b.jsxs)("div",{className:"flex flex-col gap-2",children:[(0,b.jsxs)("div",{className:"flex items-center gap-2 text-xs/relaxed text-muted-foreground",children:[(0,b.jsx)(d.Loader2,{className:"size-4 animate-spin"}),"モデルをダウンロード中... (約17GB)"]}),M&&(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)(p.Progress,{value:N}),(0,b.jsxs)("p",{className:"text-xs/relaxed text-muted-foreground",children:[w(M.downloadedBytes)," / ",w(M.totalBytes)," (",N.toFixed(0),"%) ・ ",function(a){if(null===a)return"残り時間を計算中...";if(a<60)return`残り約${a}秒`;let b=Math.floor(a/60);return`残り約${b}分${a%60}秒`}(M.etaSeconds)]})]})]}),y?.step==="starting_server"&&(0,b.jsxs)(g.Button,{size:"default",disabled:!0,children:[(0,b.jsx)(d.Loader2,{className:"animate-spin"}),"サーバーを起動中... (モデルのロードに数十秒かかる場合があります)"]}),y&&v.includes(y.step)&&(0,b.jsxs)("div",{className:"flex flex-wrap items-center gap-2",children:[(0,b.jsxs)("span",{className:"flex items-center gap-2 text-success",children:[(0,b.jsx)(l.CheckCircle2,{className:"size-4"}),"サーバーは起動しています"]}),(0,b.jsxs)(g.Button,{size:"default",variant:"outline",onClick:()=>void J(),children:[(0,b.jsx)(f.Square,{}),"サーバーを停止"]})]})]})]})})]})}let y="tsunagi:whisper-prompt",z="tsunagi:llm-system-prompt",A=["running","running_external"];function B({onTranscribed:a}){let[j,k]=(0,c.useState)(!1),[l,m]=(0,c.useState)("idle"),[n,o]=(0,c.useState)(0),[p,q]=(0,c.useState)(null),r=(0,c.useRef)(null),t=(0,c.useRef)([]),u=(0,c.useRef)(null),v=(0,c.useRef)(null),w=(0,c.useRef)(null),x=(0,c.useRef)(0),C=(0,c.useRef)(0);(0,c.useEffect)(()=>{k("true"===localStorage.getItem("tsunagi:voice-input-enabled"))},[]),(0,c.useEffect)(()=>{if(!j)return;let a=!1,b=async()=>{try{let b=await fetch((0,h.apiUrl)("/api/whisper/server/status")),c=await b.json();a||q(c.step)}catch{a||q("not_running")}};b();let c=setInterval(b,5e3);return()=>{a=!0,clearInterval(c)}},[j]);let D=(0,c.useCallback)(()=>{w.current&&(clearInterval(w.current),w.current=null),v.current?.close(),v.current=null,o(0)},[]);(0,c.useEffect)(()=>()=>{D()},[D]);let E=(0,c.useCallback)(a=>{let b=new AudioContext,c=b.createMediaStreamSource(a),d=b.createAnalyser();d.fftSize=2048,c.connect(d),v.current=b,x.current=0,C.current=0;let e=new Float32Array(d.fftSize);w.current=setInterval(()=>{d.getFloatTimeDomainData(e);let a=0;for(let b=0;b<e.length;b++)a+=e[b]*e[b];let b=Math.sqrt(a/e.length),c=Math.min(1,Math.max(0,((b>0?20*Math.log10(b):-60)- -60)/50));C.current=Math.max(C.current,c),x.current=.3*x.current+.7*c,o(x.current)},50)},[]),F=(0,c.useCallback)(async b=>{m("transcribing");try{let c=new FormData,d=localStorage.getItem(y);d&&c.append("prompt",d);let e="true"===localStorage.getItem(s);c.append("useLlm",String(e));let f=localStorage.getItem(z);f&&c.append("systemPrompt",f),c.append("file",b,"recording.webm");let g=await fetch((0,h.apiUrl)("/api/whisper/transcribe"),{method:"POST",body:c});if(!g.ok){let a=await g.json().catch(()=>null);throw Error(a?.error||`HTTPエラー: ${g.status}`)}let j=await g.json();j.warning&&i.toaster.create({type:"error",title:"LLM整形をスキップしました",description:j.warning}),j.text&&a(j.text)}catch(a){i.toaster.create({type:"error",title:"文字起こしに失敗しました",description:a instanceof Error?a.message:String(a)})}finally{m("idle")}},[a]),G=(0,c.useCallback)(async()=>{try{let a=await navigator.mediaDevices.getUserMedia({audio:!0});u.current=a,t.current=[],E(a);let b=new MediaRecorder(a,{audioBitsPerSecond:128e3});b.ondataavailable=a=>{a.data.size>0&&t.current.push(a.data)},b.onstop=()=>{u.current?.getTracks().forEach(a=>a.stop()),u.current=null;let a=C.current;if(D(),a<.15){i.toaster.create({type:"error",title:"音声が検出されませんでした",description:"マイクに向かって話してから、もう一度お試しください。"}),m("idle");return}let b=new Blob(t.current,{type:"audio/webm"});F(b)},r.current=b,b.start(),m("recording")}catch(a){i.toaster.create({type:"error",title:"マイクにアクセスできませんでした",description:a instanceof Error?a.message:String(a)})}},[F,E,D]),H=(0,c.useCallback)(()=>{r.current?.stop()},[]);if(!j)return null;let I=null!==p&&A.includes(p);return(0,b.jsxs)("div",{className:"recording"===l?"inline-flex items-center gap-2 rounded-md bg-destructive/10 p-1":"inline-flex",children:[(0,b.jsx)(g.Button,{size:"icon",variant:"recording"===l?"destructive":"default",onClick:"recording"===l?H:()=>void G(),disabled:"transcribing"===l||"idle"===l&&!I,title:"recording"===l?"停止して入力":"idle"!==l||I?"音声入力":"Whisperサーバーが起動していません(Settingsから起動してください)",children:"transcribing"===l?(0,b.jsx)(d.Loader2,{className:"w-4 h-4 animate-spin"}):"recording"===l?(0,b.jsx)(f.Square,{className:"w-4 h-4"}):(0,b.jsx)(e.Mic,{className:"w-4 h-4"})}),"recording"===l&&(0,b.jsx)("div",{"aria-hidden":!0,className:"h-1.5 w-16 overflow-hidden rounded-full bg-background/60",children:(0,b.jsx)("div",{className:"h-full rounded-full bg-destructive",style:{width:`${Math.round(100*n)}%`}})})]})}let C=(0,a.i(60137).default)("cpu",[["path",{d:"M12 20v2",key:"1lh1kg"}],["path",{d:"M12 2v2",key:"tus03m"}],["path",{d:"M17 20v2",key:"1rnc9c"}],["path",{d:"M17 2v2",key:"11trls"}],["path",{d:"M2 12h2",key:"1t8f8n"}],["path",{d:"M2 17h2",key:"7oei6x"}],["path",{d:"M2 7h2",key:"asdhe0"}],["path",{d:"M20 12h2",key:"1q8mjw"}],["path",{d:"M20 17h2",key:"1fpfkl"}],["path",{d:"M20 7h2",key:"1o8tra"}],["path",{d:"M7 20v2",key:"4gnj0m"}],["path",{d:"M7 2v2",key:"1i4yhu"}],["rect",{x:"4",y:"4",width:"16",height:"16",rx:"2",key:"1vbyd7"}],["rect",{x:"8",y:"8",width:"8",height:"8",rx:"1",key:"z9xiuo"}]]);a.s(["Cpu",0,C],94392)},1464,a=>{"use strict";var b=a.i(87924),c=a.i(94392);function d(a){return(0,b.jsx)("svg",{viewBox:"0 0 24 24",fill:"currentColor","aria-hidden":"true",...a,children:(0,b.jsx)("path",{d:"M16.361 10.26a.894.894 0 0 0-.558.47l-.072.148.001.207c0 .193.004.217.059.353.076.193.152.312.291.448.24.238.51.3.872.205a.86.86 0 0 0 .517-.436.752.752 0 0 0 .08-.498c-.064-.453-.33-.782-.724-.897a1.06 1.06 0 0 0-.466 0zm-9.203.005c-.305.096-.533.32-.65.639a1.187 1.187 0 0 0-.06.52c.057.309.31.59.598.667.362.095.632.033.872-.205.14-.136.215-.255.291-.448.055-.136.059-.16.059-.353l.001-.207-.072-.148a.894.894 0 0 0-.565-.472 1.02 1.02 0 0 0-.474.007Zm4.184 2c-.131.071-.223.25-.195.383.031.143.157.288.353.407.105.063.112.072.117.136.004.038-.01.146-.029.243-.02.094-.036.194-.036.222.002.074.07.195.143.253.064.052.076.054.255.059.164.005.198.001.264-.03.169-.082.212-.234.15-.525-.052-.243-.042-.28.087-.355.137-.08.281-.219.324-.314a.365.365 0 0 0-.175-.48.394.394 0 0 0-.181-.033c-.126 0-.207.03-.355.124l-.085.053-.053-.032c-.219-.13-.259-.145-.391-.143a.396.396 0 0 0-.193.032zm.39-2.195c-.373.036-.475.05-.654.086-.291.06-.68.195-.951.328-.94.46-1.589 1.226-1.787 2.114-.04.176-.045.234-.045.53 0 .294.005.357.043.524.264 1.16 1.332 2.017 2.714 2.173.3.033 1.596.033 1.896 0 1.11-.125 2.064-.727 2.493-1.571.114-.226.169-.372.22-.602.039-.167.044-.23.044-.523 0-.297-.005-.355-.045-.531-.288-1.29-1.539-2.304-3.072-2.497a6.873 6.873 0 0 0-.855-.031zm.645.937a3.283 3.283 0 0 1 1.44.514c.223.148.537.458.671.662.166.251.26.508.303.82.02.143.01.251-.043.482-.08.345-.332.705-.672.957a3.115 3.115 0 0 1-.689.348c-.382.122-.632.144-1.525.138-.582-.006-.686-.01-.853-.042-.57-.107-1.022-.334-1.35-.68-.264-.28-.385-.535-.45-.946-.03-.192.025-.509.137-.776.136-.326.488-.73.836-.963.403-.269.934-.46 1.422-.512.187-.02.586-.02.773-.002zm-5.503-11a1.653 1.653 0 0 0-.683.298C5.617.74 5.173 1.666 4.985 2.819c-.07.436-.119 1.04-.119 1.503 0 .544.064 1.24.155 1.721.02.107.031.202.023.208a8.12 8.12 0 0 1-.187.152 5.324 5.324 0 0 0-.949 1.02 5.49 5.49 0 0 0-.94 2.339 6.625 6.625 0 0 0-.023 1.357c.091.78.325 1.438.727 2.04l.13.195-.037.064c-.269.452-.498 1.105-.605 1.732-.084.496-.095.629-.095 1.294 0 .67.009.803.088 1.266.095.555.288 1.143.503 1.534.071.128.243.393.264.407.007.003-.014.067-.046.141a7.405 7.405 0 0 0-.548 1.873c-.062.417-.071.552-.071.991 0 .56.031.832.148 1.279L3.42 24h1.478l-.05-.091c-.297-.552-.325-1.575-.068-2.597.117-.472.25-.819.498-1.296l.148-.29v-.177c0-.165-.003-.184-.057-.293a.915.915 0 0 0-.194-.25 1.74 1.74 0 0 1-.385-.543c-.424-.92-.506-2.286-.208-3.451.124-.486.329-.918.544-1.154a.787.787 0 0 0 .223-.531c0-.195-.07-.355-.224-.522a3.136 3.136 0 0 1-.817-1.729c-.14-.96.114-2.005.69-2.834.563-.814 1.353-1.336 2.237-1.475.199-.033.57-.028.776.01.226.04.367.028.512-.041.179-.085.268-.19.374-.431.093-.215.165-.333.36-.576.234-.29.46-.489.822-.729.413-.27.884-.467 1.352-.561.17-.035.25-.04.569-.04.319 0 .398.005.569.04a4.07 4.07 0 0 1 1.914.997c.117.109.398.457.488.602.034.057.095.177.132.267.105.241.195.346.374.43.14.068.286.082.503.045.343-.058.607-.053.943.016 1.144.23 2.14 1.173 2.581 2.437.385 1.108.276 2.267-.296 3.153-.097.15-.193.27-.333.419-.301.322-.301.722-.001 1.053.493.539.801 1.866.708 3.036-.062.772-.26 1.463-.533 1.854a2.096 2.096 0 0 1-.224.258.916.916 0 0 0-.194.25c-.054.109-.057.128-.057.293v.178l.148.29c.248.476.38.823.498 1.295.253 1.008.231 2.01-.059 2.581a.845.845 0 0 0-.044.098c0 .006.329.009.732.009h.73l.02-.074.036-.134c.019-.076.057-.3.088-.516.029-.217.029-1.016 0-1.258-.11-.875-.295-1.57-.597-2.226-.032-.074-.053-.138-.046-.141.008-.005.057-.074.108-.152.376-.569.607-1.284.724-2.228.031-.26.031-1.378 0-1.628-.083-.645-.182-1.082-.348-1.525a6.083 6.083 0 0 0-.329-.7l-.038-.064.131-.194c.402-.604.636-1.262.727-2.04a6.625 6.625 0 0 0-.024-1.358 5.512 5.512 0 0 0-.939-2.339 5.325 5.325 0 0 0-.95-1.02 8.097 8.097 0 0 1-.186-.152.692.692 0 0 1 .023-.208c.208-1.087.201-2.443-.017-3.503-.19-.924-.535-1.658-.98-2.082-.354-.338-.716-.482-1.15-.455-.996.059-1.8 1.205-2.116 3.01a6.805 6.805 0 0 0-.097.726c0 .036-.007.066-.015.066a.96.96 0 0 1-.149-.078A4.857 4.857 0 0 0 12 3.03c-.832 0-1.687.243-2.456.698a.958.958 0 0 1-.148.078c-.008 0-.015-.03-.015-.066a6.71 6.71 0 0 0-.097-.725C8.997 1.392 8.337.319 7.46.048a2.096 2.096 0 0 0-.585-.041Zm.293 1.402c.248.197.523.759.682 1.388.03.113.06.244.069.292.007.047.026.152.041.233.067.365.098.76.102 1.24l.002.475-.12.175-.118.178h-.278c-.324 0-.646.041-.954.124l-.238.06c-.033.007-.038-.003-.057-.144a8.438 8.438 0 0 1 .016-2.323c.124-.788.413-1.501.696-1.711.067-.05.079-.049.157.013zm9.825-.012c.17.126.358.46.498.888.28.854.36 2.028.212 3.145-.019.14-.024.151-.057.144l-.238-.06a3.693 3.693 0 0 0-.954-.124h-.278l-.119-.178-.119-.175.002-.474c.004-.669.066-1.19.214-1.772.157-.623.434-1.185.68-1.382.078-.062.09-.063.159-.012z"})})}function e(a){return(0,b.jsx)("svg",{viewBox:"0 0 24 24",fill:"currentColor","aria-hidden":"true",...a,children:(0,b.jsx)("path",{d:"M14.025 0c3.492 0 5.237 0 6.571.68a6.24 6.24 0 0 1 2.725 2.724C24 4.738 24 6.484 24 9.975v4.05c0 3.492 0 5.237-.68 6.571a6.24 6.24 0 0 1-2.724 2.725c-1.334.679-3.08.679-6.571.679h-4.05c-3.492 0-5.237 0-6.571-.68A6.24 6.24 0 0 1 .68 20.597C0 19.262 0 17.516 0 14.025v-4.05c0-3.492 0-5.237.68-6.571A6.23 6.23 0 0 1 3.404.68C4.738 0 6.484 0 9.975 0zM7.688 16.313a1.313 1.313 0 0 0 0 2.625h11.625a1.313 1.313 0 0 0 0-2.625zm-3-3.75a1.313 1.313 0 0 0 0 2.624h11.625a1.313 1.313 0 0 0 0-2.624zm3-3.75a1.313 1.313 0 0 0 0 2.624h11.625a1.313 1.313 0 0 0 0-2.624zm-3-3.75a1.313 1.313 0 0 0 0 2.625h11.625a1.313 1.313 0 0 0 0-2.625z"})})}let f={ollama:d,lmstudio:e};function g({provider:a,...c}){let d=f[a];return(0,b.jsx)(d,{...c})}a.s(["ClaudeIcon",0,function(a){return(0,b.jsx)("svg",{viewBox:"0 0 24 24",fill:"currentColor","aria-hidden":"true",...a,children:(0,b.jsx)("path",{d:"m4.7144 15.9555 4.7174-2.6471.079-.2307-.079-.1275h-.2307l-.7893-.0486-2.6956-.0729-2.3375-.0971-2.2646-.1214-.5707-.1215-.5343-.7042.0546-.3522.4797-.3218.686.0608 1.5179.1032 2.2767.1578 1.6514.0972 2.4468.255h.3886l.0546-.1579-.1336-.0971-.1032-.0972L6.973 9.8356l-2.55-1.6879-1.3356-.9714-.7225-.4918-.3643-.4614-.1578-1.0078.6557-.7225.8803.0607.2246.0607.8925.686 1.9064 1.4754 2.4893 1.8336.3643.3035.1457-.1032.0182-.0728-.164-.2733-1.3539-2.4467-1.445-2.4893-.6435-1.032-.17-.6194c-.0607-.255-.1032-.4674-.1032-.7285L6.287.1335 6.6997 0l.9957.1336.419.3642.6192 1.4147 1.0018 2.2282 1.5543 3.0296.4553.8985.2429.8318.091.255h.1579v-.1457l.1275-1.706.2368-2.0947.2307-2.6957.0789-.7589.3764-.9107.7468-.4918.5828.2793.4797.686-.0668.4433-.2853 1.8517-.5586 2.9021-.3643 1.9429h.2125l.2429-.2429.9835-1.3053 1.6514-2.0643.7286-.8196.85-.9046.5464-.4311h1.0321l.759 1.1293-.34 1.1657-1.0625 1.3478-.8804 1.1414-1.2628 1.7-.7893 1.36.0729.1093.1882-.0183 2.8535-.607 1.5421-.2794 1.8396-.3157.8318.3886.091.3946-.3278.8075-1.967.4857-2.3072.4614-3.4364.8136-.0425.0304.0486.0607 1.5482.1457.6618.0364h1.621l3.0175.2247.7892.522.4736.6376-.079.4857-1.2142.6193-1.6393-.3886-3.825-.9107-1.3113-.3279h-.1822v.1093l1.0929 1.0686 2.0035 1.8092 2.5075 2.3314.1275.5768-.3218.4554-.34-.0486-2.2039-1.6575-.85-.7468-1.9246-1.621h-.1275v.17l.4432.6496 2.3436 3.5214.1214 1.0807-.17.3521-.6071.2125-.6679-.1214-1.3721-1.9246L14.38 17.959l-1.1414-1.9428-.1397.079-.674 7.2552-.3156.3703-.7286.2793-.6071-.4614-.3218-.7468.3218-1.4753.3886-1.9246.3157-1.53.2853-1.9004.17-.6314-.0121-.0425-.1397.0182-1.4328 1.9672-2.1796 2.9446-1.7243 1.8456-.4128.164-.7164-.3704.0667-.6618.4008-.5889 2.386-3.0357 1.4389-1.882.929-1.0868-.0062-.1579h-.0546l-6.3385 4.1164-1.1293.1457-.4857-.4554.0608-.7467.2307-.2429 1.9064-1.3114Z"})})},"LmStudioIcon",0,e,"LocalLlmIcon",0,g,"LocalLlmTabIcon",0,function({provider:a,className:d}){return a?(0,b.jsx)(g,{provider:a,className:d}):(0,b.jsx)(c.Cpu,{className:d})},"OllamaIcon",0,d])},29801,a=>{"use strict";let b={ollama:"Ollama",lmstudio:"LM Studio"};a.s(["LOCAL_LLM_PROVIDER_LABEL",0,b,"localLlmTabLabel",0,function(a){return a?b[a]:"ローカルLLM"}])},25015,a=>{"use strict";let b=(0,a.i(60137).default)("play",[["path",{d:"M5 5a2 2 0 0 1 3.008-1.728l11.997 6.998a2 2 0 0 1 .003 3.458l-12 7A2 2 0 0 1 5 19z",key:"10ikf1"}]]);a.s(["Play",0,b],25015)},12223,a=>{"use strict";var b=a.i(72131),c=a.i(91399);function d(a){let[d,e]=(0,b.useState)(null),f=(0,b.useCallback)(async()=>{try{let b=await fetch((0,c.apiUrl)(`/api/settings/${a}`));if(!b.ok)throw Error(`HTTP ${b.status}`);let d=await b.json();e(d.data)}catch(b){console.error(`Failed to fetch ${a} settings:`,b),e(null)}},[a]);return(0,b.useEffect)(()=>{f()},[f]),{settings:d,setSettings:e,reload:f}}a.s(["useLmStudioSettings",0,function(){return d("lmstudio")},"useLocalLlmSettings",0,function(){return d("local-llm")},"useOllamaSettings",0,function(){return d("ollama")}])},11989,a=>{"use strict";let b=(0,a.i(60137).default)("chevron-right",[["path",{d:"m9 18 6-6-6-6",key:"mthhwq"}]]);a.s(["default",0,b])}];
2
-
3
- //# sourceMappingURL=_0s18_3n._.js.map