keating 4.0.2 → 4.0.3

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 (108) hide show
  1. package/bin/keating.js +1 -1
  2. package/dist/src/core/version.js +1 -1
  3. package/package.json +1 -1
  4. package/web/.output/nitro.json +1 -1
  5. package/web/.output/public/assets/{AnimationPlayer-Bj9E6XAF.js → AnimationPlayer-CYbhLL_R.js} +1 -1
  6. package/web/.output/public/assets/{AssistantChatPanel-CPiSdBQo.js → AssistantChatPanel-DQSKpGWP.js} +122 -122
  7. package/web/.output/public/assets/{CategoricalChart-ZCOId7ho.js → CategoricalChart-BVb9-7_N.js} +1 -1
  8. package/web/.output/public/assets/{Chat-BPuDBuv7.js → Chat-C6p8yxAr.js} +2 -2
  9. package/web/.output/public/assets/{CodeHighlighter-CUd-nVJG.js → CodeHighlighter-DhI0IV5H.js} +1 -1
  10. package/web/.output/public/assets/{ComingUp-BM3f_QSf.js → ComingUp-DFaRgEbt.js} +1 -1
  11. package/web/.output/public/assets/{CourseJoin--37EPPeg.js → CourseJoin-DMZ6foZO.js} +1 -1
  12. package/web/.output/public/assets/CourseWorkspace-l_bPGNhE.js +25 -0
  13. package/web/.output/public/assets/{Courses-DgryGTWV.js → Courses-DIqulPB-.js} +1 -1
  14. package/web/.output/public/assets/{EvolutionDetail-BHwyObAD.js → EvolutionDetail-C-NYL1qL.js} +1 -1
  15. package/web/.output/public/assets/{FlashcardRenderer-hzqoLbnQ.js → FlashcardRenderer-iDgfcwk4.js} +1 -1
  16. package/web/.output/public/assets/{FlashcardShaderField-pDI9y_r4.js → FlashcardShaderField-JGgL2kgp.js} +1 -1
  17. package/web/.output/public/assets/{FlashcardTimer-BANuXJze.js → FlashcardTimer-vPNL9_0N.js} +1 -1
  18. package/web/.output/public/assets/{HyperframesPlayer-BQFYx43N.js → HyperframesPlayer-DEtdwGBR.js} +1 -1
  19. package/web/.output/public/assets/KeatingBench-XnWxgfUC.js +2 -0
  20. package/web/.output/public/assets/{LearningInsightsHeader-Do3bROTu.js → LearningInsightsHeader-DWj2-1xb.js} +1 -1
  21. package/web/.output/public/assets/{Live-HZjRDq-V.js → Live-BasKZMuE.js} +1 -1
  22. package/web/.output/public/assets/{MarkdownBlock-KUcDESQo.js → MarkdownBlock-C89ecD-M.js} +3 -3
  23. package/web/.output/public/assets/ModelSelector-B_EaHvVz.js +1 -0
  24. package/web/.output/public/assets/{Nav-GcfPhZc3.js → Nav-DQ-5KEsA.js} +1 -1
  25. package/web/.output/public/assets/{NotOrganicAccessPromptDialog-CKb6iTFn.js → NotOrganicAccessPromptDialog-DS7PLMx4.js} +1 -1
  26. package/web/.output/public/assets/{NotOrganicCallback-DWbhlP2j.js → NotOrganicCallback-BxKOsisT.js} +1 -1
  27. package/web/.output/public/assets/{OAuthCallback-D15ohKxE.js → OAuthCallback-dk2EQnAU.js} +1 -1
  28. package/web/.output/public/assets/OpenUIPreview-BrBXAEt4.js +1 -0
  29. package/web/.output/public/assets/PatternDigestPanel-jmxcLCUX.js +1 -0
  30. package/web/.output/public/assets/Plus-RIb_ldNd.js +1 -0
  31. package/web/.output/public/assets/{QuizRenderer-CLQqGwub.js → QuizRenderer-DaPQ7ySS.js} +1 -1
  32. package/web/.output/public/assets/{RenderingSmoke-DRHji-yz.js → RenderingSmoke-D3aD8prv.js} +1 -1
  33. package/web/.output/public/assets/{Select-BE2GfDud.js → Select-BYfJxqbI.js} +1 -1
  34. package/web/.output/public/assets/{SharedSession-DAM8ydVu.js → SharedSession-CEsTcr4j.js} +3 -3
  35. package/web/.output/public/assets/{ThemeToggle-BdGijxoN.js → ThemeToggle-BZH64Rpu.js} +1 -1
  36. package/web/.output/public/assets/{TrainingData-7EbVIzmQ.js → TrainingData-DujNU5sy.js} +3 -3
  37. package/web/.output/public/assets/TrajectoryReview-OjkaW6a6.js +35 -0
  38. package/web/.output/public/assets/TrajectoryReviewIndex-C5QAijKT.js +1 -0
  39. package/web/.output/public/assets/TrajectoryReviewWorkspace-DSn96Dxb.js +1 -0
  40. package/web/.output/public/assets/{Usage-BU1OfvzO.js → Usage-C5HU0Yc5.js} +1 -1
  41. package/web/.output/public/assets/activity-DdJDHeam.js +1 -0
  42. package/web/.output/public/assets/{anthropic-messages-rElikI6M.js → anthropic-messages-ZiHu59Q7.js} +1 -1
  43. package/web/.output/public/assets/{azure-openai-responses-yppPdVFy.js → azure-openai-responses-BHgsWKby.js} +1 -1
  44. package/web/.output/public/assets/calibration-7gf-WNR5.js +1 -0
  45. package/web/.output/public/assets/circle-question-mark-CK-DUGIA.js +1 -0
  46. package/web/.output/public/assets/clipboard-list-CRJvmiKL.js +1 -0
  47. package/web/.output/public/assets/{course-assembly-BIf5lrcx.js → course-assembly-CQE_9Vh4.js} +3 -3
  48. package/web/.output/public/assets/{course-submission-judgement-m2Gj1AKW.js → course-submission-judgement-Dmmw__tF.js} +1 -1
  49. package/web/.output/public/assets/{custom-tts-DapOpVQe.js → custom-tts-DqDZf3aF.js} +1 -1
  50. package/web/.output/public/assets/desktop-offline-IzFtwAhh.js +3 -0
  51. package/web/.output/public/assets/{dist-BudWH94z.js → dist-Dq5mGdi-.js} +1 -1
  52. package/web/.output/public/assets/file-text-CANyHShy.js +1 -0
  53. package/web/.output/public/assets/{from-study-plan-XEoNCZH-.js → from-study-plan-D14XtwuX.js} +2 -2
  54. package/web/.output/public/assets/{gemini-live-C2U-Xfzz.js → gemini-live-CGEtXm6j.js} +1 -1
  55. package/web/.output/public/assets/{google-generative-ai-8HY6m7rq.js → google-generative-ai-DcqlQJ6d.js} +1 -1
  56. package/web/.output/public/assets/{google-vertex-DnCA4qzU.js → google-vertex-C5RXjS_e.js} +1 -1
  57. package/web/.output/public/assets/{gpt-live-CEMTjMri.js → gpt-live-C4ltEjG_.js} +1 -1
  58. package/web/.output/public/assets/{index-C8C76R86.js → index-DCgpDQKf.js} +30 -30
  59. package/web/.output/public/assets/info-CGMF4Cdc.js +1 -0
  60. package/web/.output/public/assets/keating-stream-g73cFcJe.js +11 -0
  61. package/web/.output/public/assets/{learner-context-D0BfhTjc.js → learner-context-CpkZOwpe.js} +1 -1
  62. package/web/.output/public/assets/{library-pPmUSBEY.js → library-Dt_HrttW.js} +5 -5
  63. package/web/.output/public/assets/{live-context-CYuoXPUI.js → live-context-D5leiub7.js} +1 -1
  64. package/web/.output/public/assets/{mistral-conversations-BehK5A17.js → mistral-conversations-BSUNv6T_.js} +1 -1
  65. package/web/.output/public/assets/{openai-codex-responses-vVGnXFbc.js → openai-codex-responses-BEjWFOsh.js} +1 -1
  66. package/web/.output/public/assets/{openai-completions-SUIeYkEW.js → openai-completions-XWr91hin.js} +1 -1
  67. package/web/.output/public/assets/{openai-realtime-BSeGY5DQ.js → openai-realtime-BERRi9aO.js} +1 -1
  68. package/web/.output/public/assets/{openai-responses-DzgNIiYy.js → openai-responses-DeNWT5uB.js} +1 -1
  69. package/web/.output/public/assets/{openai-responses-shared-CHf6ek3_.js → openai-responses-shared-BdPh5feu.js} +1 -1
  70. package/web/.output/public/assets/{openai-tts-DRXdgxDT.js → openai-tts-ChGSz4r8.js} +1 -1
  71. package/web/.output/public/assets/{operation-BMdkNnIS.js → operation-kDIu8RLw.js} +2 -2
  72. package/web/.output/public/assets/{pi-messages-CpI94BCF.js → pi-messages-pzwJsgas.js} +1 -1
  73. package/web/.output/public/assets/{public-client-KRBnkgBr.js → public-client-CqivHtfG.js} +1 -1
  74. package/web/.output/public/assets/{recipes-BcSW8MlI.js → recipes-lg2hVa6Q.js} +1 -1
  75. package/web/.output/public/assets/{renderer-CKD_Hn-d.js → renderer-Cx1jCM2v.js} +1 -1
  76. package/web/.output/public/assets/{segments-nMdXcVhb.js → segments-BuQ4O8Bd.js} +1 -1
  77. package/web/.output/public/assets/{shared-actions-Bj56xHM3.js → shared-actions-B9eYiZAR.js} +1 -1
  78. package/web/.output/public/assets/{shared-renderer-C-yYfXvq.js → shared-renderer-hMxAoPZb.js} +7 -7
  79. package/web/.output/public/assets/shared-sessions-CwS3OLWR.js +5 -0
  80. package/web/.output/public/assets/{srs-WAeRnL8v.js → srs-BBTX4fCR.js} +1 -1
  81. package/web/.output/public/assets/{tavus-live-CVb9mE_J.js → tavus-live-HpBIH49i.js} +1 -1
  82. package/web/.output/public/assets/{topic-categorization-DHcL_IrS.js → topic-categorization-DfJaArmq.js} +1 -1
  83. package/web/.output/public/assets/trajectory-artifacts-EvNqJEHH.js +3 -0
  84. package/web/.output/public/assets/trajectory-store-C3qzwrr6.js +2 -0
  85. package/web/.output/public/assets/{transformers.web-CUMRYLoV.js → transformers.web-CrNvRfsr.js} +1 -1
  86. package/web/.output/public/assets/use-review-passes-DmWsvYdF.js +8 -0
  87. package/web/.output/public/assets/{use-sessions-C33USzrV.js → use-sessions-3UElISPk.js} +1 -1
  88. package/web/.output/public/assets/{useCoursesAccess-Zfb1Jqw-.js → useCoursesAccess-BgOspZex.js} +1 -1
  89. package/web/.output/public/assets/user-DEmM1U0O.js +1 -0
  90. package/web/.output/public/index.html +7 -7
  91. package/web/.output/public/sw.js +1 -1
  92. package/web/.output/server/_chunks/renderer-template.mjs +1 -1
  93. package/web/.output/server/_libs/h3+rou3+srvx.mjs +1 -1
  94. package/web/.output/server/index.mjs +1191 -1112
  95. package/web/.output/public/assets/CourseWorkspace-McgEEARK.js +0 -25
  96. package/web/.output/public/assets/ModelSelector-CiiiT7sM.js +0 -1
  97. package/web/.output/public/assets/OpenUIPreview-C8sgkYAj.js +0 -1
  98. package/web/.output/public/assets/PatternDigestPanel-Ctm7smvT.js +0 -1
  99. package/web/.output/public/assets/TrajectoryReview-DkC_NtyR.js +0 -35
  100. package/web/.output/public/assets/TrajectoryReviewIndex-C7pg9K9U.js +0 -1
  101. package/web/.output/public/assets/TrajectoryReviewWorkspace-D80QHrDn.js +0 -1
  102. package/web/.output/public/assets/calibration-B8NNSy6-.js +0 -1
  103. package/web/.output/public/assets/desktop-offline-BOKnmvYX.js +0 -2
  104. package/web/.output/public/assets/keating-stream-DeWgIdIv.js +0 -11
  105. package/web/.output/public/assets/shared-sessions-B2FsK7oM.js +0 -5
  106. package/web/.output/public/assets/trajectory-artifacts-B47xntcj.js +0 -3
  107. package/web/.output/public/assets/trajectory-store-CFat_se9.js +0 -2
  108. package/web/.output/public/assets/use-review-passes-BTc5nGD9.js +0 -8
@@ -1,2 +1,2 @@
1
- import{_i as e}from"./index-C8C76R86.js";import{B as t,R as n}from"./shared-renderer-C-yYfXvq.js";var r=2400,i=5,a=6,o=900,s=[/\bsk-(?:ant-)?[A-Za-z0-9_-]{12,}\b/g,/\bAIza[A-Za-z0-9_-]{16,}\b/g,/\bgh[pousr]_[A-Za-z0-9_]{12,}\b/g,/\bBearer\s+[A-Za-z0-9._-]{12,}\b/gi,/-----BEGIN (?:[A-Z0-9]+ )?PRIVATE KEY-----[\s\S]*?-----END (?:[A-Z0-9]+ )?PRIVATE KEY-----/g,/^[A-Z][A-Z0-9_]*(?:API_KEY|TOKEN|SECRET)\s*=\s*.+$/gm,/\b(?=[a-f0-9]{32,}\b)(?=[a-f0-9]*[a-f])(?=[a-f0-9]*\d)[a-f0-9]{32,}\b/gi];function c(e,t=o){let n=typeof e==`string`?e.trim():``;for(let e of s)n=n.replace(e,`[REDACTED]`);return n.slice(0,Math.max(0,t))}function l(e){let t=[];for(let n=e.length-1;n>=0&&t.length<i;--n){let r=e[n];if(Array.isArray(r?.attachments))for(let e of[...r.attachments].reverse()){if(t.length>=i)break;if(!e||typeof e!=`object`)continue;let n=e,r=c(n.fileName,180);if(!r)continue;let a=c(n.extractedText,o);t.push({title:r,kind:c(n.mimeType,120)||`document`,...a?{excerpt:a}:{},source:`session`})}}return t.reverse()}function u(e,t){return e.filter(e=>e.sessionId===t).sort((e,t)=>t.createdAt-e.createdAt).slice(0,a).map(e=>({title:c(e.title,180),kind:e.kind,excerpt:c(e.excerpt),source:`session`})).filter(e=>e.title&&e.excerpt)}async function d(e,t){let[n,r,i,a,o]=await Promise.all([e.getLessonPlans(),e.getLessonMaps(),e.getAnimations(),e.getVerifications(),e.getDecks()]);return u([...n.map(e=>({title:e.topic,kind:`lesson plan`,excerpt:e.content,createdAt:e.createdAt,sessionId:e.sessionId})),...r.map(e=>({title:e.topic,kind:`lesson map`,excerpt:e.mmdContent,createdAt:e.createdAt,sessionId:e.sessionId})),...i.map(e=>({title:e.topic,kind:`animation storyboard`,excerpt:e.storyboard,createdAt:e.createdAt,sessionId:e.sessionId})),...a.map(e=>({title:e.topic,kind:`verification`,excerpt:e.checklist,createdAt:e.createdAt,sessionId:e.sessionId})),...o.map(e=>({title:e.title,kind:`flashcard deck`,excerpt:e.cards.slice(0,6).map(e=>`${e.front}: ${e.back}`).join(`
1
+ import{_i as e}from"./index-DCgpDQKf.js";import{B as t,R as n}from"./shared-renderer-hMxAoPZb.js";var r=2400,i=5,a=6,o=900,s=[/\bsk-(?:ant-)?[A-Za-z0-9_-]{12,}\b/g,/\bAIza[A-Za-z0-9_-]{16,}\b/g,/\bgh[pousr]_[A-Za-z0-9_]{12,}\b/g,/\bBearer\s+[A-Za-z0-9._-]{12,}\b/gi,/-----BEGIN (?:[A-Z0-9]+ )?PRIVATE KEY-----[\s\S]*?-----END (?:[A-Z0-9]+ )?PRIVATE KEY-----/g,/^[A-Z][A-Z0-9_]*(?:API_KEY|TOKEN|SECRET)\s*=\s*.+$/gm,/\b(?=[a-f0-9]{32,}\b)(?=[a-f0-9]*[a-f])(?=[a-f0-9]*\d)[a-f0-9]{32,}\b/gi];function c(e,t=o){let n=typeof e==`string`?e.trim():``;for(let e of s)n=n.replace(e,`[REDACTED]`);return n.slice(0,Math.max(0,t))}function l(e){let t=[];for(let n=e.length-1;n>=0&&t.length<i;--n){let r=e[n];if(Array.isArray(r?.attachments))for(let e of[...r.attachments].reverse()){if(t.length>=i)break;if(!e||typeof e!=`object`)continue;let n=e,r=c(n.fileName,180);if(!r)continue;let a=c(n.extractedText,o);t.push({title:r,kind:c(n.mimeType,120)||`document`,...a?{excerpt:a}:{},source:`session`})}}return t.reverse()}function u(e,t){return e.filter(e=>e.sessionId===t).sort((e,t)=>t.createdAt-e.createdAt).slice(0,a).map(e=>({title:c(e.title,180),kind:e.kind,excerpt:c(e.excerpt),source:`session`})).filter(e=>e.title&&e.excerpt)}async function d(e,t){let[n,r,i,a,o]=await Promise.all([e.getLessonPlans(),e.getLessonMaps(),e.getAnimations(),e.getVerifications(),e.getDecks()]);return u([...n.map(e=>({title:e.topic,kind:`lesson plan`,excerpt:e.content,createdAt:e.createdAt,sessionId:e.sessionId})),...r.map(e=>({title:e.topic,kind:`lesson map`,excerpt:e.mmdContent,createdAt:e.createdAt,sessionId:e.sessionId})),...i.map(e=>({title:e.topic,kind:`animation storyboard`,excerpt:e.storyboard,createdAt:e.createdAt,sessionId:e.sessionId})),...a.map(e=>({title:e.topic,kind:`verification`,excerpt:e.checklist,createdAt:e.createdAt,sessionId:e.sessionId})),...o.map(e=>({title:e.title,kind:`flashcard deck`,excerpt:e.cards.slice(0,6).map(e=>`${e.front}: ${e.back}`).join(`
2
2
  `),createdAt:e.updatedAt,sessionId:e.sessionId}))],t)}async function f(i){let[a,o,s]=await Promise.all([i.storage.getLearnerState(),d(i.storage,i.sessionId),i.activeCourseId?e(i.activeCourseId).then(t).catch(()=>null):Promise.resolve(null)]),u=l(i.messages),f={sessionId:i.sessionId,learner:{providedProfile:c(i.providedProfile,r)||void 0,strengths:a.strengths.slice(0,8).map(e=>c(e,160)),needsReview:a.weaknesses.slice(0,8).map(e=>c(e,160)),recentTopics:a.topicsExplored.slice(-10).map(e=>c(e,160)),studyPriorities:a.studyPriorities.slice(-8).map(e=>`${e.targetType}: ${c(e.targetId,120)} (${e.priority})`)},documents:u,artifacts:o};if(!s)return f;let{course:p,viewer:m}=s,h=n(p),g=h.find(e=>e.id===m.progress.activeLessonId)??h.find(e=>!m.progress.completedLessonIds.includes(e.id))??h[0];f.learner.displayName=c(m.displayName,120)||void 0,f.learner.role=m.role,f.course={id:p.id,title:c(p.title,240),description:c(p.description,700)||void 0,outcomes:p.outcomes.slice(0,12).map(e=>c(e,300)),...g?{currentLesson:{id:g.id,title:c(g.title,240),summary:c(g.summary,600)||void 0,objectives:g.objectives.slice(0,12).map(e=>c(e,300)),readingExcerpt:c(g.reading,1200)||void 0}}:{},completedLessons:m.progress.completedLessonIds.length,totalLessons:h.length};let _=p.materials.filter(e=>!e.lessonId||e.lessonId===g?.id).slice(-5).map(e=>({title:c(e.title,180),kind:e.kind,...e.description?{excerpt:c(e.description)}:{},source:`course`})),v=p.submissions.filter(e=>e.accountId===m.accountId&&(!g||e.lessonId===g.id)).slice(-1).map(e=>({title:`${g?.title??`Course`} learner response`,kind:`submission`,excerpt:c(e.answer),source:`course`}));f.documents=[...f.documents,..._,...v].slice(-5);let y=p.artifacts.filter(e=>!e.lessonId||e.lessonId===g?.id).slice(-6).map(e=>({title:c(e.title,180),kind:e.kind,excerpt:c(e.content),source:`course`}));return f.artifacts=[...f.artifacts,...y].slice(-6),f}export{c as n,f as t};
@@ -1,4 +1,4 @@
1
- import{t as e}from"./event-stream-qbAZIAKV.js";import{n as t}from"./json-parse-CwN-SA_h.js";import{mr as n,pr as r}from"./index-C8C76R86.js";import{t as i}from"./headers-CbDaTl3c.js";import{t as a}from"./sanitize-unicode-DmIE6hZJ.js";import{f as o,i as s,t as c,u as l}from"./transform-messages-CjZBscG6.js";import{t as u}from"./hash-yQufAZII.js";var d=9,f=4e3,p=(t,n,r)=>{let i=new e;return(async()=>{let e=h(t);try{let a=r?.apiKey;if(!a)throw Error(`No API key for provider: ${t.provider}`);let o=g(),s=F(t,n,c(n.messages,t,e=>o(e)),r),l=await r?.onPayload?.(s,t);l!==void 0&&(s=l);let u=await x(t,s,a,r);if(i.push({type:`start`,partial:e}),await R(t,e,i,u),r?.signal?.aborted)throw Error(`Request was aborted`);if(e.stopReason===`pending`)throw Error(`Mistral stream ended without a finish reason`);if(e.stopReason===`aborted`||e.stopReason===`error`)throw Error(e.errorMessage||`An unknown error occurred`);i.push({type:`done`,reason:e.stopReason,message:e}),i.end()}catch(t){for(let t of e.content)delete t.partialArgs;e.stopReason=r?.signal?.aborted?`aborted`:`error`,e.errorMessage=v(t),i.push({type:`error`,reason:e.stopReason,error:e}),i.end()}})(),i},m=(e,t,r)=>{let i=r?.apiKey;if(!i)throw Error(`No API key for provider: ${e.provider}`);let a=s(e,t,r,i),o=r?.reasoning?n(e,r.reasoning):void 0,c=o===`off`?void 0:o,l=e.reasoning&&c!==void 0;return p(e,t,{...a,promptMode:l&&W(e)?`reasoning`:void 0,reasoningEffort:l&&U(e)?G(e,c):void 0})};function h(e){return{role:`assistant`,content:[],api:e.api,provider:e.provider,model:e.id,usage:{input:0,output:0,cacheRead:0,cacheWrite:0,totalTokens:0,cost:{input:0,output:0,cacheRead:0,cacheWrite:0,total:0}},stopReason:`pending`,timestamp:Date.now()}}function g(){let e=new Map,t=new Map;return n=>{let r=e.get(n);if(r)return r;let i=0;for(;;){let r=_(n,i),a=t.get(r);if(!a||a===n)return e.set(n,r),t.set(r,n),r;i++}}}function _(e,t){let n=e.replace(/[^a-zA-Z0-9]/g,``);if(t===0&&n.length===d)return n;let r=n||e;return u(t===0?r:`${r}:${t}`).replace(/[^a-zA-Z0-9]/g,``).slice(0,d)}function v(e){if(e instanceof Error){let t=e,n=typeof t.statusCode==`number`?t.statusCode:void 0,r=typeof t.body==`string`?t.body.trim():void 0;return n!==void 0&&r?`Mistral API error (${n}): ${y(r,f)}`:n===void 0?e.message:`Mistral API error (${n}): ${e.message}`}return b(e)}function y(e,t){return e.length<=t?e:`${e.slice(0,t)}... [truncated ${e.length-t} chars]`}function b(e){try{let t=JSON.stringify(e);return t===void 0?String(e):t}catch{return String(e)}}async function x(e,t,n,r){let a=new URL(e.baseUrl);a.pathname=`${a.pathname.replace(/\/+$/u,``)}/`;let o=new URL(`v1/chat/completions`,a),s=C(e,n,r),c=AbortSignal.timeout(r?.timeoutMs??6e4),l=r?.signal?AbortSignal.any([r.signal,c]):c,u=await(r?.fetch??globalThis.fetch)(o,{method:`POST`,headers:s,body:JSON.stringify(E(t)),signal:l});if(await r?.onResponse?.({status:u.status,headers:i(u.headers)},e),!u.ok){let e=await u.text();throw new S(u.status,e,u.statusText)}if(!u.body)throw Error(`Mistral response has no body`);return M(u.body,l)}var S=class extends Error{statusCode;body;constructor(e,t,n){super(n||`Request failed with status ${e}`),this.name=`MistralHttpError`,this.statusCode=e,this.body=t}};function C(e,t,n){let r=new Headers({accept:`text/event-stream`,authorization:`Bearer ${t}`,"content-type":`application/json`});w(r,e.headers),w(r,n?.headers);let i=T(e.headers,`x-affinity`)||T(n?.headers,`x-affinity`);return I(n)&&!i&&r.set(`x-affinity`,n.sessionId),r}function w(e,t){if(t)for(let[n,r]of Object.entries(t))r===null?e.delete(n):e.set(n,r)}function T(e,t){return!!e&&Object.keys(e).some(e=>e.toLowerCase()===t)}function E(e){let t={...e};for(let[e,n]of[[`topP`,`top_p`],[`maxTokens`,`max_tokens`],[`randomSeed`,`random_seed`],[`responseFormat`,`response_format`],[`toolChoice`,`tool_choice`],[`presencePenalty`,`presence_penalty`],[`frequencyPenalty`,`frequency_penalty`],[`parallelToolCalls`,`parallel_tool_calls`],[`reasoningEffort`,`reasoning_effort`],[`promptMode`,`prompt_mode`],[`promptCacheKey`,`prompt_cache_key`],[`safePrompt`,`safe_prompt`]])k(t,e,n);t.messages=e.messages.map(e=>D(e));let n=t.response_format;if(A(n)){let e={...n};k(e,`jsonSchema`,`json_schema`);let r=e.json_schema;if(A(r)){let t={...r};k(t,`schemaDefinition`,`schema`),e.json_schema=t}t.response_format=e}return t}function D(e){let t={...e};return k(t,`toolCalls`,`tool_calls`),k(t,`toolCallId`,`tool_call_id`),Array.isArray(e.content)&&(t.content=e.content.map(e=>O(e))),t}function O(e){let t={...e};for(let[e,n]of[[`imageUrl`,`image_url`],[`documentUrl`,`document_url`],[`documentName`,`document_name`],[`fileId`,`file_id`],[`referenceIds`,`reference_ids`],[`inputAudio`,`input_audio`]])k(t,e,n);return t}function k(e,t,n){t in e&&(e[n]=e[t],delete e[t])}function A(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}var j=Symbol(`mistral-stream-done`);async function*M(e,t){let n=e.getReader(),r=new TextDecoder,i=``,a=()=>{n.cancel().catch(()=>{})};t.addEventListener(`abort`,a,{once:!0});try{for(;;){if(t.aborted)throw t.reason;let{done:e,value:a}=await n.read();if(t.aborted)throw t.reason;i+=e?r.decode():r.decode(a,{stream:!0});let o=N(i);for(;o;){let e=P(i.slice(0,o.index));if(i=i.slice(o.index+o.length),e===j)return;e&&(yield e),o=N(i)}if(e)break}if(i.trim()){let e=P(i);e!==j&&e&&(yield e)}}finally{t.removeEventListener(`abort`,a);try{await n.cancel()}catch{}try{n.releaseLock()}catch{}}}function N(e){let t=/\r\n\r\n|\r\n\r|\r\n\n|\r\r\n|\n\r\n|\r\r|\n\r|\n\n/u.exec(e);return t?.index===void 0?void 0:{index:t.index,length:t[0].length}}function P(e){let t=e.split(/\r\n|\r|\n/u).filter(e=>e.startsWith(`data:`)).map(e=>e.slice(5).trimStart()).join(`
1
+ import{t as e}from"./event-stream-qbAZIAKV.js";import{n as t}from"./json-parse-CwN-SA_h.js";import{mr as n,pr as r}from"./index-DCgpDQKf.js";import{t as i}from"./headers-CbDaTl3c.js";import{t as a}from"./sanitize-unicode-DmIE6hZJ.js";import{f as o,i as s,t as c,u as l}from"./transform-messages-CjZBscG6.js";import{t as u}from"./hash-yQufAZII.js";var d=9,f=4e3,p=(t,n,r)=>{let i=new e;return(async()=>{let e=h(t);try{let a=r?.apiKey;if(!a)throw Error(`No API key for provider: ${t.provider}`);let o=g(),s=F(t,n,c(n.messages,t,e=>o(e)),r),l=await r?.onPayload?.(s,t);l!==void 0&&(s=l);let u=await x(t,s,a,r);if(i.push({type:`start`,partial:e}),await R(t,e,i,u),r?.signal?.aborted)throw Error(`Request was aborted`);if(e.stopReason===`pending`)throw Error(`Mistral stream ended without a finish reason`);if(e.stopReason===`aborted`||e.stopReason===`error`)throw Error(e.errorMessage||`An unknown error occurred`);i.push({type:`done`,reason:e.stopReason,message:e}),i.end()}catch(t){for(let t of e.content)delete t.partialArgs;e.stopReason=r?.signal?.aborted?`aborted`:`error`,e.errorMessage=v(t),i.push({type:`error`,reason:e.stopReason,error:e}),i.end()}})(),i},m=(e,t,r)=>{let i=r?.apiKey;if(!i)throw Error(`No API key for provider: ${e.provider}`);let a=s(e,t,r,i),o=r?.reasoning?n(e,r.reasoning):void 0,c=o===`off`?void 0:o,l=e.reasoning&&c!==void 0;return p(e,t,{...a,promptMode:l&&W(e)?`reasoning`:void 0,reasoningEffort:l&&U(e)?G(e,c):void 0})};function h(e){return{role:`assistant`,content:[],api:e.api,provider:e.provider,model:e.id,usage:{input:0,output:0,cacheRead:0,cacheWrite:0,totalTokens:0,cost:{input:0,output:0,cacheRead:0,cacheWrite:0,total:0}},stopReason:`pending`,timestamp:Date.now()}}function g(){let e=new Map,t=new Map;return n=>{let r=e.get(n);if(r)return r;let i=0;for(;;){let r=_(n,i),a=t.get(r);if(!a||a===n)return e.set(n,r),t.set(r,n),r;i++}}}function _(e,t){let n=e.replace(/[^a-zA-Z0-9]/g,``);if(t===0&&n.length===d)return n;let r=n||e;return u(t===0?r:`${r}:${t}`).replace(/[^a-zA-Z0-9]/g,``).slice(0,d)}function v(e){if(e instanceof Error){let t=e,n=typeof t.statusCode==`number`?t.statusCode:void 0,r=typeof t.body==`string`?t.body.trim():void 0;return n!==void 0&&r?`Mistral API error (${n}): ${y(r,f)}`:n===void 0?e.message:`Mistral API error (${n}): ${e.message}`}return b(e)}function y(e,t){return e.length<=t?e:`${e.slice(0,t)}... [truncated ${e.length-t} chars]`}function b(e){try{let t=JSON.stringify(e);return t===void 0?String(e):t}catch{return String(e)}}async function x(e,t,n,r){let a=new URL(e.baseUrl);a.pathname=`${a.pathname.replace(/\/+$/u,``)}/`;let o=new URL(`v1/chat/completions`,a),s=C(e,n,r),c=AbortSignal.timeout(r?.timeoutMs??6e4),l=r?.signal?AbortSignal.any([r.signal,c]):c,u=await(r?.fetch??globalThis.fetch)(o,{method:`POST`,headers:s,body:JSON.stringify(E(t)),signal:l});if(await r?.onResponse?.({status:u.status,headers:i(u.headers)},e),!u.ok){let e=await u.text();throw new S(u.status,e,u.statusText)}if(!u.body)throw Error(`Mistral response has no body`);return M(u.body,l)}var S=class extends Error{statusCode;body;constructor(e,t,n){super(n||`Request failed with status ${e}`),this.name=`MistralHttpError`,this.statusCode=e,this.body=t}};function C(e,t,n){let r=new Headers({accept:`text/event-stream`,authorization:`Bearer ${t}`,"content-type":`application/json`});w(r,e.headers),w(r,n?.headers);let i=T(e.headers,`x-affinity`)||T(n?.headers,`x-affinity`);return I(n)&&!i&&r.set(`x-affinity`,n.sessionId),r}function w(e,t){if(t)for(let[n,r]of Object.entries(t))r===null?e.delete(n):e.set(n,r)}function T(e,t){return!!e&&Object.keys(e).some(e=>e.toLowerCase()===t)}function E(e){let t={...e};for(let[e,n]of[[`topP`,`top_p`],[`maxTokens`,`max_tokens`],[`randomSeed`,`random_seed`],[`responseFormat`,`response_format`],[`toolChoice`,`tool_choice`],[`presencePenalty`,`presence_penalty`],[`frequencyPenalty`,`frequency_penalty`],[`parallelToolCalls`,`parallel_tool_calls`],[`reasoningEffort`,`reasoning_effort`],[`promptMode`,`prompt_mode`],[`promptCacheKey`,`prompt_cache_key`],[`safePrompt`,`safe_prompt`]])k(t,e,n);t.messages=e.messages.map(e=>D(e));let n=t.response_format;if(A(n)){let e={...n};k(e,`jsonSchema`,`json_schema`);let r=e.json_schema;if(A(r)){let t={...r};k(t,`schemaDefinition`,`schema`),e.json_schema=t}t.response_format=e}return t}function D(e){let t={...e};return k(t,`toolCalls`,`tool_calls`),k(t,`toolCallId`,`tool_call_id`),Array.isArray(e.content)&&(t.content=e.content.map(e=>O(e))),t}function O(e){let t={...e};for(let[e,n]of[[`imageUrl`,`image_url`],[`documentUrl`,`document_url`],[`documentName`,`document_name`],[`fileId`,`file_id`],[`referenceIds`,`reference_ids`],[`inputAudio`,`input_audio`]])k(t,e,n);return t}function k(e,t,n){t in e&&(e[n]=e[t],delete e[t])}function A(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}var j=Symbol(`mistral-stream-done`);async function*M(e,t){let n=e.getReader(),r=new TextDecoder,i=``,a=()=>{n.cancel().catch(()=>{})};t.addEventListener(`abort`,a,{once:!0});try{for(;;){if(t.aborted)throw t.reason;let{done:e,value:a}=await n.read();if(t.aborted)throw t.reason;i+=e?r.decode():r.decode(a,{stream:!0});let o=N(i);for(;o;){let e=P(i.slice(0,o.index));if(i=i.slice(o.index+o.length),e===j)return;e&&(yield e),o=N(i)}if(e)break}if(i.trim()){let e=P(i);e!==j&&e&&(yield e)}}finally{t.removeEventListener(`abort`,a);try{await n.cancel()}catch{}try{n.releaseLock()}catch{}}}function N(e){let t=/\r\n\r\n|\r\n\r|\r\n\n|\r\r\n|\n\r\n|\r\r|\n\r|\n\n/u.exec(e);return t?.index===void 0?void 0:{index:t.index,length:t[0].length}}function P(e){let t=e.split(/\r\n|\r|\n/u).filter(e=>e.startsWith(`data:`)).map(e=>e.slice(5).trimStart()).join(`
2
2
  `).trim();if(!t)return;if(t===`[DONE]`)return j;let n=JSON.parse(t);if(!A(n)||!Array.isArray(n.choices))throw Error(`Invalid Mistral streaming event`);return{data:n}}function F(e,t,n,r){let i={model:e.id,stream:!0,messages:V(n,e.input.includes(`image`))};return t.tools?.length&&(i.tools=z(t.tools)),r?.temperature!==void 0&&(i.temperature=r.temperature),r?.maxTokens!==void 0&&(i.maxTokens=r.maxTokens),r?.toolChoice&&(i.toolChoice=K(r.toolChoice)),r?.promptMode&&(i.promptMode=r.promptMode),r?.reasoningEffort&&(i.reasoningEffort=r.reasoningEffort),I(r)&&(i.promptCacheKey=r.sessionId),t.systemPrompt&&i.messages.unshift({role:`system`,content:a(t.systemPrompt)}),i}function I(e){return e?.cacheRetention!==`none`&&!!e?.sessionId}function L(e,t){let n=e,r=n.promptTokensDetails?.cachedTokens??n.prompt_tokens_details?.cached_tokens??n.promptTokenDetails?.cachedTokens??n.prompt_token_details?.cached_tokens??n.numCachedTokens??n.num_cached_tokens??0;return Math.min(t,Math.max(0,typeof r==`number`&&Number.isFinite(r)?r:0))}async function R(e,n,i,o){let s=null,c=n.content,l=()=>c.length-1,u=new Map,d=e=>{if(e){if(e.type===`text`){i.push({type:`text_end`,contentIndex:l(),content:e.text,partial:n});return}e.type===`thinking`&&i.push({type:`thinking_end`,contentIndex:l(),content:e.thinking,partial:n})}};for await(let c of o){let o=c.data;if(n.responseId||=o.id,o.usage){let t=o.usage.prompt_tokens||0,i=L(o.usage,t);n.usage.input=Math.max(0,t-i),n.usage.output=o.usage.completion_tokens||0,n.usage.cacheRead=i,n.usage.cacheWrite=0,n.usage.totalTokens=o.usage.total_tokens||n.usage.input+n.usage.output+n.usage.cacheRead+n.usage.cacheWrite,r(e,n.usage)}let f=o.choices[0];if(!f)continue;if(f.finish_reason){n.rawStopReason=f.finish_reason;let e=q(f.finish_reason);n.stopReason=e.stopReason,e.errorMessage&&(n.errorMessage=e.errorMessage)}let p=f.delta;if(p.content!==null&&p.content!==void 0){let e=typeof p.content==`string`?[p.content]:p.content;for(let t of e){if(typeof t==`string`){let e=a(t);(!s||s.type!==`text`)&&(d(s),s={type:`text`,text:``},n.content.push(s),i.push({type:`text_start`,contentIndex:l(),partial:n})),s.text+=e,i.push({type:`text_delta`,contentIndex:l(),delta:e,partial:n});continue}if(t.type===`thinking`){let e=a((t.thinking??[]).map(e=>e.text??``).filter(e=>e.length>0).join(``));if(!e)continue;(!s||s.type!==`thinking`)&&(d(s),s={type:`thinking`,thinking:``},n.content.push(s),i.push({type:`thinking_start`,contentIndex:l(),partial:n})),s.thinking+=e,i.push({type:`thinking_delta`,contentIndex:l(),delta:e,partial:n});continue}if(t.type===`text`){let e=a(t.text??``);(!s||s.type!==`text`)&&(d(s),s={type:`text`,text:``},n.content.push(s),i.push({type:`text_start`,contentIndex:l(),partial:n})),s.text+=e,i.push({type:`text_delta`,contentIndex:l(),delta:e,partial:n})}}}let m=p.tool_calls||[];for(let e of m){s&&=(d(s),null);let r=e.id&&e.id!==`null`?e.id:_(`toolcall:${e.index??0}`,0),a=`${r}:${e.index||0}`,o=u.get(a),c;if(o!==void 0){let e=n.content[o];e?.type===`toolCall`&&(c=e)}c||(c={type:`toolCall`,id:r,name:e.function.name,arguments:{},partialArgs:``},n.content.push(c),u.set(a,n.content.length-1),i.push({type:`toolcall_start`,contentIndex:n.content.length-1,partial:n}));let l=typeof e.function.arguments==`string`?e.function.arguments:JSON.stringify(e.function.arguments||{});c.partialArgs=(c.partialArgs||``)+l,c.arguments=t(c.partialArgs),i.push({type:`toolcall_delta`,contentIndex:u.get(a),delta:l,partial:n})}}d(s);for(let e of u.values()){let r=n.content[e];if(r.type!==`toolCall`)continue;let a=r;a.arguments=t(a.partialArgs),delete a.partialArgs,i.push({type:`toolcall_end`,contentIndex:e,toolCall:a,partial:n})}}function z(e){return e.map(e=>{let t=o(e,!0);return{type:`function`,function:{name:e.name,description:e.description,parameters:B(l(e,t)),strict:t??!1}}})}function B(e){if(Array.isArray(e))return e.map(e=>B(e));if(e&&typeof e==`object`){let t={};for(let[n,r]of Object.entries(e))t[n]=B(r);return t}return e}function V(e,t){let n=[];for(let r of e){if(r.role===`user`){if(typeof r.content==`string`){n.push({role:`user`,content:a(r.content)});continue}let e=r.content.some(e=>e.type===`image`),i=r.content.filter(e=>e.type===`text`||t).map(e=>e.type===`text`?{type:`text`,text:a(e.text)}:{type:`image_url`,imageUrl:`data:${e.mimeType};base64,${e.data}`});if(i.length>0){n.push({role:`user`,content:i});continue}e&&!t&&n.push({role:`user`,content:`(image omitted: model does not support images)`});continue}if(r.role===`assistant`){let e=[],t=[];for(let n of r.content){if(n.type===`text`){n.text.trim().length>0&&e.push({type:`text`,text:a(n.text)});continue}if(n.type===`thinking`){n.thinking.trim().length>0&&e.push({type:`thinking`,thinking:[{type:`text`,text:a(n.thinking)}]});continue}t.push({id:n.id,type:`function`,function:{name:n.name,arguments:JSON.stringify(n.arguments||{})},index:0})}let i={role:`assistant`,prefix:!1};e.length>0&&(i.content=e),t.length>0&&(i.toolCalls=t),(e.length>0||t.length>0)&&n.push(i);continue}let e=[],i=H(r.content.filter(e=>e.type===`text`).map(e=>e.type===`text`?a(e.text):``).join(`
3
3
  `),r.content.some(e=>e.type===`image`),t,r.isError);e.push({type:`text`,text:i});for(let n of r.content)t&&n.type===`image`&&e.push({type:`image_url`,imageUrl:`data:${n.mimeType};base64,${n.data}`});n.push({role:`tool`,toolCallId:r.toolCallId,name:r.toolName,content:e})}return n}function H(e,t,n,r){let i=e.trim(),a=r?`[tool error] `:``;return i.length>0?`${a}${i}${t&&!n?`
4
4
  [tool image omitted: model does not support images]`:``}`:t?n?r?`[tool error] (see attached image)`:`(see attached image)`:r?`[tool error] (image omitted: model does not support images)`:`(image omitted: model does not support images)`:r?`[tool error] (no tool output)`:`(no tool output)`}function U(e){return e.id===`mistral-small-2603`||e.id===`mistral-small-latest`||e.id===`mistral-medium-3.5`}function W(e){return e.reasoning&&!U(e)}function G(e,t){return e.thinkingLevelMap?.[t]??`high`}function K(e){if(e)return e===`auto`||e===`none`||e===`any`||e===`required`?e:{type:`function`,function:{name:e.function.name}}}function q(e){if(e===null)return{stopReason:`stop`};switch(e){case`stop`:return{stopReason:`stop`};case`length`:case`model_length`:return{stopReason:`length`};case`tool_calls`:return{stopReason:`toolUse`};case`error`:return{stopReason:`error`,errorMessage:`Provider stopped with: error`};default:return{stopReason:`error`,errorMessage:`Provider stopped with: ${e}`}}}export{p as stream,m as streamSimple};
@@ -1,4 +1,4 @@
1
- import{t as e}from"./event-stream-qbAZIAKV.js";import{_r as t,gr as n,mr as r,vr as i,yr as a}from"./index-C8C76R86.js";import{t as o}from"./deferred-tools-C1IEsG5C.js";import{t as s}from"./headers-CbDaTl3c.js";import{t as c}from"./pi-user-agent-6Rm79QmC.js";import{c as l,i as u}from"./transform-messages-CjZBscG6.js";import{n as d,t as f}from"./error-body-pkrba6pf.js";import{t as p}from"./openai-prompt-cache-DXo9f3w5.js";import{n as m,r as h,t as g}from"./openai-responses-shared-CHf6ek3_.js";var _=new Set;function v(e){return _.add(e),()=>{_.delete(e)}}var y=-1/0,b=0;function x(e){if(globalThis.crypto?.getRandomValues){globalThis.crypto.getRandomValues(e);return}for(let t=0;t<e.length;t++)e[t]=Math.floor(Math.random()*256)}function S(){let e=new Uint8Array(16);x(e);let t=Date.now();t>y?(b=e[6]*16777216+e[7]*65536+e[8]*256+e[9],y=t):(b=b+1>>>0,b===0&&y++);let n=new Uint8Array(16);n[0]=y/1099511627776&255,n[1]=y/4294967296&255,n[2]=y/16777216&255,n[3]=y/65536&255,n[4]=y/256&255,n[5]=y&255,n[6]=112|b>>>28&15,n[7]=b>>>20&255,n[8]=128|b>>>14&63,n[9]=b>>>6&255,n[10]=(b&63)<<2|e[10]&3,n[11]=e[11],n[12]=e[12],n[13]=e[13],n[14]=e[14],n[15]=e[15];let r=Array.from(n,e=>e.toString(16).padStart(2,`0`));return`${r.slice(0,4).join(``)}-${r.slice(4,6).join(``)}-${r.slice(6,8).join(``)}-${r.slice(8,10).join(``)}-${r.slice(10,16).join(``)}`}function C(e){let t=e.filter(e=>e!==void 0);if(t.length===0)return{cleanup:()=>{}};if(t.length===1)return{signal:t[0],cleanup:()=>{}};let n=new AbortController,r=[],i=e=>{n.signal.aborted||n.abort(e.reason)};for(let e of t){if(e.aborted){i(e);break}let t=()=>i(e);e.addEventListener(`abort`,t,{once:!0}),r.push({signal:e,listener:t})}return{signal:n.signal,cleanup:()=>{for(let{signal:e,listener:t}of r)e.removeEventListener(`abort`,t)}}}var w={ftp:21,gopher:70,http:80,https:443,ws:80,wss:443};function T(e,t){let n=e.toLowerCase(),r=e.toUpperCase();return t?.[n]||t?.[r]||a(n)||a(r)||``}function E(e){if(e instanceof URL)return e;try{return new URL(e)}catch{return}}function D(e,t,n){let r=T(`no_proxy`,n).toLowerCase();return r?r===`*`?!1:r.split(/[,\s]/).every(n=>{if(!n)return!0;let r=n.match(/^(.+):(\d+)$/),i=r?r[1]:n,a=r?Number.parseInt(r[2],10):0;return a&&a!==t?!0:/^[.*]/.test(i)?(i.startsWith(`*`)&&(i=i.slice(1)),!e.endsWith(i)):e!==i}):!0}function O(e,t){let n=E(e);if(!n?.protocol||!n.host)return``;let r=n.protocol.split(`:`,1)[0];if(!D(n.host.replace(/:\d*$/,``),Number.parseInt(n.port,10)||w[r]||0,t))return``;let i=T(`${r}_proxy`,t)||T(`all_proxy`,t);return i&&!i.includes(`://`)&&(i=`${r}://${i}`),i}var k=`Unsupported proxy protocol. SOCKS and PAC proxy URLs are not supported; use an HTTP or HTTPS proxy URL.`;function A(e,t){let n=O(e,t);if(!n)return;let r;try{r=new URL(n)}catch(e){throw Error(`Invalid proxy URL ${JSON.stringify(n)}: ${e instanceof Error?e.message:String(e)}`)}if(r.protocol!==`http:`&&r.protocol!==`https:`)throw Error(`${k} Got ${r.protocol}`);return r}var j=`https://chatgpt.com/backend-api`,M=`https://api.openai.com/auth`,ee=0,N=1e3,te=6e4,ne=15e3,re=3,ie=new Set([`openai`,`openai-codex`,`opencode`]),ae=1009,oe=`websocket_connection_limit_reached`,se=`previous_response_not_found`,ce=new Set([`completed`,`incomplete`,`failed`,`cancelled`,`queued`,`in_progress`]);function P(e){if(e.stopReason===`pending`)throw Error(`Codex stream ended without a stop reason`);if(e.stopReason===`error`||e.stopReason===`aborted`)throw Error(e.errorMessage||`An unknown error occurred`)}function le(e){return/GoUsageLimitError|FreeUsageLimitError|Monthly usage limit reached|available balance|insufficient_quota|out of budget|quota exceeded|billing/i.test(e)}function ue(e,t){return e===429&&le(t)?!1:e===429||e===500||e===502||e===503||e===504?!0:/rate.?limit|overloaded|service.?unavailable|upstream.?connect|connection.?refused/i.test(t)}function de(e){let t=e.get(`retry-after-ms`);if(t!==null){let e=Number(t);if(Number.isFinite(e))return Math.max(0,e)}let n=e.get(`retry-after`);if(!n)return;let r=Number(n);if(Number.isFinite(r))return Math.max(0,r*1e3);let i=Date.parse(n);if(!Number.isNaN(i))return Math.max(0,i-Date.now())}var F=class extends Error{};function fe(e,t){let n=t?.maxRetryDelayMs??te;if(n>0&&e>n)throw new F(`Server requested ${Math.ceil(e/1e3)}s retry delay (max: ${Math.ceil(n/1e3)}s)`);return e}function I(e,t){return new Promise((n,r)=>{if(t?.aborted){r(Error(`Request was aborted`));return}let i=setTimeout(n,e);t?.addEventListener(`abort`,()=>{clearTimeout(i),r(Error(`Request was aborted`))})})}function L(e){if(e!==void 0){if(!Number.isFinite(e)||e<0)throw Error(`Invalid timeoutMs: ${String(e)}`);return Math.floor(e)}}function pe(){return typeof process>`u`||!(process.versions?.node||process.versions?.bun)?null:process.getBuiltinModule?.(`node:zlib`)??null}function me(e){let t=pe();if(!t||typeof t.zstdCompressSync!=`function`)return null;try{let n=t.zstdCompressSync(e,{params:{[t.constants.ZSTD_c_compressionLevel]:re}});return new Uint8Array(n.buffer,n.byteOffset,n.byteLength)}catch{return null}}var R=(r,i,a)=>{let o=new e;return(async()=>{let e={role:`assistant`,content:[],api:`openai-codex-responses`,provider:r.provider,model:r.id,usage:{input:0,output:0,cacheRead:0,cacheWrite:0,totalTokens:0,cost:{input:0,output:0,cacheRead:0,cacheWrite:0,total:0}},stopReason:`pending`,timestamp:Date.now()};try{let c=a?.apiKey;if(!c)throw Error(`No API key for provider: ${r.provider}`);let u=Qe(c),d=l(i.tools,r.compat?.supportsOpenAIGrammarTools??!1),f=a?.cacheRetention===`none`?void 0:a?.sessionId,m=p(f),h=ge(r,i,a,m,d),g=await a?.onPayload?.(h,r);g!==void 0&&(h=g);let _=m||S(),v=et(r.headers,a?.headers,u,c,m),y=tt(r.headers,a?.headers,u,c,_),b=JSON.stringify(h),x=L(a?.timeoutMs),w=L(a?.websocketConnectTimeoutMs),T=a?.transport||`auto`,E=!1,D=T!==`sse`&&Me(f);if(D&&Ne(f),T!==`sse`&&!D){let i=!1,s=!1,c=!1;for(;;){i=!1;try{if(await Xe(ve(r.baseUrl),h,y,e,o,r,()=>{i=!0,E||(E=!0,o.push({type:`start`,partial:e}))},x,w,f,u,d,a),a?.signal?.aborted)throw Error(`Request was aborted`);P(e),o.push({type:`done`,reason:e.stopReason,message:e}),o.end();return}catch(r){let o=a?.signal?.aborted,l=!i&&xe(r),u=Se(r);if(!o&&u&&!c){c=!0;continue}if(!o&&l&&!s){s=!0;continue}if(o||be(r)&&!l||(n(e,t(`provider_transport_failure`,r,{configuredTransport:T,fallbackTransport:i?void 0:`sse`,eventsEmitted:i,phase:i?`after_message_stream_start`:`before_message_stream_start`,requestBytes:new TextEncoder().encode(b).byteLength})),Pe(f,r),i))throw r;Ne(f);break}}}let O=me(b);O&&v.set(`content-encoding`,`zstd`);let k=O??b,A,j,M=a?.maxRetries??ee;for(let e=0;e<=M;e++){if(a?.signal?.aborted)throw Error(`Request was aborted`);try{let t=x!==void 0&&x>0?AbortSignal.timeout(x):void 0,n=C([a?.signal,t]);try{A=await(a?.fetch??globalThis.fetch)(V(r.baseUrl),{method:`POST`,headers:v,body:k,signal:n.signal})}catch(e){throw t?.aborted&&!a?.signal?.aborted?Error(`Codex SSE response headers timed out after ${x}ms`):e}finally{n.cleanup()}if(await a?.onResponse?.({status:A.status,headers:s(A.headers)},r),A.ok)break;let i=await A.text();if(e<M&&ue(A.status,i)){let t=de(A.headers);await I(t===void 0?N*2**e:fe(t,a),a?.signal);continue}let o=await Ze(new Response(i,{status:A.status,statusText:A.statusText}));throw Error(o.friendlyMessage||o.message)}catch(t){if(t instanceof Error&&(t.name===`AbortError`||t.message===`Request was aborted`))throw Error(`Request was aborted`);if(j=t instanceof Error?t:Error(String(t)),e<M&&!(j instanceof F)&&!j.message.includes(`usage limit`)){await I(N*2**e,a?.signal);continue}throw j}}if(!A?.ok)throw j??Error(`Failed after retries`);if(!A.body)throw Error(`No response body`);if(E||(E=!0,o.push({type:`start`,partial:e})),await ye(A,e,o,r,d,a),a?.signal?.aborted)throw Error(`Request was aborted`);P(e),o.push({type:`done`,reason:e.stopReason,message:e}),o.end()}catch(t){for(let t of e.content)delete t.partialJson,delete t.customInput;e.stopReason=a?.signal?.aborted?`aborted`:`error`,e.errorMessage=f(d(t)),o.push({type:`error`,reason:e.stopReason,error:e}),o.end()}})(),o},he=(e,t,n)=>{let i=n?.apiKey;if(!i)throw Error(`No API key for provider: ${e.provider}`);let a=u(e,t,n,i),o=n?.reasoning?r(e,n.reasoning):void 0,s=o===`off`?void 0:o;return R(e,t,{...a,reasoningEffort:s})};function ge(e,t,n,r,i=l(t.tools,e.compat?.supportsOpenAIGrammarTools??!1)){let a=e.compat?.supportsStrictMode??!0,s=e.compat?.supportsOpenAIGrammarTools??!1,c=e.compat?.supportsAdditionalTools?`additional-tools`:e.compat?.supportsToolSearch?`tool-search`:void 0,u=o(t,c!==void 0),d=g(e,t,ie,{includeSystemPrompt:!1,grammarToolInputProperties:i,deferredTools:u.deferred,deferredToolsMode:c,toolOptions:{strict:null,supportsStrictMode:a,supportsOpenAIGrammarTools:s}}),f={model:e.id,store:!1,stream:!0,instructions:t.systemPrompt||`You are a helpful assistant.`,input:d,text:{verbosity:n?.textVerbosity||`low`},include:[`reasoning.encrypted_content`],prompt_cache_key:r,tool_choice:n?.toolChoice??`auto`,parallel_tool_calls:!0};if(n?.temperature!==void 0&&(f.temperature=n.temperature),n?.serviceTier!==void 0&&(f.service_tier=n.serviceTier),u.immediate.length>0&&(f.tools=m(u.immediate,{strict:null,supportsStrictMode:a,supportsOpenAIGrammarTools:s})),n?.reasoningEffort!==void 0){let t=n.reasoningEffort===`none`?e.thinkingLevelMap?.off??`none`:e.thinkingLevelMap?.[n.reasoningEffort]??n.reasoningEffort;t!==null&&(f.reasoning={effort:t,summary:n.reasoningSummary??`auto`})}return f}function _e(e,t){switch(t){case`flex`:return .5;case`priority`:return e.id===`gpt-5.5`?2.5:2;default:return 1}}function z(e,t,n){let r=_e(n,t);r!==1&&(e.cost.input*=r,e.cost.output*=r,e.cost.cacheRead*=r,e.cost.cacheWrite*=r,e.cost.total=e.cost.input+e.cost.output+e.cost.cacheRead+e.cost.cacheWrite)}function B(e,t){return e==="default"&&(t===`flex`||t===`priority`)?t:e??t}function V(e){let t=(e&&e.trim().length>0?e:j).replace(/\/+$/,``);return t.endsWith(`/codex/responses`)?t:t.endsWith(`/codex`)?`${t}/responses`:`${t}/codex/responses`}function ve(e){let t=new URL(V(e));return t.protocol===`https:`&&(t.protocol=`wss:`),t.protocol===`http:`&&(t.protocol=`ws:`),t.toString()}async function ye(e,t,n,r,i,a){await h(W(Te(e,a?.signal),t),t,n,r,{serviceTier:a?.serviceTier,grammarToolInputProperties:i,resolveServiceTier:B,applyServiceTierPricing:(e,t)=>z(e,t,r)})}var H=class extends Error{code;payload;constructor(e,t){super(e),this.name=`CodexApiError`,this.code=t?.code,this.payload=t?.payload,this.cause=t?.cause}},U=class extends Error{payload;constructor(e,t){super(e),this.name=`CodexProtocolError`,this.payload=t?.payload,this.cause=t?.cause}};function be(e){return e instanceof H||e instanceof U}function xe(e){return e instanceof H&&e.code===oe}function Se(e){return e instanceof H&&e.code===se}function Ce(e){let t=e.error&&typeof e.error==`object`?e.error:void 0;return{code:typeof e.code==`string`?e.code:typeof t?.code==`string`?t.code:void 0,message:typeof e.message==`string`?e.message:typeof t?.message==`string`?t.message:void 0}}async function*W(e,t){for await(let n of e){let e=typeof n.type==`string`?n.type:void 0;if(e){if(e===`error`){let{code:e,message:t}=Ce(n);throw new H(`Codex error: ${t||e||JSON.stringify(n)}`,{code:e,payload:n})}if(e===`response.failed`){let e=n.response,t=e?.error?.code,r=e?.error?.message;throw new H(r||`Codex response failed`,{code:t,payload:n})}if(e===`response.done`||e===`response.completed`||e===`response.incomplete`){let e=n.response;typeof e?.end_turn==`boolean`&&(t.endTurn=e.end_turn);let r=e&&{...e,status:we(e.status)};yield{...n,type:`response.completed`,response:r};return}yield n}}}function we(e){if(typeof e==`string`)return ce.has(e)?e:void 0}async function*Te(e,t){if(!e.body)return;let n=e.body.getReader(),r=new TextDecoder,a=``,o=()=>{n.cancel().catch(()=>{})};t?.addEventListener(`abort`,o,{once:!0});try{for(;;){if(t?.aborted)throw Error(`Request was aborted`);let{done:e,value:o}=await n.read();if(t?.aborted)throw Error(`Request was aborted`);if(e)break;a+=r.decode(o,{stream:!0});let s=a.indexOf(`
1
+ import{t as e}from"./event-stream-qbAZIAKV.js";import{_r as t,gr as n,mr as r,vr as i,yr as a}from"./index-DCgpDQKf.js";import{t as o}from"./deferred-tools-C1IEsG5C.js";import{t as s}from"./headers-CbDaTl3c.js";import{t as c}from"./pi-user-agent-6Rm79QmC.js";import{c as l,i as u}from"./transform-messages-CjZBscG6.js";import{n as d,t as f}from"./error-body-pkrba6pf.js";import{t as p}from"./openai-prompt-cache-DXo9f3w5.js";import{n as m,r as h,t as g}from"./openai-responses-shared-BdPh5feu.js";var _=new Set;function v(e){return _.add(e),()=>{_.delete(e)}}var y=-1/0,b=0;function x(e){if(globalThis.crypto?.getRandomValues){globalThis.crypto.getRandomValues(e);return}for(let t=0;t<e.length;t++)e[t]=Math.floor(Math.random()*256)}function S(){let e=new Uint8Array(16);x(e);let t=Date.now();t>y?(b=e[6]*16777216+e[7]*65536+e[8]*256+e[9],y=t):(b=b+1>>>0,b===0&&y++);let n=new Uint8Array(16);n[0]=y/1099511627776&255,n[1]=y/4294967296&255,n[2]=y/16777216&255,n[3]=y/65536&255,n[4]=y/256&255,n[5]=y&255,n[6]=112|b>>>28&15,n[7]=b>>>20&255,n[8]=128|b>>>14&63,n[9]=b>>>6&255,n[10]=(b&63)<<2|e[10]&3,n[11]=e[11],n[12]=e[12],n[13]=e[13],n[14]=e[14],n[15]=e[15];let r=Array.from(n,e=>e.toString(16).padStart(2,`0`));return`${r.slice(0,4).join(``)}-${r.slice(4,6).join(``)}-${r.slice(6,8).join(``)}-${r.slice(8,10).join(``)}-${r.slice(10,16).join(``)}`}function C(e){let t=e.filter(e=>e!==void 0);if(t.length===0)return{cleanup:()=>{}};if(t.length===1)return{signal:t[0],cleanup:()=>{}};let n=new AbortController,r=[],i=e=>{n.signal.aborted||n.abort(e.reason)};for(let e of t){if(e.aborted){i(e);break}let t=()=>i(e);e.addEventListener(`abort`,t,{once:!0}),r.push({signal:e,listener:t})}return{signal:n.signal,cleanup:()=>{for(let{signal:e,listener:t}of r)e.removeEventListener(`abort`,t)}}}var w={ftp:21,gopher:70,http:80,https:443,ws:80,wss:443};function T(e,t){let n=e.toLowerCase(),r=e.toUpperCase();return t?.[n]||t?.[r]||a(n)||a(r)||``}function E(e){if(e instanceof URL)return e;try{return new URL(e)}catch{return}}function D(e,t,n){let r=T(`no_proxy`,n).toLowerCase();return r?r===`*`?!1:r.split(/[,\s]/).every(n=>{if(!n)return!0;let r=n.match(/^(.+):(\d+)$/),i=r?r[1]:n,a=r?Number.parseInt(r[2],10):0;return a&&a!==t?!0:/^[.*]/.test(i)?(i.startsWith(`*`)&&(i=i.slice(1)),!e.endsWith(i)):e!==i}):!0}function O(e,t){let n=E(e);if(!n?.protocol||!n.host)return``;let r=n.protocol.split(`:`,1)[0];if(!D(n.host.replace(/:\d*$/,``),Number.parseInt(n.port,10)||w[r]||0,t))return``;let i=T(`${r}_proxy`,t)||T(`all_proxy`,t);return i&&!i.includes(`://`)&&(i=`${r}://${i}`),i}var k=`Unsupported proxy protocol. SOCKS and PAC proxy URLs are not supported; use an HTTP or HTTPS proxy URL.`;function A(e,t){let n=O(e,t);if(!n)return;let r;try{r=new URL(n)}catch(e){throw Error(`Invalid proxy URL ${JSON.stringify(n)}: ${e instanceof Error?e.message:String(e)}`)}if(r.protocol!==`http:`&&r.protocol!==`https:`)throw Error(`${k} Got ${r.protocol}`);return r}var j=`https://chatgpt.com/backend-api`,M=`https://api.openai.com/auth`,ee=0,N=1e3,te=6e4,ne=15e3,re=3,ie=new Set([`openai`,`openai-codex`,`opencode`]),ae=1009,oe=`websocket_connection_limit_reached`,se=`previous_response_not_found`,ce=new Set([`completed`,`incomplete`,`failed`,`cancelled`,`queued`,`in_progress`]);function P(e){if(e.stopReason===`pending`)throw Error(`Codex stream ended without a stop reason`);if(e.stopReason===`error`||e.stopReason===`aborted`)throw Error(e.errorMessage||`An unknown error occurred`)}function le(e){return/GoUsageLimitError|FreeUsageLimitError|Monthly usage limit reached|available balance|insufficient_quota|out of budget|quota exceeded|billing/i.test(e)}function ue(e,t){return e===429&&le(t)?!1:e===429||e===500||e===502||e===503||e===504?!0:/rate.?limit|overloaded|service.?unavailable|upstream.?connect|connection.?refused/i.test(t)}function de(e){let t=e.get(`retry-after-ms`);if(t!==null){let e=Number(t);if(Number.isFinite(e))return Math.max(0,e)}let n=e.get(`retry-after`);if(!n)return;let r=Number(n);if(Number.isFinite(r))return Math.max(0,r*1e3);let i=Date.parse(n);if(!Number.isNaN(i))return Math.max(0,i-Date.now())}var F=class extends Error{};function fe(e,t){let n=t?.maxRetryDelayMs??te;if(n>0&&e>n)throw new F(`Server requested ${Math.ceil(e/1e3)}s retry delay (max: ${Math.ceil(n/1e3)}s)`);return e}function I(e,t){return new Promise((n,r)=>{if(t?.aborted){r(Error(`Request was aborted`));return}let i=setTimeout(n,e);t?.addEventListener(`abort`,()=>{clearTimeout(i),r(Error(`Request was aborted`))})})}function L(e){if(e!==void 0){if(!Number.isFinite(e)||e<0)throw Error(`Invalid timeoutMs: ${String(e)}`);return Math.floor(e)}}function pe(){return typeof process>`u`||!(process.versions?.node||process.versions?.bun)?null:process.getBuiltinModule?.(`node:zlib`)??null}function me(e){let t=pe();if(!t||typeof t.zstdCompressSync!=`function`)return null;try{let n=t.zstdCompressSync(e,{params:{[t.constants.ZSTD_c_compressionLevel]:re}});return new Uint8Array(n.buffer,n.byteOffset,n.byteLength)}catch{return null}}var R=(r,i,a)=>{let o=new e;return(async()=>{let e={role:`assistant`,content:[],api:`openai-codex-responses`,provider:r.provider,model:r.id,usage:{input:0,output:0,cacheRead:0,cacheWrite:0,totalTokens:0,cost:{input:0,output:0,cacheRead:0,cacheWrite:0,total:0}},stopReason:`pending`,timestamp:Date.now()};try{let c=a?.apiKey;if(!c)throw Error(`No API key for provider: ${r.provider}`);let u=Qe(c),d=l(i.tools,r.compat?.supportsOpenAIGrammarTools??!1),f=a?.cacheRetention===`none`?void 0:a?.sessionId,m=p(f),h=ge(r,i,a,m,d),g=await a?.onPayload?.(h,r);g!==void 0&&(h=g);let _=m||S(),v=et(r.headers,a?.headers,u,c,m),y=tt(r.headers,a?.headers,u,c,_),b=JSON.stringify(h),x=L(a?.timeoutMs),w=L(a?.websocketConnectTimeoutMs),T=a?.transport||`auto`,E=!1,D=T!==`sse`&&Me(f);if(D&&Ne(f),T!==`sse`&&!D){let i=!1,s=!1,c=!1;for(;;){i=!1;try{if(await Xe(ve(r.baseUrl),h,y,e,o,r,()=>{i=!0,E||(E=!0,o.push({type:`start`,partial:e}))},x,w,f,u,d,a),a?.signal?.aborted)throw Error(`Request was aborted`);P(e),o.push({type:`done`,reason:e.stopReason,message:e}),o.end();return}catch(r){let o=a?.signal?.aborted,l=!i&&xe(r),u=Se(r);if(!o&&u&&!c){c=!0;continue}if(!o&&l&&!s){s=!0;continue}if(o||be(r)&&!l||(n(e,t(`provider_transport_failure`,r,{configuredTransport:T,fallbackTransport:i?void 0:`sse`,eventsEmitted:i,phase:i?`after_message_stream_start`:`before_message_stream_start`,requestBytes:new TextEncoder().encode(b).byteLength})),Pe(f,r),i))throw r;Ne(f);break}}}let O=me(b);O&&v.set(`content-encoding`,`zstd`);let k=O??b,A,j,M=a?.maxRetries??ee;for(let e=0;e<=M;e++){if(a?.signal?.aborted)throw Error(`Request was aborted`);try{let t=x!==void 0&&x>0?AbortSignal.timeout(x):void 0,n=C([a?.signal,t]);try{A=await(a?.fetch??globalThis.fetch)(V(r.baseUrl),{method:`POST`,headers:v,body:k,signal:n.signal})}catch(e){throw t?.aborted&&!a?.signal?.aborted?Error(`Codex SSE response headers timed out after ${x}ms`):e}finally{n.cleanup()}if(await a?.onResponse?.({status:A.status,headers:s(A.headers)},r),A.ok)break;let i=await A.text();if(e<M&&ue(A.status,i)){let t=de(A.headers);await I(t===void 0?N*2**e:fe(t,a),a?.signal);continue}let o=await Ze(new Response(i,{status:A.status,statusText:A.statusText}));throw Error(o.friendlyMessage||o.message)}catch(t){if(t instanceof Error&&(t.name===`AbortError`||t.message===`Request was aborted`))throw Error(`Request was aborted`);if(j=t instanceof Error?t:Error(String(t)),e<M&&!(j instanceof F)&&!j.message.includes(`usage limit`)){await I(N*2**e,a?.signal);continue}throw j}}if(!A?.ok)throw j??Error(`Failed after retries`);if(!A.body)throw Error(`No response body`);if(E||(E=!0,o.push({type:`start`,partial:e})),await ye(A,e,o,r,d,a),a?.signal?.aborted)throw Error(`Request was aborted`);P(e),o.push({type:`done`,reason:e.stopReason,message:e}),o.end()}catch(t){for(let t of e.content)delete t.partialJson,delete t.customInput;e.stopReason=a?.signal?.aborted?`aborted`:`error`,e.errorMessage=f(d(t)),o.push({type:`error`,reason:e.stopReason,error:e}),o.end()}})(),o},he=(e,t,n)=>{let i=n?.apiKey;if(!i)throw Error(`No API key for provider: ${e.provider}`);let a=u(e,t,n,i),o=n?.reasoning?r(e,n.reasoning):void 0,s=o===`off`?void 0:o;return R(e,t,{...a,reasoningEffort:s})};function ge(e,t,n,r,i=l(t.tools,e.compat?.supportsOpenAIGrammarTools??!1)){let a=e.compat?.supportsStrictMode??!0,s=e.compat?.supportsOpenAIGrammarTools??!1,c=e.compat?.supportsAdditionalTools?`additional-tools`:e.compat?.supportsToolSearch?`tool-search`:void 0,u=o(t,c!==void 0),d=g(e,t,ie,{includeSystemPrompt:!1,grammarToolInputProperties:i,deferredTools:u.deferred,deferredToolsMode:c,toolOptions:{strict:null,supportsStrictMode:a,supportsOpenAIGrammarTools:s}}),f={model:e.id,store:!1,stream:!0,instructions:t.systemPrompt||`You are a helpful assistant.`,input:d,text:{verbosity:n?.textVerbosity||`low`},include:[`reasoning.encrypted_content`],prompt_cache_key:r,tool_choice:n?.toolChoice??`auto`,parallel_tool_calls:!0};if(n?.temperature!==void 0&&(f.temperature=n.temperature),n?.serviceTier!==void 0&&(f.service_tier=n.serviceTier),u.immediate.length>0&&(f.tools=m(u.immediate,{strict:null,supportsStrictMode:a,supportsOpenAIGrammarTools:s})),n?.reasoningEffort!==void 0){let t=n.reasoningEffort===`none`?e.thinkingLevelMap?.off??`none`:e.thinkingLevelMap?.[n.reasoningEffort]??n.reasoningEffort;t!==null&&(f.reasoning={effort:t,summary:n.reasoningSummary??`auto`})}return f}function _e(e,t){switch(t){case`flex`:return .5;case`priority`:return e.id===`gpt-5.5`?2.5:2;default:return 1}}function z(e,t,n){let r=_e(n,t);r!==1&&(e.cost.input*=r,e.cost.output*=r,e.cost.cacheRead*=r,e.cost.cacheWrite*=r,e.cost.total=e.cost.input+e.cost.output+e.cost.cacheRead+e.cost.cacheWrite)}function B(e,t){return e==="default"&&(t===`flex`||t===`priority`)?t:e??t}function V(e){let t=(e&&e.trim().length>0?e:j).replace(/\/+$/,``);return t.endsWith(`/codex/responses`)?t:t.endsWith(`/codex`)?`${t}/responses`:`${t}/codex/responses`}function ve(e){let t=new URL(V(e));return t.protocol===`https:`&&(t.protocol=`wss:`),t.protocol===`http:`&&(t.protocol=`ws:`),t.toString()}async function ye(e,t,n,r,i,a){await h(W(Te(e,a?.signal),t),t,n,r,{serviceTier:a?.serviceTier,grammarToolInputProperties:i,resolveServiceTier:B,applyServiceTierPricing:(e,t)=>z(e,t,r)})}var H=class extends Error{code;payload;constructor(e,t){super(e),this.name=`CodexApiError`,this.code=t?.code,this.payload=t?.payload,this.cause=t?.cause}},U=class extends Error{payload;constructor(e,t){super(e),this.name=`CodexProtocolError`,this.payload=t?.payload,this.cause=t?.cause}};function be(e){return e instanceof H||e instanceof U}function xe(e){return e instanceof H&&e.code===oe}function Se(e){return e instanceof H&&e.code===se}function Ce(e){let t=e.error&&typeof e.error==`object`?e.error:void 0;return{code:typeof e.code==`string`?e.code:typeof t?.code==`string`?t.code:void 0,message:typeof e.message==`string`?e.message:typeof t?.message==`string`?t.message:void 0}}async function*W(e,t){for await(let n of e){let e=typeof n.type==`string`?n.type:void 0;if(e){if(e===`error`){let{code:e,message:t}=Ce(n);throw new H(`Codex error: ${t||e||JSON.stringify(n)}`,{code:e,payload:n})}if(e===`response.failed`){let e=n.response,t=e?.error?.code,r=e?.error?.message;throw new H(r||`Codex response failed`,{code:t,payload:n})}if(e===`response.done`||e===`response.completed`||e===`response.incomplete`){let e=n.response;typeof e?.end_turn==`boolean`&&(t.endTurn=e.end_turn);let r=e&&{...e,status:we(e.status)};yield{...n,type:`response.completed`,response:r};return}yield n}}}function we(e){if(typeof e==`string`)return ce.has(e)?e:void 0}async function*Te(e,t){if(!e.body)return;let n=e.body.getReader(),r=new TextDecoder,a=``,o=()=>{n.cancel().catch(()=>{})};t?.addEventListener(`abort`,o,{once:!0});try{for(;;){if(t?.aborted)throw Error(`Request was aborted`);let{done:e,value:o}=await n.read();if(t?.aborted)throw Error(`Request was aborted`);if(e)break;a+=r.decode(o,{stream:!0});let s=a.indexOf(`
2
2
 
3
3
  `);for(;s!==-1;){let e=a.slice(0,s);a=a.slice(s+2);let t=e.split(`
4
4
  `).filter(e=>e.startsWith(`data:`)).map(e=>e.slice(5).trim());if(t.length>0){let e=t.join(`
@@ -1,4 +1,4 @@
1
- import{t as e}from"./event-stream-qbAZIAKV.js";import{n as t}from"./json-parse-CwN-SA_h.js";import{mr as n,pr as r,yr as i}from"./index-C8C76R86.js";import{t as a}from"./headers-CbDaTl3c.js";import{t as o}from"./provider-retry-DLGw8C1A.js";import{t as s}from"./sanitize-unicode-DmIE6hZJ.js";import{c,d as l,f as u,i as d,l as f,n as p,o as m,s as h,t as g,u as _}from"./transform-messages-CjZBscG6.js";import{n as v,t as y}from"./github-copilot-headers-DRgtIyTm.js";import{n as b}from"./openai-Dlbx6jgy.js";import{n as x,t as S}from"./error-body-pkrba6pf.js";import{t as C}from"./openai-prompt-cache-DXo9f3w5.js";import{t as w}from"./hash-yQufAZII.js";function T(e,t){if(!e)return!1;let n=t.toLowerCase();for(let[t,r]of Object.entries(e))if(t.toLowerCase()===n&&r!==null&&r.trim().length>0)return!0;return!1}function E(e,t,n){if(t)return t;if(T(n,`authorization`)||T(n,`cf-aig-authorization`))return`unused`;throw Error(`No API key for provider: ${e}`)}function D(e){for(let t of e)if(t.role===`toolResult`||t.role===`assistant`&&t.content.some(e=>e.type===`toolCall`))return!0;return!1}function O(e){let t=new Set;for(let n of e)if(n.role===`toolResult`)for(let e of n.addedToolNames??[])t.add(e);return t}function k(e,t){if(!e)return[];let n=new Map(e.map(e=>[e.name,e]));return Array.from(t).map(e=>n.get(e)).filter(e=>e!==void 0)}function A(e){return e.type===`text`}function j(e){return e.type===`thinking`}function M(e){return e.type===`toolCall`}function N(e){return e.type===`image`}function P(e){if(typeof e!=`object`||!e)return!1;let t=e;return t.type===`reasoning.encrypted`&&typeof t.id==`string`&&t.id.length>0&&typeof t.data==`string`&&t.data.length>0}function F(e,t){return e||(i(`PI_CACHE_RETENTION`,t)===`long`?`long`:`short`)}var I=(n,r,i)=>{let s=new e;return(async()=>{let e={role:`assistant`,content:[],api:n.api,provider:n.provider,model:n.id,usage:{input:0,output:0,cacheRead:0,cacheWrite:0,totalTokens:0,cost:{input:0,output:0,cacheRead:0,cacheWrite:0,total:0}},stopReason:`pending`,timestamp:Date.now()};try{let l=E(n.provider,i?.apiKey,i?.headers),u=$(n),d=c(r.tools,u.supportsOpenAIGrammarTools),f=F(i?.cacheRetention,i?.env),p=f===`none`?void 0:i?.sessionId,m=R(n,r,l,i?.headers,i?.fetch,p,u),g=z(n,r,i,u,f,d),_=await i?.onPayload?.(g,n);_!==void 0&&(g=_);let v={...i?.signal?{signal:i.signal}:{},...i?.timeoutMs===void 0?{}:{timeout:i.timeoutMs},maxRetries:0},{data:y,response:b}=await o(()=>m.chat.completions.create(g,v).withResponse(),{maxRetries:i?.maxRetries,maxRetryDelayMs:i?.maxRetryDelayMs,signal:i?.signal});await i?.onResponse?.({status:b.status,headers:a(b.headers)},n),s.push({type:`start`,partial:e});let x=null,S=null,C=!1,w=new Map,T=new Map,D=new Map,O=e.content,k=e=>O.indexOf(e),A=e=>{let t=e.customInput?.property;if(t===void 0)return``;let n=e.arguments[t];return typeof n==`string`?n:``},j=(e,t,n)=>{let r=e.customInput;if(!r)return;let i=h(r.jsonBuffer,r.property,t,n);return e.arguments={[r.property]:t},i},M=n=>{let r=k(n);if(r!==-1){if(n.type===`text`)s.push({type:`text_end`,contentIndex:r,content:n.text,partial:e});else if(n.type===`thinking`)s.push({type:`thinking_end`,contentIndex:r,content:n.thinking,partial:e});else if(n.type===`toolCall`){if(n.customInput){let t=j(n,A(n),!0);t!==void 0&&s.push({type:`toolcall_delta`,contentIndex:r,delta:t,partial:e})}else n.arguments=t(n.partialArgs);delete n.partialArgs,delete n.customInput,delete n.streamIndex,s.push({type:`toolcall_end`,contentIndex:r,toolCall:n,partial:e})}}},N=()=>(x||(x={type:`text`,text:``},O.push(x),s.push({type:`text_start`,contentIndex:k(x),partial:e})),x),I=t=>(S||(S={type:`thinking`,thinking:``,thinkingSignature:t},O.push(S),s.push({type:`thinking_start`,contentIndex:k(S),partial:e})),S),L=e=>{if(!e.id)return;let t=D.get(e.id);t&&(e.thoughtSignature=t,D.delete(e.id))},B=t=>{let n=typeof t.index==`number`?t.index:void 0,r=t.function?.name??t.custom?.name??``,i=n===void 0?void 0:w.get(n);if(!i&&t.id&&(i=T.get(t.id)),!i){let a=t.custom&&!t.function?d.get(r)??`input`:void 0,o=a!==void 0;i={type:`toolCall`,id:t.id||``,name:r,arguments:o?{[a]:``}:{},partialArgs:o?void 0:``,customInput:o?{property:a,jsonBuffer:{input:``,started:!1,closed:!1}}:void 0,streamIndex:n},n!==void 0&&w.set(n,i),t.id&&T.set(t.id,i),O.push(i),s.push({type:`toolcall_start`,contentIndex:k(i),partial:e})}if(n!==void 0&&i.streamIndex===void 0&&(i.streamIndex=n,w.set(n,i)),t.id&&T.set(t.id,i),!i.name&&r&&(i.name=r),t.custom&&!t.function&&!i.customInput){let e=d.get(i.name)??`input`;i.arguments={[e]:``},i.customInput={property:e,jsonBuffer:{input:``,started:!1,closed:!1}},delete i.partialArgs}return L(i),i};for await(let r of y){if(!r||typeof r!=`object`)continue;e.responseId||=r.id,typeof r.model==`string`&&r.model.length>0&&r.model!==n.id&&(e.responseModel||=r.model),r.usage&&(e.usage=Q(r.usage,n));let i=Array.isArray(r.choices)?r.choices[0]:void 0;if(i){if(!r.usage&&i.usage&&(e.usage=Q(i.usage,n)),i.finish_reason){e.rawStopReason=i.finish_reason;let t=ee(i.finish_reason);e.stopReason=t.stopReason,t.errorMessage&&(e.errorMessage=t.errorMessage),C=!0}if(i.delta){if(i.delta.content!==null&&i.delta.content!==void 0&&i.delta.content.length>0){let t=N();t.text+=i.delta.content,s.push({type:`text_delta`,contentIndex:k(t),delta:i.delta.content,partial:e})}let r=[`reasoning_content`,`reasoning`,`reasoning_text`],a=i.delta,o=null;for(let e of r){let t=a[e];if(typeof t==`string`&&t.length>0){o=e;break}}if(o){let t=a[o];if(typeof t==`string`&&t.length>0){let r=I(n.provider===`opencode-go`&&o===`reasoning`?`reasoning_content`:o);r.thinking+=t,s.push({type:`thinking_delta`,contentIndex:k(r),delta:t,partial:e})}}if(i?.delta?.tool_calls)for(let n of i.delta.tool_calls){let r=B(n);!r.id&&n.id&&(r.id=n.id,T.set(n.id,r));let i=n.function?.name??n.custom?.name;!r.name&&i&&(r.name=i);let a=``;n.function?.arguments?(a=n.function.arguments,r.partialArgs=(r.partialArgs??``)+n.function.arguments,r.arguments=t(r.partialArgs)):n.custom?.input&&(a=j(r,A(r)+n.custom.input,!1)??``),s.push({type:`toolcall_delta`,contentIndex:k(r),delta:a,partial:e})}let c=i.delta.reasoning_details;if(Array.isArray(c)){for(let e of c)if(P(e)){let t=JSON.stringify(e),n=T.get(e.id);n?n.thoughtSignature=t:D.set(e.id,t)}}}}}for(let e of O)M(e);if(i?.signal?.aborted||e.stopReason===`aborted`)throw Error(`Request was aborted`);if(!C&&!u.supportsFinishReason&&(e.stopReason=e.content.some(e=>e.type===`toolCall`)?`toolUse`:`stop`),e.stopReason===`error`)throw Error(e.errorMessage||`Provider returned an error stop reason`);if(u.supportsFinishReason&&!C||e.stopReason===`pending`)throw Error(`Stream ended without finish_reason`);s.push({type:`done`,reason:e.stopReason,message:e}),s.end()}catch(t){for(let t of e.content)delete t.index,delete t.partialArgs,delete t.customInput,delete t.streamIndex;e.stopReason=i?.signal?.aborted?`aborted`:`error`,e.errorMessage=S(x(t));let n=t?.error?.metadata?.raw;n&&!e.errorMessage.includes(String(n))&&(e.errorMessage+=`\n${n}`),s.push({type:`error`,reason:e.stopReason,error:e}),s.end()}})(),s},L=(e,t,r)=>{E(e.provider,r?.apiKey,r?.headers);let i=d(e,t,r,r?.apiKey),a=r?.reasoning?n(e,r.reasoning):void 0,o=a===`off`?void 0:a,s=r?.toolChoice;return I(e,t,{...i,reasoningEffort:o,toolChoice:s,thinkingBudgets:r?.thinkingBudgets})};function R(e,t,n,r,i,a,o=$(e)){let s={...e.headers};if(e.provider===`github-copilot`){let e=v(t.messages),n=y({messages:t.messages,hasImages:e});Object.assign(s,n)}return a&&o.sendSessionAffinityHeaders&&(o.sessionAffinityFormat===`openrouter`?s[`x-session-id`]=a:(o.sessionAffinityFormat===`openai`&&(s.session_id=a),s[`x-client-request-id`]=a,s[`x-session-affinity`]=a)),r&&Object.assign(s,r),new b({apiKey:n,baseURL:e.baseUrl,dangerouslyAllowBrowser:!0,fetch:i,defaultHeaders:s})}function z(e,t,n,r=$(e),i=F(n?.cacheRetention,n?.env),a=c(t.tools,r.supportsOpenAIGrammarTools)){let o=X(e,t,r,{grammarToolInputProperties:a}),s=H(r,i),l={model:e.id,messages:o,stream:!0,prompt_cache_key:e.baseUrl.includes(`api.openai.com`)&&i!==`none`||i===`long`&&r.supportsLongCacheRetention?C(n?.sessionId):void 0,prompt_cache_retention:i===`long`&&r.supportsLongCacheRetention?`24h`:void 0};r.supportsUsageInStreaming!==!1&&(l.stream_options={include_usage:!0}),r.supportsStore&&(l.store=!1),n?.maxTokens&&(r.maxTokensField===`max_tokens`?l.max_tokens=n.maxTokens:l.max_completion_tokens=n.maxTokens),n?.temperature!==void 0&&(l.temperature=n.temperature);let u=r.deferredToolsMode===`kimi`?O(t.messages):new Set,d=t.tools?.filter(e=>!u.has(e.name));if(d&&d.length>0?(l.tools=Z(d,r),r.zaiToolStream&&(l.tool_stream=!0)):D(t.messages)&&(l.tools=[]),s&&U(o,l.tools,s),n?.toolChoice&&(l.tool_choice=n.toolChoice),r.thinkingFormat===`zai`&&e.reasoning){let t=l;if(t.thinking=n?.reasoningEffort?{type:`enabled`,clear_thinking:!1}:{type:`disabled`},n?.reasoningEffort&&r.supportsReasoningEffort){let r=e.thinkingLevelMap?.[n.reasoningEffort],i=r===void 0?n.reasoningEffort:r;typeof i==`string`&&(t.reasoning_effort=i)}}else if(r.thinkingFormat===`qwen`&&e.reasoning){if(l.enable_thinking=!!n?.reasoningEffort,n?.reasoningEffort&&r.supportsReasoningEffort){let t=e.thinkingLevelMap?.[n.reasoningEffort]??n.reasoningEffort;typeof t==`string`&&(l.reasoning_effort=t)}}else if(r.thinkingFormat===`qwen-chat-template`&&e.reasoning)l.chat_template_kwargs={enable_thinking:!!n?.reasoningEffort,preserve_thinking:!0};else if(r.thinkingFormat===`chat-template`&&e.reasoning){let t=B(e,n,r.chatTemplateKwargs);t&&(l.chat_template_kwargs=t)}else if(r.thinkingFormat===`baseten`&&e.reasoning){let t=l,i=B(e,n,r.chatTemplateArgs);if(i&&(t.chat_template_args=i),r.supportsReasoningEffort){let r=n?.reasoningEffort,i=r?e.thinkingLevelMap?.[r]:e.thinkingLevelMap?.off,a=i===void 0?r:i;typeof a==`string`&&(t.reasoning_effort=a)}}else if(r.thinkingFormat===`deepseek`&&e.reasoning)n?.reasoningEffort?l.thinking={type:`enabled`}:e.thinkingLevelMap?.off!==null&&(l.thinking={type:`disabled`}),n?.reasoningEffort&&r.supportsReasoningEffort&&(l.reasoning_effort=e.thinkingLevelMap?.[n.reasoningEffort]??n.reasoningEffort);else if(r.thinkingFormat===`openrouter`&&e.reasoning){let t=l;n?.reasoningEffort?t.reasoning={effort:e.thinkingLevelMap?.[n.reasoningEffort]??n.reasoningEffort}:e.thinkingLevelMap?.off!==null&&(t.reasoning={effort:e.thinkingLevelMap?.off??`none`})}else if(r.thinkingFormat===`ant-ling`&&e.reasoning&&n?.reasoningEffort){let t=e.thinkingLevelMap?.[n.reasoningEffort];typeof t==`string`&&(l.reasoning={effort:t})}else if(r.thinkingFormat===`together`&&e.reasoning){let t=l;t.reasoning={enabled:!!n?.reasoningEffort},n?.reasoningEffort&&r.supportsReasoningEffort&&(t.reasoning_effort=e.thinkingLevelMap?.[n.reasoningEffort]??n.reasoningEffort)}else if(r.thinkingFormat===`string-thinking`&&e.reasoning){let t=l;n?.reasoningEffort?t.thinking=e.thinkingLevelMap?.[n.reasoningEffort]??n.reasoningEffort:e.thinkingLevelMap?.off!==null&&(t.thinking=e.thinkingLevelMap?.off??`none`)}else if(n?.reasoningEffort&&e.reasoning&&r.supportsReasoningEffort)l.reasoning_effort=e.thinkingLevelMap?.[n.reasoningEffort]??n.reasoningEffort;else if(!n?.reasoningEffort&&e.reasoning&&r.supportsReasoningEffort){let t=e.thinkingLevelMap?.off;typeof t==`string`&&(l.reasoning_effort=t)}if(r.supportsThinkingTokenBudget&&n?.reasoningEffort&&e.reasoning){let t=m(n.reasoningEffort),r={minimal:1024,low:2048,medium:8192,high:16384,...n.thinkingBudgets},i=l.max_tokens??l.max_completion_tokens??e.maxTokens,a=Math.min(r[t],Math.max(0,i-p));a>0&&(l.thinking_token_budget=a)}if(e.compat?.openRouterRouting&&(l.provider=e.compat.openRouterRouting),e.compat?.vercelGatewayRouting){let t=e.compat.vercelGatewayRouting;if(t.only||t.order){let e={};t.only&&(e.only=t.only),t.order&&(e.order=t.order),l.providerOptions={gateway:e}}}return n?.samplingParams&&Object.assign(l,n.samplingParams),l}function B(e,t,n){let r={};for(let[i,a]of Object.entries(n)){let n=V(e,t,a);n!==void 0&&(r[i]=n)}return Object.keys(r).length>0?r:void 0}function V(e,t,n){if(typeof n!=`object`||!n)return n;let r=t?.reasoningEffort;if(!r&&n.omitWhenOff)return;if(n.$var===`thinking.enabled`)return!!r;let i=r?e.thinkingLevelMap?.[r]:e.thinkingLevelMap?.off;return i===void 0?r:typeof i==`string`?i:void 0}function H(e,t){if(e.cacheControlFormat!==`anthropic`||t===`none`)return;let n=t===`long`&&e.supportsLongCacheRetention?`1h`:void 0;return{type:`ephemeral`,...n?{ttl:n}:{}}}function U(e,t,n){W(e,n),K(t,n),G(e,n)}function W(e,t){for(let n of e)if(n.role===`system`||n.role===`developer`){q(n,t);return}}function G(e,t){for(let n=e.length-1;n>=0;n--){let r=e[n];if((r.role===`user`||r.role===`assistant`||r.role===`tool`)&&J(r,t))return}}function K(e,t){if(!e||e.length===0)return;let n=e[e.length-1];n.cache_control=t}function q(e,t){return Y(e,t)}function J(e,t){return e.role===`user`||e.role===`assistant`||e.role===`tool`?Y(e,t):!1}function Y(e,t){let n=e.content;if(typeof n==`string`)return n.length===0?!1:(e.content=[{type:`text`,text:n,cache_control:t}],!0);if(!Array.isArray(n))return!1;for(let e=n.length-1;e>=0;e--){let r=n[e];if(r?.type===`text`){let e=r;return e.cache_control=t,!0}}return!1}function X(e,t,n,r){let i=[],a=t=>{if(t.includes(`|`)){let e=t.indexOf(`|`),n=t.slice(0,e).replace(/[^a-zA-Z0-9_-]/g,`_`),r=t.slice(e+1).replace(/[^a-zA-Z0-9_-]/g,`_`),i=r.length>0?`${n}_${r}`:n;if(i.length<=40)return i;let a=w(t).slice(0,8);return`${n.slice(0,Math.max(1,40-a.length-1))}_${a}`}return e.provider===`openai`&&t.length>40?t.slice(0,40):t},o=g(t.messages,e,e=>a(e));if(t.systemPrompt){let r=e.reasoning&&n.supportsDeveloperRole?`developer`:`system`;i.push({role:r,content:s(t.systemPrompt)})}let c=null;for(let a=0;a<o.length;a++){let l=o[a];if(n.requiresAssistantAfterToolResult&&c===`toolResult`&&l.role===`user`&&i.push({role:`assistant`,content:`I have processed the tool results.`}),l.role===`user`)if(typeof l.content==`string`)i.push({role:`user`,content:s(l.content)});else{let e=l.content.map(e=>e.type===`text`?{type:`text`,text:s(e.text)}:{type:`image_url`,image_url:{url:`data:${e.mimeType};base64,${e.data}`}});if(e.length===0)continue;i.push({role:`user`,content:e})}else if(l.role===`assistant`){let t={role:`assistant`,content:n.requiresAssistantAfterToolResult?``:null},a=l.content.filter(A).filter(e=>e.text.trim().length>0).map(e=>({type:`text`,text:s(e.text)})),o=a.map(e=>e.text).join(``),c=l.content.filter(j).filter(e=>e.thinking.trim().length>0);if(c.length>0)if(n.requiresThinkingAsText)t.content=[{type:`text`,text:c.map(e=>s(e.thinking)).join(`
1
+ import{t as e}from"./event-stream-qbAZIAKV.js";import{n as t}from"./json-parse-CwN-SA_h.js";import{mr as n,pr as r,yr as i}from"./index-DCgpDQKf.js";import{t as a}from"./headers-CbDaTl3c.js";import{t as o}from"./provider-retry-DLGw8C1A.js";import{t as s}from"./sanitize-unicode-DmIE6hZJ.js";import{c,d as l,f as u,i as d,l as f,n as p,o as m,s as h,t as g,u as _}from"./transform-messages-CjZBscG6.js";import{n as v,t as y}from"./github-copilot-headers-DRgtIyTm.js";import{n as b}from"./openai-Dlbx6jgy.js";import{n as x,t as S}from"./error-body-pkrba6pf.js";import{t as C}from"./openai-prompt-cache-DXo9f3w5.js";import{t as w}from"./hash-yQufAZII.js";function T(e,t){if(!e)return!1;let n=t.toLowerCase();for(let[t,r]of Object.entries(e))if(t.toLowerCase()===n&&r!==null&&r.trim().length>0)return!0;return!1}function E(e,t,n){if(t)return t;if(T(n,`authorization`)||T(n,`cf-aig-authorization`))return`unused`;throw Error(`No API key for provider: ${e}`)}function D(e){for(let t of e)if(t.role===`toolResult`||t.role===`assistant`&&t.content.some(e=>e.type===`toolCall`))return!0;return!1}function O(e){let t=new Set;for(let n of e)if(n.role===`toolResult`)for(let e of n.addedToolNames??[])t.add(e);return t}function k(e,t){if(!e)return[];let n=new Map(e.map(e=>[e.name,e]));return Array.from(t).map(e=>n.get(e)).filter(e=>e!==void 0)}function A(e){return e.type===`text`}function j(e){return e.type===`thinking`}function M(e){return e.type===`toolCall`}function N(e){return e.type===`image`}function P(e){if(typeof e!=`object`||!e)return!1;let t=e;return t.type===`reasoning.encrypted`&&typeof t.id==`string`&&t.id.length>0&&typeof t.data==`string`&&t.data.length>0}function F(e,t){return e||(i(`PI_CACHE_RETENTION`,t)===`long`?`long`:`short`)}var I=(n,r,i)=>{let s=new e;return(async()=>{let e={role:`assistant`,content:[],api:n.api,provider:n.provider,model:n.id,usage:{input:0,output:0,cacheRead:0,cacheWrite:0,totalTokens:0,cost:{input:0,output:0,cacheRead:0,cacheWrite:0,total:0}},stopReason:`pending`,timestamp:Date.now()};try{let l=E(n.provider,i?.apiKey,i?.headers),u=$(n),d=c(r.tools,u.supportsOpenAIGrammarTools),f=F(i?.cacheRetention,i?.env),p=f===`none`?void 0:i?.sessionId,m=R(n,r,l,i?.headers,i?.fetch,p,u),g=z(n,r,i,u,f,d),_=await i?.onPayload?.(g,n);_!==void 0&&(g=_);let v={...i?.signal?{signal:i.signal}:{},...i?.timeoutMs===void 0?{}:{timeout:i.timeoutMs},maxRetries:0},{data:y,response:b}=await o(()=>m.chat.completions.create(g,v).withResponse(),{maxRetries:i?.maxRetries,maxRetryDelayMs:i?.maxRetryDelayMs,signal:i?.signal});await i?.onResponse?.({status:b.status,headers:a(b.headers)},n),s.push({type:`start`,partial:e});let x=null,S=null,C=!1,w=new Map,T=new Map,D=new Map,O=e.content,k=e=>O.indexOf(e),A=e=>{let t=e.customInput?.property;if(t===void 0)return``;let n=e.arguments[t];return typeof n==`string`?n:``},j=(e,t,n)=>{let r=e.customInput;if(!r)return;let i=h(r.jsonBuffer,r.property,t,n);return e.arguments={[r.property]:t},i},M=n=>{let r=k(n);if(r!==-1){if(n.type===`text`)s.push({type:`text_end`,contentIndex:r,content:n.text,partial:e});else if(n.type===`thinking`)s.push({type:`thinking_end`,contentIndex:r,content:n.thinking,partial:e});else if(n.type===`toolCall`){if(n.customInput){let t=j(n,A(n),!0);t!==void 0&&s.push({type:`toolcall_delta`,contentIndex:r,delta:t,partial:e})}else n.arguments=t(n.partialArgs);delete n.partialArgs,delete n.customInput,delete n.streamIndex,s.push({type:`toolcall_end`,contentIndex:r,toolCall:n,partial:e})}}},N=()=>(x||(x={type:`text`,text:``},O.push(x),s.push({type:`text_start`,contentIndex:k(x),partial:e})),x),I=t=>(S||(S={type:`thinking`,thinking:``,thinkingSignature:t},O.push(S),s.push({type:`thinking_start`,contentIndex:k(S),partial:e})),S),L=e=>{if(!e.id)return;let t=D.get(e.id);t&&(e.thoughtSignature=t,D.delete(e.id))},B=t=>{let n=typeof t.index==`number`?t.index:void 0,r=t.function?.name??t.custom?.name??``,i=n===void 0?void 0:w.get(n);if(!i&&t.id&&(i=T.get(t.id)),!i){let a=t.custom&&!t.function?d.get(r)??`input`:void 0,o=a!==void 0;i={type:`toolCall`,id:t.id||``,name:r,arguments:o?{[a]:``}:{},partialArgs:o?void 0:``,customInput:o?{property:a,jsonBuffer:{input:``,started:!1,closed:!1}}:void 0,streamIndex:n},n!==void 0&&w.set(n,i),t.id&&T.set(t.id,i),O.push(i),s.push({type:`toolcall_start`,contentIndex:k(i),partial:e})}if(n!==void 0&&i.streamIndex===void 0&&(i.streamIndex=n,w.set(n,i)),t.id&&T.set(t.id,i),!i.name&&r&&(i.name=r),t.custom&&!t.function&&!i.customInput){let e=d.get(i.name)??`input`;i.arguments={[e]:``},i.customInput={property:e,jsonBuffer:{input:``,started:!1,closed:!1}},delete i.partialArgs}return L(i),i};for await(let r of y){if(!r||typeof r!=`object`)continue;e.responseId||=r.id,typeof r.model==`string`&&r.model.length>0&&r.model!==n.id&&(e.responseModel||=r.model),r.usage&&(e.usage=Q(r.usage,n));let i=Array.isArray(r.choices)?r.choices[0]:void 0;if(i){if(!r.usage&&i.usage&&(e.usage=Q(i.usage,n)),i.finish_reason){e.rawStopReason=i.finish_reason;let t=ee(i.finish_reason);e.stopReason=t.stopReason,t.errorMessage&&(e.errorMessage=t.errorMessage),C=!0}if(i.delta){if(i.delta.content!==null&&i.delta.content!==void 0&&i.delta.content.length>0){let t=N();t.text+=i.delta.content,s.push({type:`text_delta`,contentIndex:k(t),delta:i.delta.content,partial:e})}let r=[`reasoning_content`,`reasoning`,`reasoning_text`],a=i.delta,o=null;for(let e of r){let t=a[e];if(typeof t==`string`&&t.length>0){o=e;break}}if(o){let t=a[o];if(typeof t==`string`&&t.length>0){let r=I(n.provider===`opencode-go`&&o===`reasoning`?`reasoning_content`:o);r.thinking+=t,s.push({type:`thinking_delta`,contentIndex:k(r),delta:t,partial:e})}}if(i?.delta?.tool_calls)for(let n of i.delta.tool_calls){let r=B(n);!r.id&&n.id&&(r.id=n.id,T.set(n.id,r));let i=n.function?.name??n.custom?.name;!r.name&&i&&(r.name=i);let a=``;n.function?.arguments?(a=n.function.arguments,r.partialArgs=(r.partialArgs??``)+n.function.arguments,r.arguments=t(r.partialArgs)):n.custom?.input&&(a=j(r,A(r)+n.custom.input,!1)??``),s.push({type:`toolcall_delta`,contentIndex:k(r),delta:a,partial:e})}let c=i.delta.reasoning_details;if(Array.isArray(c)){for(let e of c)if(P(e)){let t=JSON.stringify(e),n=T.get(e.id);n?n.thoughtSignature=t:D.set(e.id,t)}}}}}for(let e of O)M(e);if(i?.signal?.aborted||e.stopReason===`aborted`)throw Error(`Request was aborted`);if(!C&&!u.supportsFinishReason&&(e.stopReason=e.content.some(e=>e.type===`toolCall`)?`toolUse`:`stop`),e.stopReason===`error`)throw Error(e.errorMessage||`Provider returned an error stop reason`);if(u.supportsFinishReason&&!C||e.stopReason===`pending`)throw Error(`Stream ended without finish_reason`);s.push({type:`done`,reason:e.stopReason,message:e}),s.end()}catch(t){for(let t of e.content)delete t.index,delete t.partialArgs,delete t.customInput,delete t.streamIndex;e.stopReason=i?.signal?.aborted?`aborted`:`error`,e.errorMessage=S(x(t));let n=t?.error?.metadata?.raw;n&&!e.errorMessage.includes(String(n))&&(e.errorMessage+=`\n${n}`),s.push({type:`error`,reason:e.stopReason,error:e}),s.end()}})(),s},L=(e,t,r)=>{E(e.provider,r?.apiKey,r?.headers);let i=d(e,t,r,r?.apiKey),a=r?.reasoning?n(e,r.reasoning):void 0,o=a===`off`?void 0:a,s=r?.toolChoice;return I(e,t,{...i,reasoningEffort:o,toolChoice:s,thinkingBudgets:r?.thinkingBudgets})};function R(e,t,n,r,i,a,o=$(e)){let s={...e.headers};if(e.provider===`github-copilot`){let e=v(t.messages),n=y({messages:t.messages,hasImages:e});Object.assign(s,n)}return a&&o.sendSessionAffinityHeaders&&(o.sessionAffinityFormat===`openrouter`?s[`x-session-id`]=a:(o.sessionAffinityFormat===`openai`&&(s.session_id=a),s[`x-client-request-id`]=a,s[`x-session-affinity`]=a)),r&&Object.assign(s,r),new b({apiKey:n,baseURL:e.baseUrl,dangerouslyAllowBrowser:!0,fetch:i,defaultHeaders:s})}function z(e,t,n,r=$(e),i=F(n?.cacheRetention,n?.env),a=c(t.tools,r.supportsOpenAIGrammarTools)){let o=X(e,t,r,{grammarToolInputProperties:a}),s=H(r,i),l={model:e.id,messages:o,stream:!0,prompt_cache_key:e.baseUrl.includes(`api.openai.com`)&&i!==`none`||i===`long`&&r.supportsLongCacheRetention?C(n?.sessionId):void 0,prompt_cache_retention:i===`long`&&r.supportsLongCacheRetention?`24h`:void 0};r.supportsUsageInStreaming!==!1&&(l.stream_options={include_usage:!0}),r.supportsStore&&(l.store=!1),n?.maxTokens&&(r.maxTokensField===`max_tokens`?l.max_tokens=n.maxTokens:l.max_completion_tokens=n.maxTokens),n?.temperature!==void 0&&(l.temperature=n.temperature);let u=r.deferredToolsMode===`kimi`?O(t.messages):new Set,d=t.tools?.filter(e=>!u.has(e.name));if(d&&d.length>0?(l.tools=Z(d,r),r.zaiToolStream&&(l.tool_stream=!0)):D(t.messages)&&(l.tools=[]),s&&U(o,l.tools,s),n?.toolChoice&&(l.tool_choice=n.toolChoice),r.thinkingFormat===`zai`&&e.reasoning){let t=l;if(t.thinking=n?.reasoningEffort?{type:`enabled`,clear_thinking:!1}:{type:`disabled`},n?.reasoningEffort&&r.supportsReasoningEffort){let r=e.thinkingLevelMap?.[n.reasoningEffort],i=r===void 0?n.reasoningEffort:r;typeof i==`string`&&(t.reasoning_effort=i)}}else if(r.thinkingFormat===`qwen`&&e.reasoning){if(l.enable_thinking=!!n?.reasoningEffort,n?.reasoningEffort&&r.supportsReasoningEffort){let t=e.thinkingLevelMap?.[n.reasoningEffort]??n.reasoningEffort;typeof t==`string`&&(l.reasoning_effort=t)}}else if(r.thinkingFormat===`qwen-chat-template`&&e.reasoning)l.chat_template_kwargs={enable_thinking:!!n?.reasoningEffort,preserve_thinking:!0};else if(r.thinkingFormat===`chat-template`&&e.reasoning){let t=B(e,n,r.chatTemplateKwargs);t&&(l.chat_template_kwargs=t)}else if(r.thinkingFormat===`baseten`&&e.reasoning){let t=l,i=B(e,n,r.chatTemplateArgs);if(i&&(t.chat_template_args=i),r.supportsReasoningEffort){let r=n?.reasoningEffort,i=r?e.thinkingLevelMap?.[r]:e.thinkingLevelMap?.off,a=i===void 0?r:i;typeof a==`string`&&(t.reasoning_effort=a)}}else if(r.thinkingFormat===`deepseek`&&e.reasoning)n?.reasoningEffort?l.thinking={type:`enabled`}:e.thinkingLevelMap?.off!==null&&(l.thinking={type:`disabled`}),n?.reasoningEffort&&r.supportsReasoningEffort&&(l.reasoning_effort=e.thinkingLevelMap?.[n.reasoningEffort]??n.reasoningEffort);else if(r.thinkingFormat===`openrouter`&&e.reasoning){let t=l;n?.reasoningEffort?t.reasoning={effort:e.thinkingLevelMap?.[n.reasoningEffort]??n.reasoningEffort}:e.thinkingLevelMap?.off!==null&&(t.reasoning={effort:e.thinkingLevelMap?.off??`none`})}else if(r.thinkingFormat===`ant-ling`&&e.reasoning&&n?.reasoningEffort){let t=e.thinkingLevelMap?.[n.reasoningEffort];typeof t==`string`&&(l.reasoning={effort:t})}else if(r.thinkingFormat===`together`&&e.reasoning){let t=l;t.reasoning={enabled:!!n?.reasoningEffort},n?.reasoningEffort&&r.supportsReasoningEffort&&(t.reasoning_effort=e.thinkingLevelMap?.[n.reasoningEffort]??n.reasoningEffort)}else if(r.thinkingFormat===`string-thinking`&&e.reasoning){let t=l;n?.reasoningEffort?t.thinking=e.thinkingLevelMap?.[n.reasoningEffort]??n.reasoningEffort:e.thinkingLevelMap?.off!==null&&(t.thinking=e.thinkingLevelMap?.off??`none`)}else if(n?.reasoningEffort&&e.reasoning&&r.supportsReasoningEffort)l.reasoning_effort=e.thinkingLevelMap?.[n.reasoningEffort]??n.reasoningEffort;else if(!n?.reasoningEffort&&e.reasoning&&r.supportsReasoningEffort){let t=e.thinkingLevelMap?.off;typeof t==`string`&&(l.reasoning_effort=t)}if(r.supportsThinkingTokenBudget&&n?.reasoningEffort&&e.reasoning){let t=m(n.reasoningEffort),r={minimal:1024,low:2048,medium:8192,high:16384,...n.thinkingBudgets},i=l.max_tokens??l.max_completion_tokens??e.maxTokens,a=Math.min(r[t],Math.max(0,i-p));a>0&&(l.thinking_token_budget=a)}if(e.compat?.openRouterRouting&&(l.provider=e.compat.openRouterRouting),e.compat?.vercelGatewayRouting){let t=e.compat.vercelGatewayRouting;if(t.only||t.order){let e={};t.only&&(e.only=t.only),t.order&&(e.order=t.order),l.providerOptions={gateway:e}}}return n?.samplingParams&&Object.assign(l,n.samplingParams),l}function B(e,t,n){let r={};for(let[i,a]of Object.entries(n)){let n=V(e,t,a);n!==void 0&&(r[i]=n)}return Object.keys(r).length>0?r:void 0}function V(e,t,n){if(typeof n!=`object`||!n)return n;let r=t?.reasoningEffort;if(!r&&n.omitWhenOff)return;if(n.$var===`thinking.enabled`)return!!r;let i=r?e.thinkingLevelMap?.[r]:e.thinkingLevelMap?.off;return i===void 0?r:typeof i==`string`?i:void 0}function H(e,t){if(e.cacheControlFormat!==`anthropic`||t===`none`)return;let n=t===`long`&&e.supportsLongCacheRetention?`1h`:void 0;return{type:`ephemeral`,...n?{ttl:n}:{}}}function U(e,t,n){W(e,n),K(t,n),G(e,n)}function W(e,t){for(let n of e)if(n.role===`system`||n.role===`developer`){q(n,t);return}}function G(e,t){for(let n=e.length-1;n>=0;n--){let r=e[n];if((r.role===`user`||r.role===`assistant`||r.role===`tool`)&&J(r,t))return}}function K(e,t){if(!e||e.length===0)return;let n=e[e.length-1];n.cache_control=t}function q(e,t){return Y(e,t)}function J(e,t){return e.role===`user`||e.role===`assistant`||e.role===`tool`?Y(e,t):!1}function Y(e,t){let n=e.content;if(typeof n==`string`)return n.length===0?!1:(e.content=[{type:`text`,text:n,cache_control:t}],!0);if(!Array.isArray(n))return!1;for(let e=n.length-1;e>=0;e--){let r=n[e];if(r?.type===`text`){let e=r;return e.cache_control=t,!0}}return!1}function X(e,t,n,r){let i=[],a=t=>{if(t.includes(`|`)){let e=t.indexOf(`|`),n=t.slice(0,e).replace(/[^a-zA-Z0-9_-]/g,`_`),r=t.slice(e+1).replace(/[^a-zA-Z0-9_-]/g,`_`),i=r.length>0?`${n}_${r}`:n;if(i.length<=40)return i;let a=w(t).slice(0,8);return`${n.slice(0,Math.max(1,40-a.length-1))}_${a}`}return e.provider===`openai`&&t.length>40?t.slice(0,40):t},o=g(t.messages,e,e=>a(e));if(t.systemPrompt){let r=e.reasoning&&n.supportsDeveloperRole?`developer`:`system`;i.push({role:r,content:s(t.systemPrompt)})}let c=null;for(let a=0;a<o.length;a++){let l=o[a];if(n.requiresAssistantAfterToolResult&&c===`toolResult`&&l.role===`user`&&i.push({role:`assistant`,content:`I have processed the tool results.`}),l.role===`user`)if(typeof l.content==`string`)i.push({role:`user`,content:s(l.content)});else{let e=l.content.map(e=>e.type===`text`?{type:`text`,text:s(e.text)}:{type:`image_url`,image_url:{url:`data:${e.mimeType};base64,${e.data}`}});if(e.length===0)continue;i.push({role:`user`,content:e})}else if(l.role===`assistant`){let t={role:`assistant`,content:n.requiresAssistantAfterToolResult?``:null},a=l.content.filter(A).filter(e=>e.text.trim().length>0).map(e=>({type:`text`,text:s(e.text)})),o=a.map(e=>e.text).join(``),c=l.content.filter(j).filter(e=>e.thinking.trim().length>0);if(c.length>0)if(n.requiresThinkingAsText)t.content=[{type:`text`,text:c.map(e=>s(e.thinking)).join(`
2
2
 
3
3
  `)},...a];else{o.length>0&&(t.content=o);let n=c[0].thinkingSignature;e.provider===`opencode-go`&&n===`reasoning`&&(n=`reasoning_content`),n&&n.length>0&&(t[n]=c.map(e=>e.thinking).join(`
4
4
  `))}else o.length>0&&(t.content=o);let u=l.content.filter(M);if(u.length>0){t.tool_calls=u.map(e=>{let t=r?.grammarToolInputProperties?.get(e.name);return t===void 0?{id:e.id,type:`function`,function:{name:e.name,arguments:JSON.stringify(e.arguments)}}:{id:e.id,type:`custom`,custom:{name:e.name,input:s(f(e.name,e.arguments,t))}}});let e=u.filter(e=>e.thoughtSignature).map(e=>{try{return JSON.parse(e.thoughtSignature)}catch{return null}}).filter(Boolean);e.length>0&&(t.reasoning_details=e)}n.requiresReasoningContentOnAssistantMessages&&e.reasoning&&t.reasoning_content===void 0&&(t.reasoning_content=``);let d=t.content;if(!(d!=null&&d.length>0)&&!t.tool_calls)continue;i.push(t)}else if(l.role===`toolResult`){let r=[],l=new Set,u=a;for(;u<o.length&&o[u].role===`toolResult`;u++){let t=o[u],a=t.content.filter(A).map(e=>e.text).join(`
@@ -1 +1 @@
1
- import{Mn as e}from"./index-C8C76R86.js";import{d as t,j as n}from"./shared-renderer-C-yYfXvq.js";import{t as r}from"./providers-BI0JpH9j.js";import{t as i}from"./realtime-DtJ0pvB9.js";import{a,i as o,o as s,t as c}from"./live-session-shared-5bFqd2uD.js";import{n as l,r as u,t as d}from"./live-session-lifecycle-Bub_Y-RB.js";function f(e,t){return a(e,t,`openai`)}function p(e){return r({provider:`openai`,id:e,api:`openai-realtime`},{realtimeAudio:!0,toolCalls:!0,preferredTransports:[`webrtc`],allowAdapters:!1})}function m(e){return/^gpt-realtime-2/i.test(e)}function h(e,t,n=[]){return{type:`realtime`,output_modalities:[`audio`],audio:{input:{format:{type:`audio/pcm`,rate:24e3},turn_detection:{type:`semantic_vad`,create_response:!0,interrupt_response:!0},transcription:{model:`gpt-4o-transcribe`}},output:{format:{type:`audio/pcm`},voice:C(e.voiceName)}},...m(e.model)?{reasoning:{effort:e.reasoningEffort}}:{},...t?{instructions:t}:{},...n.length>0?{tools:n.map(e=>({type:`function`,...e})),tool_choice:`auto`}:{}}}function g(e,t,n=[]){return{type:`session.update`,session:h(e,t,n)}}function _(e,t){return{type:`conversation.item.create`,item:{type:`function_call_output`,call_id:e,output:typeof t==`string`?t:JSON.stringify(t)}}}function v(e){return{type:`conversation.item.create`,item:{type:`message`,role:`user`,content:[{type:`input_image`,image_url:e}]}}}function y(e,t){return e.readyState===`open`?Promise.resolve():e.readyState===`closing`||e.readyState===`closed`?Promise.reject(Error(`The Realtime image channel is closed.`)):t?.aborted?Promise.reject(new DOMException(`Aborted`,`AbortError`)):new Promise((n,r)=>{let i=()=>{e.removeEventListener(`open`,o),e.removeEventListener(`close`,s),e.removeEventListener(`error`,c),t?.removeEventListener(`abort`,l)},a=e=>{i(),e()},o=()=>a(n),s=()=>a(()=>r(Error(`The Realtime image channel closed before the image was sent.`))),c=()=>a(()=>r(Error(`The Realtime image channel could not send the image.`))),l=()=>a(()=>r(new DOMException(`Aborted`,`AbortError`)));e.addEventListener(`open`,o,{once:!0}),e.addEventListener(`close`,s,{once:!0}),e.addEventListener(`error`,c,{once:!0}),t?.addEventListener(`abort`,l,{once:!0})})}function b(e){return{type:`conversation.item.create`,item:{type:`message`,role:e.role,content:[{type:e.role===`assistant`?`output_text`:`input_text`,text:e.text}]}}}var x=n(`openai-realtime`),S=[`alloy`,`ash`,`ballad`,`cedar`,`coral`,`echo`,`marin`,`sage`,`shimmer`,`verse`];function C(e){let t=(e??``).trim().toLowerCase();return S.includes(t)?t:`marin`}async function w(t,n,r,i){let a=await(await e(async()=>{let e=await fetch(`https://api.openai.com/v1/realtime/client_secrets`,{method:`POST`,headers:{"Content-Type":`application/json`,Authorization:`Bearer ${t}`},body:JSON.stringify({session:{type:`realtime`,model:n,audio:{output:{voice:r}}}}),signal:i});if(!e.ok){let t=await e.text().catch(()=>``),n=e.headers.get(`retry-after`);throw Error(`Realtime session mint failed (${e.status}): ${t.slice(0,200)||e.statusText}${n?` retry-after: ${n}`:``}`)}return e},{signal:i})).json(),o=a.value??a.client_secret?.value;if(!o)throw Error(`Realtime session mint returned no ephemeral secret value`);return o}async function T(t,n,r,i){return await(await e(async()=>{let e=r===null?t:(()=>{let e=new FormData;return e.set(`sdp`,t),e.set(`session`,JSON.stringify(r)),e})(),a=await fetch(`https://api.openai.com/v1/realtime/calls`,{method:`POST`,headers:{Authorization:`Bearer ${n}`,...r===null?{"Content-Type":`application/sdp`}:{}},body:e,signal:i});if(!a.ok){let e=await a.text().catch(()=>``),t=a.headers.get(`retry-after`);throw Error(`Realtime SDP exchange failed (${a.status})${e?`: ${e.slice(0,200)}`:``}${t?` retry-after: ${t}`:``}`)}return a},{signal:i})).text()}async function E(e){if(typeof navigator>`u`||!navigator.mediaDevices?.getUserMedia)return null;try{let t=await navigator.mediaDevices.getUserMedia({audio:!0});return t.getAudioTracks().forEach(n=>e.addTrack(n,t)),t}catch(e){return console.warn(`[keating:realtime] microphone unavailable`,e),null}}async function D(e){let{utterance:n,settings:r,getApiKey:i,signal:a}=e,o=await i(`openai`);if(!o)throw Error(`No OpenAI API key configured. Add one in Settings → Providers & Models.`);let s=await w(o,r.model||`gpt-realtime-2.1`,C(n.voice||r.voiceName),a),c=new RTCPeerConnection,l=typeof document<`u`?document.createElement(`audio`):null;l&&(l.autoplay=!0,l.style.display=`none`,document.body.appendChild(l));let u=0,f=0,p=null,m=!1,h=()=>{},g=()=>{if(!m){m=!0,h();try{c.close()}catch{}if(p?.getTracks().forEach(e=>e.stop()),l){try{l.pause()}catch{}l.srcObject=null,l.remove()}}};if(a?.aborted)throw g(),Error(`OpenAI Realtime aborted before start.`);h=d(a,g),c.ontrack=e=>{u+=1,l&&e.streams[0]&&(l.srcObject=e.streams[0],l.play().then(()=>{f+=1}).catch(()=>{}))};let _=c.createDataChannel(`oai-events`);return r.microphoneEnabled&&(p=await E(c)),await new Promise(async(e,i)=>{let o=setTimeout(()=>{g(),i(Error(`OpenAI Realtime response timed out.`))},6e4);_.addEventListener(`open`,()=>{_.send(JSON.stringify({type:`response.create`,response:{output_modalities:[`audio`],instructions:`Speak this learner-facing line exactly. Affect: ${n.affect}. Pace: ${n.pace}.\n\n${n.text}`}}))}),_.addEventListener(`message`,t=>{try{let a=JSON.parse(t.data);a.type===`response.done`&&(clearTimeout(o),g(),e({audioChunks:u,playedChunks:f,transcript:n.text,warning:r.microphoneEnabled&&!p?`Microphone unavailable`:void 0})),a.type===`error`&&(clearTimeout(o),g(),i(Error(`Realtime error: ${a.error?.message??`unknown`}`)))}catch{}});try{t();let e=await c.createOffer();await c.setLocalDescription(e);let n=await T(e.sdp??``,s,null,a);await c.setRemoteDescription({type:`answer`,sdp:n})}catch(e){clearTimeout(o),g(),i(e)}})}async function O(e,n){let{settings:r,getApiKey:a,signal:d,instructions:m,tools:x,history:S,onToolCall:D,onState:O,onUserTranscript:k,onAssistantTranscript:A,onError:j}=e,M=i(n),N=c(e.onConversationEvent,e.conversationIds),P=M.start();M.emit(`connection.setup.started`,{provider:`openai`,model:r.model||`gpt-realtime-2.1`,transport:`webrtc`});let F=p(r.model||`gpt-realtime-2.1`);if(F.realtimeAudio!==`native`||F.transport!==`webrtc`||F.toolCalls!==`native`)throw M.emit(`session.error`,{provider:`openai`,errorCode:`capability_mismatch`}),M.emit(`session.completed`,{provider:`openai`,outcome:`error`}),Error(`OpenAI Realtime model ${r.model} cannot satisfy duplex WebRTC and native tool-call requirements.`);let I=F.capabilities.realtimeImage===`native`;N.emit(`run.started`,{mode:`voice`});let L=await a(`openai`);if(!L){let e=Error(`No OpenAI API key configured. Add one in Settings → Providers & Models.`);throw M.emit(`session.error`,{provider:`openai`,errorCode:`missing_api_key`}),M.emit(`session.completed`,{provider:`openai`,outcome:`error`}),N.emit(`error`,{error:f(e,`missing_api_key`),fatal:!0}),N.emit(`run.completed`,{reason:`error`}),e}let R=r.model||`gpt-realtime-2.1`,z=C(r.voiceName),B=0,V=u({provider:`openai`,transport:`webrtc`,telemetry:M,setupStartedAt:P}),H;try{H=await w(L,R,z,d)}catch(e){throw M.emit(`connection.setup.completed`,{provider:`openai`,model:R,transport:`webrtc`,outcome:`failed`},M.durationSince(P)),M.emit(`session.error`,{provider:`openai`,errorCode:`ephemeral_key_failed`}),N.emit(`error`,{error:f(e,`ephemeral_key_failed`),fatal:!0}),N.emit(`run.completed`,{reason:`error`}),M.emit(`session.completed`,{provider:`openai`,outcome:`error`}),e}let U=new RTCPeerConnection,W=typeof document<`u`?document.createElement(`audio`):null;W&&(W.autoplay=!0,W.style.display=`none`,document.body.appendChild(W));let G=null,K=l({signal:d,onState:O,onAbort:e=>{N.emit(`conversation.interrupted`,{by:`host`,reason:e?`abort signal before start`:`abort signal`}),M.emit(`speech.interrupted`,{provider:`openai`,reason:`abort`,turn:V.turn})},onComplete:e=>{N.emit(`run.completed`,{reason:e}),M.emit(`session.completed`,{provider:`openai`,outcome:e})}});if(K.addCleanup(()=>{try{U.close()}catch{}if(G?.getTracks().forEach(e=>e.stop()),W){try{W.pause()}catch{}W.srcObject=null,W.remove()}}),!K.start())throw Error(`OpenAI Realtime aborted before start.`);U.ontrack=e=>{W&&e.streams[0]&&(W.srcObject=e.streams[0],W.play().catch(()=>{}))},U.addEventListener(`connectionstatechange`,()=>{if(U.connectionState===`disconnected`)B+=1,M.emit(`reconnect.started`,{provider:`openai`,attempt:B}),N.emit(`reconnect.started`,{attempt:B,reason:`WebRTC transport disconnected`});else if(U.connectionState===`connected`&&B>0)M.emit(`reconnect.completed`,{provider:`openai`,attempt:B,outcome:`success`}),N.emit(`reconnect.succeeded`,{attempt:B}),B=0;else if(U.connectionState===`failed`){M.emit(`reconnect.completed`,{provider:`openai`,attempt:Math.max(1,B),outcome:`failed`}),M.emit(`session.error`,{provider:`openai`,errorCode:`webrtc_connection_failed`});let e=f(Error(`WebRTC transport failed`),`webrtc_connection_failed`);N.emit(`reconnect.failed`,{attempt:Math.max(1,B),error:e,retryable:!1}),N.emit(`error`,{error:e,fatal:!0}),K.complete(`error`)}});let q=U.createDataChannel(`oai-events`),J=!1,Y=x??[];if(G=await E(U),!G){let e=Error(`Microphone unavailable for live voice.`);throw M.emit(`connection.setup.completed`,{provider:`openai`,model:R,transport:`webrtc`,outcome:`failed`},M.durationSince(P)),M.emit(`session.error`,{provider:`openai`,errorCode:`microphone_unavailable`}),N.emit(`error`,{error:f(e,`microphone_unavailable`),fatal:!0}),K.close(`error`),e}let X=e=>{if(q.readyState===`open`)try{q.send(JSON.stringify(e))}catch(e){console.warn(`[keating:realtime] send failed`,e)}};q.addEventListener(`open`,()=>{X(g(r,m,Y));for(let e of S??[])e.text.trim()&&X(b(e));K.setState(`listening`),M.emit(`connection.setup.completed`,{provider:`openai`,model:R,transport:`webrtc`,outcome:`success`},M.durationSince(P))}),q.addEventListener(`message`,e=>{try{let t=JSON.parse(e.data);switch(t.type){case`input_audio_buffer.speech_started`:V.startTurn(),J&&(q.send(JSON.stringify({type:`response.cancel`})),q.send(JSON.stringify({type:`output_audio_buffer.clear`})),J=!1,N.emit(`conversation.interrupted`,{by:`user`,reason:`barge-in`}),M.emit(`speech.interrupted`,{provider:`openai`,reason:`barge-in`,turn:V.turn})),K.setState(`listening`);break;case`response.created`:J=!0;break;case`response.output_audio.delta`:case`response.audio.delta`:V.observeFirstAudio(),K.setState(`speaking`),typeof t.delta==`string`&&N.emit(`audio.delta`,{streamId:typeof t.item_id==`string`?`assistant-audio-${t.item_id}`:`assistant-audio`,messageId:typeof t.item_id==`string`?t.item_id:void 0,role:`assistant`,encoding:`pcm16`,sampleRate:24e3,data:t.delta});break;case`response.audio_transcript.delta`:case`response.output_audio_transcript.delta`:A?.(typeof t.delta==`string`?t.delta:``,!1),N.emit(`transcript.delta`,{transcriptId:typeof t.item_id==`string`?`assistant-transcript-${t.item_id}`:`assistant-transcript`,messageId:typeof t.item_id==`string`?t.item_id:void 0,role:`assistant`,delta:typeof t.delta==`string`?t.delta:``,final:!1});break;case`response.audio_transcript.done`:case`response.output_audio_transcript.done`:A?.(typeof t.transcript==`string`?t.transcript:``,!0),N.emit(`transcript.delta`,{transcriptId:typeof t.item_id==`string`?`assistant-transcript-${t.item_id}`:`assistant-transcript`,messageId:typeof t.item_id==`string`?t.item_id:void 0,role:`assistant`,delta:``,final:!0}),typeof t.item_id==`string`&&N.emit(`message.completed`,{messageId:t.item_id});break;case`conversation.item.input_audio_transcription.delta`:k?.(typeof t.delta==`string`?t.delta:``,!1),N.emit(`transcript.delta`,{transcriptId:typeof t.item_id==`string`?`user-transcript-${t.item_id}`:`user-transcript`,messageId:typeof t.item_id==`string`?t.item_id:void 0,role:`user`,delta:typeof t.delta==`string`?t.delta:``,final:!1});break;case`conversation.item.input_audio_transcription.completed`:k?.(typeof t.transcript==`string`?t.transcript:``,!0),N.emit(`transcript.delta`,{transcriptId:typeof t.item_id==`string`?`user-transcript-${t.item_id}`:`user-transcript`,messageId:typeof t.item_id==`string`?t.item_id:void 0,role:`user`,delta:``,final:!0}),typeof t.item_id==`string`&&N.emit(`message.completed`,{messageId:t.item_id});break;case`response.done`:J=!1,K.setState(`listening`),V.completeTurn();break;case`response.function_call_arguments.done`:if(typeof t.name!=`string`||typeof t.call_id!=`string`)break;s({call:{callId:t.call_id,name:t.name,arguments:o(t.arguments)},provider:`openai`,canonical:N,telemetry:M,execute:async e=>{if(!D)throw Error(`No handler is available for tool ${e.name}.`);return await D(e)},respond:(e,t)=>{X(_(e,t)),X({type:`response.create`})},respondError:(e,t)=>{X(_(e,{error:t})),X({type:`response.create`})}});break;case`error`:{let e=Error(`Realtime error: ${t.error?.message??`unknown`}`);j?.(e),N.emit(`error`,{error:f(e,`provider_error`),fatal:!1}),M.emit(`session.error`,{provider:`openai`,errorCode:`provider_error`})}break}}catch(e){N.emit(`error`,{error:f(e,`invalid_provider_event`),fatal:!1}),M.emit(`session.error`,{provider:`openai`,errorCode:`invalid_provider_event`})}});try{t();let e=await U.createOffer();await U.setLocalDescription(e);let n=await T(e.sdp??``,H,h(r,m,Y),d);await U.setRemoteDescription({type:`answer`,sdp:n})}catch(e){throw M.emit(`connection.setup.completed`,{provider:`openai`,model:R,transport:`webrtc`,outcome:`failed`},M.durationSince(P)),M.emit(`session.error`,{provider:`openai`,errorCode:`session_setup_failed`}),N.emit(`error`,{error:f(e,`session_setup_failed`),fatal:!0}),K.close(`error`),e}return{get state(){return K.state},videoRoute:`none`,videoCapable:!1,imageCapable:I,get inputStream(){return G},setMicrophoneMuted(e){G?.getAudioTracks().forEach(t=>{t.enabled=!e})},async sendImage(e){if(!I)throw Error(`${R} cannot accept image input.`);if(!e.data)throw Error(`The selected image is empty.`);if(await y(q,d),K.state===`closed`)throw Error(`The Realtime session is closed.`);let t=`data:${e.mimeType};base64,${e.data}`;try{q.send(JSON.stringify(v(t)))}catch(e){throw Error(`OpenAI Realtime could not accept the image payload.`,{cause:e})}},async stop(){K.close(`cancelled`)}}}var k={id:`openai-realtime`,label:`OpenAI Realtime`,kind:`duplex`,status:`preview`,description:`WebRTC duplex voice with OpenAI Realtime. Live bidirectional voice sessions with continuous turn detection.`,models:x,voices:S,needsApiKey:`openai`,synthesize:D};function A(e){return{...k,startLiveSession:t=>O(t,e)}}var j=A();export{h as buildRealtimeSessionConfig,g as buildRealtimeSessionUpdate,A as createOpenAIRealtimeProvider,c as createRealtimeCanonicalBridge,p as negotiateOpenAIRealtimeSession,j as openAIRealtimeProvider,_ as realtimeFunctionOutput,b as realtimeHistoryItem,v as realtimeImageItem,y as waitForRealtimeDataChannel};
1
+ import{Mn as e}from"./index-DCgpDQKf.js";import{d as t,j as n}from"./shared-renderer-hMxAoPZb.js";import{t as r}from"./providers-BI0JpH9j.js";import{t as i}from"./realtime-DtJ0pvB9.js";import{a,i as o,o as s,t as c}from"./live-session-shared-5bFqd2uD.js";import{n as l,r as u,t as d}from"./live-session-lifecycle-Bub_Y-RB.js";function f(e,t){return a(e,t,`openai`)}function p(e){return r({provider:`openai`,id:e,api:`openai-realtime`},{realtimeAudio:!0,toolCalls:!0,preferredTransports:[`webrtc`],allowAdapters:!1})}function m(e){return/^gpt-realtime-2/i.test(e)}function h(e,t,n=[]){return{type:`realtime`,output_modalities:[`audio`],audio:{input:{format:{type:`audio/pcm`,rate:24e3},turn_detection:{type:`semantic_vad`,create_response:!0,interrupt_response:!0},transcription:{model:`gpt-4o-transcribe`}},output:{format:{type:`audio/pcm`},voice:C(e.voiceName)}},...m(e.model)?{reasoning:{effort:e.reasoningEffort}}:{},...t?{instructions:t}:{},...n.length>0?{tools:n.map(e=>({type:`function`,...e})),tool_choice:`auto`}:{}}}function g(e,t,n=[]){return{type:`session.update`,session:h(e,t,n)}}function _(e,t){return{type:`conversation.item.create`,item:{type:`function_call_output`,call_id:e,output:typeof t==`string`?t:JSON.stringify(t)}}}function v(e){return{type:`conversation.item.create`,item:{type:`message`,role:`user`,content:[{type:`input_image`,image_url:e}]}}}function y(e,t){return e.readyState===`open`?Promise.resolve():e.readyState===`closing`||e.readyState===`closed`?Promise.reject(Error(`The Realtime image channel is closed.`)):t?.aborted?Promise.reject(new DOMException(`Aborted`,`AbortError`)):new Promise((n,r)=>{let i=()=>{e.removeEventListener(`open`,o),e.removeEventListener(`close`,s),e.removeEventListener(`error`,c),t?.removeEventListener(`abort`,l)},a=e=>{i(),e()},o=()=>a(n),s=()=>a(()=>r(Error(`The Realtime image channel closed before the image was sent.`))),c=()=>a(()=>r(Error(`The Realtime image channel could not send the image.`))),l=()=>a(()=>r(new DOMException(`Aborted`,`AbortError`)));e.addEventListener(`open`,o,{once:!0}),e.addEventListener(`close`,s,{once:!0}),e.addEventListener(`error`,c,{once:!0}),t?.addEventListener(`abort`,l,{once:!0})})}function b(e){return{type:`conversation.item.create`,item:{type:`message`,role:e.role,content:[{type:e.role===`assistant`?`output_text`:`input_text`,text:e.text}]}}}var x=n(`openai-realtime`),S=[`alloy`,`ash`,`ballad`,`cedar`,`coral`,`echo`,`marin`,`sage`,`shimmer`,`verse`];function C(e){let t=(e??``).trim().toLowerCase();return S.includes(t)?t:`marin`}async function w(t,n,r,i){let a=await(await e(async()=>{let e=await fetch(`https://api.openai.com/v1/realtime/client_secrets`,{method:`POST`,headers:{"Content-Type":`application/json`,Authorization:`Bearer ${t}`},body:JSON.stringify({session:{type:`realtime`,model:n,audio:{output:{voice:r}}}}),signal:i});if(!e.ok){let t=await e.text().catch(()=>``),n=e.headers.get(`retry-after`);throw Error(`Realtime session mint failed (${e.status}): ${t.slice(0,200)||e.statusText}${n?` retry-after: ${n}`:``}`)}return e},{signal:i})).json(),o=a.value??a.client_secret?.value;if(!o)throw Error(`Realtime session mint returned no ephemeral secret value`);return o}async function T(t,n,r,i){return await(await e(async()=>{let e=r===null?t:(()=>{let e=new FormData;return e.set(`sdp`,t),e.set(`session`,JSON.stringify(r)),e})(),a=await fetch(`https://api.openai.com/v1/realtime/calls`,{method:`POST`,headers:{Authorization:`Bearer ${n}`,...r===null?{"Content-Type":`application/sdp`}:{}},body:e,signal:i});if(!a.ok){let e=await a.text().catch(()=>``),t=a.headers.get(`retry-after`);throw Error(`Realtime SDP exchange failed (${a.status})${e?`: ${e.slice(0,200)}`:``}${t?` retry-after: ${t}`:``}`)}return a},{signal:i})).text()}async function E(e){if(typeof navigator>`u`||!navigator.mediaDevices?.getUserMedia)return null;try{let t=await navigator.mediaDevices.getUserMedia({audio:!0});return t.getAudioTracks().forEach(n=>e.addTrack(n,t)),t}catch(e){return console.warn(`[keating:realtime] microphone unavailable`,e),null}}async function D(e){let{utterance:n,settings:r,getApiKey:i,signal:a}=e,o=await i(`openai`);if(!o)throw Error(`No OpenAI API key configured. Add one in Settings → Providers & Models.`);let s=await w(o,r.model||`gpt-realtime-2.1`,C(n.voice||r.voiceName),a),c=new RTCPeerConnection,l=typeof document<`u`?document.createElement(`audio`):null;l&&(l.autoplay=!0,l.style.display=`none`,document.body.appendChild(l));let u=0,f=0,p=null,m=!1,h=()=>{},g=()=>{if(!m){m=!0,h();try{c.close()}catch{}if(p?.getTracks().forEach(e=>e.stop()),l){try{l.pause()}catch{}l.srcObject=null,l.remove()}}};if(a?.aborted)throw g(),Error(`OpenAI Realtime aborted before start.`);h=d(a,g),c.ontrack=e=>{u+=1,l&&e.streams[0]&&(l.srcObject=e.streams[0],l.play().then(()=>{f+=1}).catch(()=>{}))};let _=c.createDataChannel(`oai-events`);return r.microphoneEnabled&&(p=await E(c)),await new Promise(async(e,i)=>{let o=setTimeout(()=>{g(),i(Error(`OpenAI Realtime response timed out.`))},6e4);_.addEventListener(`open`,()=>{_.send(JSON.stringify({type:`response.create`,response:{output_modalities:[`audio`],instructions:`Speak this learner-facing line exactly. Affect: ${n.affect}. Pace: ${n.pace}.\n\n${n.text}`}}))}),_.addEventListener(`message`,t=>{try{let a=JSON.parse(t.data);a.type===`response.done`&&(clearTimeout(o),g(),e({audioChunks:u,playedChunks:f,transcript:n.text,warning:r.microphoneEnabled&&!p?`Microphone unavailable`:void 0})),a.type===`error`&&(clearTimeout(o),g(),i(Error(`Realtime error: ${a.error?.message??`unknown`}`)))}catch{}});try{t();let e=await c.createOffer();await c.setLocalDescription(e);let n=await T(e.sdp??``,s,null,a);await c.setRemoteDescription({type:`answer`,sdp:n})}catch(e){clearTimeout(o),g(),i(e)}})}async function O(e,n){let{settings:r,getApiKey:a,signal:d,instructions:m,tools:x,history:S,onToolCall:D,onState:O,onUserTranscript:k,onAssistantTranscript:A,onError:j}=e,M=i(n),N=c(e.onConversationEvent,e.conversationIds),P=M.start();M.emit(`connection.setup.started`,{provider:`openai`,model:r.model||`gpt-realtime-2.1`,transport:`webrtc`});let F=p(r.model||`gpt-realtime-2.1`);if(F.realtimeAudio!==`native`||F.transport!==`webrtc`||F.toolCalls!==`native`)throw M.emit(`session.error`,{provider:`openai`,errorCode:`capability_mismatch`}),M.emit(`session.completed`,{provider:`openai`,outcome:`error`}),Error(`OpenAI Realtime model ${r.model} cannot satisfy duplex WebRTC and native tool-call requirements.`);let I=F.capabilities.realtimeImage===`native`;N.emit(`run.started`,{mode:`voice`});let L=await a(`openai`);if(!L){let e=Error(`No OpenAI API key configured. Add one in Settings → Providers & Models.`);throw M.emit(`session.error`,{provider:`openai`,errorCode:`missing_api_key`}),M.emit(`session.completed`,{provider:`openai`,outcome:`error`}),N.emit(`error`,{error:f(e,`missing_api_key`),fatal:!0}),N.emit(`run.completed`,{reason:`error`}),e}let R=r.model||`gpt-realtime-2.1`,z=C(r.voiceName),B=0,V=u({provider:`openai`,transport:`webrtc`,telemetry:M,setupStartedAt:P}),H;try{H=await w(L,R,z,d)}catch(e){throw M.emit(`connection.setup.completed`,{provider:`openai`,model:R,transport:`webrtc`,outcome:`failed`},M.durationSince(P)),M.emit(`session.error`,{provider:`openai`,errorCode:`ephemeral_key_failed`}),N.emit(`error`,{error:f(e,`ephemeral_key_failed`),fatal:!0}),N.emit(`run.completed`,{reason:`error`}),M.emit(`session.completed`,{provider:`openai`,outcome:`error`}),e}let U=new RTCPeerConnection,W=typeof document<`u`?document.createElement(`audio`):null;W&&(W.autoplay=!0,W.style.display=`none`,document.body.appendChild(W));let G=null,K=l({signal:d,onState:O,onAbort:e=>{N.emit(`conversation.interrupted`,{by:`host`,reason:e?`abort signal before start`:`abort signal`}),M.emit(`speech.interrupted`,{provider:`openai`,reason:`abort`,turn:V.turn})},onComplete:e=>{N.emit(`run.completed`,{reason:e}),M.emit(`session.completed`,{provider:`openai`,outcome:e})}});if(K.addCleanup(()=>{try{U.close()}catch{}if(G?.getTracks().forEach(e=>e.stop()),W){try{W.pause()}catch{}W.srcObject=null,W.remove()}}),!K.start())throw Error(`OpenAI Realtime aborted before start.`);U.ontrack=e=>{W&&e.streams[0]&&(W.srcObject=e.streams[0],W.play().catch(()=>{}))},U.addEventListener(`connectionstatechange`,()=>{if(U.connectionState===`disconnected`)B+=1,M.emit(`reconnect.started`,{provider:`openai`,attempt:B}),N.emit(`reconnect.started`,{attempt:B,reason:`WebRTC transport disconnected`});else if(U.connectionState===`connected`&&B>0)M.emit(`reconnect.completed`,{provider:`openai`,attempt:B,outcome:`success`}),N.emit(`reconnect.succeeded`,{attempt:B}),B=0;else if(U.connectionState===`failed`){M.emit(`reconnect.completed`,{provider:`openai`,attempt:Math.max(1,B),outcome:`failed`}),M.emit(`session.error`,{provider:`openai`,errorCode:`webrtc_connection_failed`});let e=f(Error(`WebRTC transport failed`),`webrtc_connection_failed`);N.emit(`reconnect.failed`,{attempt:Math.max(1,B),error:e,retryable:!1}),N.emit(`error`,{error:e,fatal:!0}),K.complete(`error`)}});let q=U.createDataChannel(`oai-events`),J=!1,Y=x??[];if(G=await E(U),!G){let e=Error(`Microphone unavailable for live voice.`);throw M.emit(`connection.setup.completed`,{provider:`openai`,model:R,transport:`webrtc`,outcome:`failed`},M.durationSince(P)),M.emit(`session.error`,{provider:`openai`,errorCode:`microphone_unavailable`}),N.emit(`error`,{error:f(e,`microphone_unavailable`),fatal:!0}),K.close(`error`),e}let X=e=>{if(q.readyState===`open`)try{q.send(JSON.stringify(e))}catch(e){console.warn(`[keating:realtime] send failed`,e)}};q.addEventListener(`open`,()=>{X(g(r,m,Y));for(let e of S??[])e.text.trim()&&X(b(e));K.setState(`listening`),M.emit(`connection.setup.completed`,{provider:`openai`,model:R,transport:`webrtc`,outcome:`success`},M.durationSince(P))}),q.addEventListener(`message`,e=>{try{let t=JSON.parse(e.data);switch(t.type){case`input_audio_buffer.speech_started`:V.startTurn(),J&&(q.send(JSON.stringify({type:`response.cancel`})),q.send(JSON.stringify({type:`output_audio_buffer.clear`})),J=!1,N.emit(`conversation.interrupted`,{by:`user`,reason:`barge-in`}),M.emit(`speech.interrupted`,{provider:`openai`,reason:`barge-in`,turn:V.turn})),K.setState(`listening`);break;case`response.created`:J=!0;break;case`response.output_audio.delta`:case`response.audio.delta`:V.observeFirstAudio(),K.setState(`speaking`),typeof t.delta==`string`&&N.emit(`audio.delta`,{streamId:typeof t.item_id==`string`?`assistant-audio-${t.item_id}`:`assistant-audio`,messageId:typeof t.item_id==`string`?t.item_id:void 0,role:`assistant`,encoding:`pcm16`,sampleRate:24e3,data:t.delta});break;case`response.audio_transcript.delta`:case`response.output_audio_transcript.delta`:A?.(typeof t.delta==`string`?t.delta:``,!1),N.emit(`transcript.delta`,{transcriptId:typeof t.item_id==`string`?`assistant-transcript-${t.item_id}`:`assistant-transcript`,messageId:typeof t.item_id==`string`?t.item_id:void 0,role:`assistant`,delta:typeof t.delta==`string`?t.delta:``,final:!1});break;case`response.audio_transcript.done`:case`response.output_audio_transcript.done`:A?.(typeof t.transcript==`string`?t.transcript:``,!0),N.emit(`transcript.delta`,{transcriptId:typeof t.item_id==`string`?`assistant-transcript-${t.item_id}`:`assistant-transcript`,messageId:typeof t.item_id==`string`?t.item_id:void 0,role:`assistant`,delta:``,final:!0}),typeof t.item_id==`string`&&N.emit(`message.completed`,{messageId:t.item_id});break;case`conversation.item.input_audio_transcription.delta`:k?.(typeof t.delta==`string`?t.delta:``,!1),N.emit(`transcript.delta`,{transcriptId:typeof t.item_id==`string`?`user-transcript-${t.item_id}`:`user-transcript`,messageId:typeof t.item_id==`string`?t.item_id:void 0,role:`user`,delta:typeof t.delta==`string`?t.delta:``,final:!1});break;case`conversation.item.input_audio_transcription.completed`:k?.(typeof t.transcript==`string`?t.transcript:``,!0),N.emit(`transcript.delta`,{transcriptId:typeof t.item_id==`string`?`user-transcript-${t.item_id}`:`user-transcript`,messageId:typeof t.item_id==`string`?t.item_id:void 0,role:`user`,delta:``,final:!0}),typeof t.item_id==`string`&&N.emit(`message.completed`,{messageId:t.item_id});break;case`response.done`:J=!1,K.setState(`listening`),V.completeTurn();break;case`response.function_call_arguments.done`:if(typeof t.name!=`string`||typeof t.call_id!=`string`)break;s({call:{callId:t.call_id,name:t.name,arguments:o(t.arguments)},provider:`openai`,canonical:N,telemetry:M,execute:async e=>{if(!D)throw Error(`No handler is available for tool ${e.name}.`);return await D(e)},respond:(e,t)=>{X(_(e,t)),X({type:`response.create`})},respondError:(e,t)=>{X(_(e,{error:t})),X({type:`response.create`})}});break;case`error`:{let e=Error(`Realtime error: ${t.error?.message??`unknown`}`);j?.(e),N.emit(`error`,{error:f(e,`provider_error`),fatal:!1}),M.emit(`session.error`,{provider:`openai`,errorCode:`provider_error`})}break}}catch(e){N.emit(`error`,{error:f(e,`invalid_provider_event`),fatal:!1}),M.emit(`session.error`,{provider:`openai`,errorCode:`invalid_provider_event`})}});try{t();let e=await U.createOffer();await U.setLocalDescription(e);let n=await T(e.sdp??``,H,h(r,m,Y),d);await U.setRemoteDescription({type:`answer`,sdp:n})}catch(e){throw M.emit(`connection.setup.completed`,{provider:`openai`,model:R,transport:`webrtc`,outcome:`failed`},M.durationSince(P)),M.emit(`session.error`,{provider:`openai`,errorCode:`session_setup_failed`}),N.emit(`error`,{error:f(e,`session_setup_failed`),fatal:!0}),K.close(`error`),e}return{get state(){return K.state},videoRoute:`none`,videoCapable:!1,imageCapable:I,get inputStream(){return G},setMicrophoneMuted(e){G?.getAudioTracks().forEach(t=>{t.enabled=!e})},async sendImage(e){if(!I)throw Error(`${R} cannot accept image input.`);if(!e.data)throw Error(`The selected image is empty.`);if(await y(q,d),K.state===`closed`)throw Error(`The Realtime session is closed.`);let t=`data:${e.mimeType};base64,${e.data}`;try{q.send(JSON.stringify(v(t)))}catch(e){throw Error(`OpenAI Realtime could not accept the image payload.`,{cause:e})}},async stop(){K.close(`cancelled`)}}}var k={id:`openai-realtime`,label:`OpenAI Realtime`,kind:`duplex`,status:`preview`,description:`WebRTC duplex voice with OpenAI Realtime. Live bidirectional voice sessions with continuous turn detection.`,models:x,voices:S,needsApiKey:`openai`,synthesize:D};function A(e){return{...k,startLiveSession:t=>O(t,e)}}var j=A();export{h as buildRealtimeSessionConfig,g as buildRealtimeSessionUpdate,A as createOpenAIRealtimeProvider,c as createRealtimeCanonicalBridge,p as negotiateOpenAIRealtimeSession,j as openAIRealtimeProvider,_ as realtimeFunctionOutput,b as realtimeHistoryItem,v as realtimeImageItem,y as waitForRealtimeDataChannel};
@@ -1 +1 @@
1
- import{t as e}from"./event-stream-qbAZIAKV.js";import{mr as t,yr as n}from"./index-C8C76R86.js";import{t as r}from"./deferred-tools-C1IEsG5C.js";import{t as i}from"./headers-CbDaTl3c.js";import{t as a}from"./provider-retry-DLGw8C1A.js";import{c as o,i as s}from"./transform-messages-CjZBscG6.js";import{n as c,t as l}from"./github-copilot-headers-DRgtIyTm.js";import{n as u}from"./openai-Dlbx6jgy.js";import{n as d,t as f}from"./error-body-pkrba6pf.js";import{t as p}from"./openai-prompt-cache-DXo9f3w5.js";import{n as m,r as h,t as g}from"./openai-responses-shared-CHf6ek3_.js";var _=new Set([`openai`,`openai-codex`,`opencode`]),v=16;function y(e,t){if(!e)return!1;let n=t.toLowerCase();for(let[t,r]of Object.entries(e))if(t.toLowerCase()===n&&r!==null&&r.trim().length>0)return!0;return!1}function b(e,t,n){if(t)return t;if(y(n,`authorization`)||y(n,`cf-aig-authorization`))return`unused`;throw Error(`No API key for provider: ${e}`)}function x(e){return e.provider===`openrouter`||e.baseUrl.includes(`openrouter.ai`)?`openrouter`:`openai`}function S(e,t){return e||(n(`PI_CACHE_RETENTION`,t)===`long`?`long`:`short`)}function C(e){return{supportsDeveloperRole:e.compat?.supportsDeveloperRole??!0,sessionAffinityFormat:e.compat?.sessionAffinityFormat??x(e),supportsLongCacheRetention:e.compat?.supportsLongCacheRetention??!0,supportsStrictMode:e.compat?.supportsStrictMode??!1,supportsOpenAIGrammarTools:e.compat?.supportsOpenAIGrammarTools??!1,supportsAdditionalTools:e.compat?.supportsAdditionalTools??!1,supportsToolSearch:e.compat?.supportsToolSearch??!1,supportsExplicitPromptCacheMode:e.compat?.supportsExplicitPromptCacheMode??!1}}function w(e,t){return t===`long`&&e.supportsLongCacheRetention?`24h`:void 0}function T(e){return f(d(e),`OpenAI API error`)}var E=(t,n,r)=>{let s=new e;return(async()=>{let e={role:`assistant`,content:[],api:t.api,provider:t.provider,model:t.id,usage:{input:0,output:0,cacheRead:0,cacheWrite:0,totalTokens:0,cost:{input:0,output:0,cacheRead:0,cacheWrite:0,total:0}},stopReason:`pending`,timestamp:Date.now()};try{let c=b(t.provider,r?.apiKey,r?.headers),l=S(r?.cacheRetention,r?.env)===`none`?void 0:r?.sessionId,u=C(t),d=o(n.tools,u.supportsOpenAIGrammarTools),f=O(t,n,c,r?.headers,r?.fetch,l),p=k(t,n,r,u,d),m=await r?.onPayload?.(p,t);m!==void 0&&(p=m);let g={...r?.signal?{signal:r.signal}:{},...r?.timeoutMs===void 0?{}:{timeout:r.timeoutMs},maxRetries:0},{data:_,response:v}=await a(()=>f.responses.create(p,g).withResponse(),{maxRetries:r?.maxRetries,maxRetryDelayMs:r?.maxRetryDelayMs,signal:r?.signal});if(await r?.onResponse?.({status:v.status,headers:i(v.headers)},t),s.push({type:`start`,partial:e}),await h(_,e,s,t,{serviceTier:r?.serviceTier,grammarToolInputProperties:d,applyServiceTierPricing:(e,n)=>j(e,n,t)}),r?.signal?.aborted)throw Error(`Request was aborted`);if(e.stopReason===`pending`)throw Error(`OpenAI Responses stream ended without a stop reason`);if(e.stopReason===`aborted`||e.stopReason===`error`)throw Error(e.errorMessage||`An unknown error occurred`);s.push({type:`done`,reason:e.stopReason,message:e}),s.end()}catch(t){for(let t of e.content)delete t.index,delete t.partialJson,delete t.customInput;e.stopReason=r?.signal?.aborted?`aborted`:`error`,e.errorMessage=T(t),s.push({type:`error`,reason:e.stopReason,error:e}),s.end()}})(),s},D=(e,n,r)=>{b(e.provider,r?.apiKey,r?.headers);let i=s(e,n,r,r?.apiKey),a=r?.reasoning?t(e,r.reasoning):void 0,o=a===`off`?void 0:a;return E(e,n,{...i,reasoningEffort:o})};function O(e,t,n,r,i,a){let o=C(e),s={...e.headers};if(e.provider===`github-copilot`){let e=c(t.messages),n=l({messages:t.messages,hasImages:e});Object.assign(s,n)}return a&&(o.sessionAffinityFormat===`openrouter`?s[`x-session-id`]=a:(o.sessionAffinityFormat===`openai`&&(s.session_id=a),s[`x-client-request-id`]=a)),r&&Object.assign(s,r),new u({apiKey:n,baseURL:e.baseUrl,dangerouslyAllowBrowser:!0,fetch:i,defaultHeaders:s})}function k(e,t,n,i=C(e),a=o(t.tools,i.supportsOpenAIGrammarTools)){let s=i.supportsAdditionalTools?`additional-tools`:i.supportsToolSearch?`tool-search`:void 0,c=r(t,s!==void 0),l=g(e,t,_,{grammarToolInputProperties:a,deferredTools:c.deferred,deferredToolsMode:s,toolOptions:{supportsStrictMode:i.supportsStrictMode,supportsOpenAIGrammarTools:i.supportsOpenAIGrammarTools}}),u=S(n?.cacheRetention,n?.env),d=u===`none`&&i.supportsExplicitPromptCacheMode,f={model:e.id,input:l,stream:!0,prompt_cache_key:u===`none`?void 0:p(n?.sessionId),prompt_cache_retention:w(i,u),prompt_cache_options:d?{mode:`explicit`}:void 0,store:!1};return n?.maxTokens&&(f.max_output_tokens=Math.max(n.maxTokens,v)),n?.temperature!==void 0&&(f.temperature=n?.temperature),n?.serviceTier!==void 0&&(f.service_tier=n.serviceTier),c.immediate.length>0&&(f.tools=m(c.immediate,{supportsStrictMode:i.supportsStrictMode,supportsOpenAIGrammarTools:i.supportsOpenAIGrammarTools})),n?.toolChoice!==void 0&&(f.tool_choice=n.toolChoice),e.reasoning&&(n?.reasoningEffort||n?.reasoningSummary?(f.reasoning={effort:n?.reasoningEffort?e.thinkingLevelMap?.[n.reasoningEffort]??n.reasoningEffort:`medium`,summary:n?.reasoningSummary||`auto`},f.include=[`reasoning.encrypted_content`]):e.provider!==`github-copilot`&&e.thinkingLevelMap?.off!==null&&(f.reasoning={effort:e.thinkingLevelMap?.off??`none`}),e.provider===`xai`&&(f.include=[`reasoning.encrypted_content`])),n?.samplingParams&&Object.assign(f,n.samplingParams),f}function A(e,t){switch(t){case`flex`:return .5;case`priority`:return e.id===`gpt-5.5`?2.5:2;default:return 1}}function j(e,t,n){let r=A(n,t);r!==1&&(e.cost.input*=r,e.cost.output*=r,e.cost.cacheRead*=r,e.cost.cacheWrite*=r,e.cost.total=e.cost.input+e.cost.output+e.cost.cacheRead+e.cost.cacheWrite)}export{E as stream,D as streamSimple};
1
+ import{t as e}from"./event-stream-qbAZIAKV.js";import{mr as t,yr as n}from"./index-DCgpDQKf.js";import{t as r}from"./deferred-tools-C1IEsG5C.js";import{t as i}from"./headers-CbDaTl3c.js";import{t as a}from"./provider-retry-DLGw8C1A.js";import{c as o,i as s}from"./transform-messages-CjZBscG6.js";import{n as c,t as l}from"./github-copilot-headers-DRgtIyTm.js";import{n as u}from"./openai-Dlbx6jgy.js";import{n as d,t as f}from"./error-body-pkrba6pf.js";import{t as p}from"./openai-prompt-cache-DXo9f3w5.js";import{n as m,r as h,t as g}from"./openai-responses-shared-BdPh5feu.js";var _=new Set([`openai`,`openai-codex`,`opencode`]),v=16;function y(e,t){if(!e)return!1;let n=t.toLowerCase();for(let[t,r]of Object.entries(e))if(t.toLowerCase()===n&&r!==null&&r.trim().length>0)return!0;return!1}function b(e,t,n){if(t)return t;if(y(n,`authorization`)||y(n,`cf-aig-authorization`))return`unused`;throw Error(`No API key for provider: ${e}`)}function x(e){return e.provider===`openrouter`||e.baseUrl.includes(`openrouter.ai`)?`openrouter`:`openai`}function S(e,t){return e||(n(`PI_CACHE_RETENTION`,t)===`long`?`long`:`short`)}function C(e){return{supportsDeveloperRole:e.compat?.supportsDeveloperRole??!0,sessionAffinityFormat:e.compat?.sessionAffinityFormat??x(e),supportsLongCacheRetention:e.compat?.supportsLongCacheRetention??!0,supportsStrictMode:e.compat?.supportsStrictMode??!1,supportsOpenAIGrammarTools:e.compat?.supportsOpenAIGrammarTools??!1,supportsAdditionalTools:e.compat?.supportsAdditionalTools??!1,supportsToolSearch:e.compat?.supportsToolSearch??!1,supportsExplicitPromptCacheMode:e.compat?.supportsExplicitPromptCacheMode??!1}}function w(e,t){return t===`long`&&e.supportsLongCacheRetention?`24h`:void 0}function T(e){return f(d(e),`OpenAI API error`)}var E=(t,n,r)=>{let s=new e;return(async()=>{let e={role:`assistant`,content:[],api:t.api,provider:t.provider,model:t.id,usage:{input:0,output:0,cacheRead:0,cacheWrite:0,totalTokens:0,cost:{input:0,output:0,cacheRead:0,cacheWrite:0,total:0}},stopReason:`pending`,timestamp:Date.now()};try{let c=b(t.provider,r?.apiKey,r?.headers),l=S(r?.cacheRetention,r?.env)===`none`?void 0:r?.sessionId,u=C(t),d=o(n.tools,u.supportsOpenAIGrammarTools),f=O(t,n,c,r?.headers,r?.fetch,l),p=k(t,n,r,u,d),m=await r?.onPayload?.(p,t);m!==void 0&&(p=m);let g={...r?.signal?{signal:r.signal}:{},...r?.timeoutMs===void 0?{}:{timeout:r.timeoutMs},maxRetries:0},{data:_,response:v}=await a(()=>f.responses.create(p,g).withResponse(),{maxRetries:r?.maxRetries,maxRetryDelayMs:r?.maxRetryDelayMs,signal:r?.signal});if(await r?.onResponse?.({status:v.status,headers:i(v.headers)},t),s.push({type:`start`,partial:e}),await h(_,e,s,t,{serviceTier:r?.serviceTier,grammarToolInputProperties:d,applyServiceTierPricing:(e,n)=>j(e,n,t)}),r?.signal?.aborted)throw Error(`Request was aborted`);if(e.stopReason===`pending`)throw Error(`OpenAI Responses stream ended without a stop reason`);if(e.stopReason===`aborted`||e.stopReason===`error`)throw Error(e.errorMessage||`An unknown error occurred`);s.push({type:`done`,reason:e.stopReason,message:e}),s.end()}catch(t){for(let t of e.content)delete t.index,delete t.partialJson,delete t.customInput;e.stopReason=r?.signal?.aborted?`aborted`:`error`,e.errorMessage=T(t),s.push({type:`error`,reason:e.stopReason,error:e}),s.end()}})(),s},D=(e,n,r)=>{b(e.provider,r?.apiKey,r?.headers);let i=s(e,n,r,r?.apiKey),a=r?.reasoning?t(e,r.reasoning):void 0,o=a===`off`?void 0:a;return E(e,n,{...i,reasoningEffort:o})};function O(e,t,n,r,i,a){let o=C(e),s={...e.headers};if(e.provider===`github-copilot`){let e=c(t.messages),n=l({messages:t.messages,hasImages:e});Object.assign(s,n)}return a&&(o.sessionAffinityFormat===`openrouter`?s[`x-session-id`]=a:(o.sessionAffinityFormat===`openai`&&(s.session_id=a),s[`x-client-request-id`]=a)),r&&Object.assign(s,r),new u({apiKey:n,baseURL:e.baseUrl,dangerouslyAllowBrowser:!0,fetch:i,defaultHeaders:s})}function k(e,t,n,i=C(e),a=o(t.tools,i.supportsOpenAIGrammarTools)){let s=i.supportsAdditionalTools?`additional-tools`:i.supportsToolSearch?`tool-search`:void 0,c=r(t,s!==void 0),l=g(e,t,_,{grammarToolInputProperties:a,deferredTools:c.deferred,deferredToolsMode:s,toolOptions:{supportsStrictMode:i.supportsStrictMode,supportsOpenAIGrammarTools:i.supportsOpenAIGrammarTools}}),u=S(n?.cacheRetention,n?.env),d=u===`none`&&i.supportsExplicitPromptCacheMode,f={model:e.id,input:l,stream:!0,prompt_cache_key:u===`none`?void 0:p(n?.sessionId),prompt_cache_retention:w(i,u),prompt_cache_options:d?{mode:`explicit`}:void 0,store:!1};return n?.maxTokens&&(f.max_output_tokens=Math.max(n.maxTokens,v)),n?.temperature!==void 0&&(f.temperature=n?.temperature),n?.serviceTier!==void 0&&(f.service_tier=n.serviceTier),c.immediate.length>0&&(f.tools=m(c.immediate,{supportsStrictMode:i.supportsStrictMode,supportsOpenAIGrammarTools:i.supportsOpenAIGrammarTools})),n?.toolChoice!==void 0&&(f.tool_choice=n.toolChoice),e.reasoning&&(n?.reasoningEffort||n?.reasoningSummary?(f.reasoning={effort:n?.reasoningEffort?e.thinkingLevelMap?.[n.reasoningEffort]??n.reasoningEffort:`medium`,summary:n?.reasoningSummary||`auto`},f.include=[`reasoning.encrypted_content`]):e.provider!==`github-copilot`&&e.thinkingLevelMap?.off!==null&&(f.reasoning={effort:e.thinkingLevelMap?.off??`none`}),e.provider===`xai`&&(f.include=[`reasoning.encrypted_content`])),n?.samplingParams&&Object.assign(f,n.samplingParams),f}function A(e,t){switch(t){case`flex`:return .5;case`priority`:return e.id===`gpt-5.5`?2.5:2;default:return 1}}function j(e,t,n){let r=A(n,t);r!==1&&(e.cost.input*=r,e.cost.output*=r,e.cost.cacheRead*=r,e.cost.cacheWrite*=r,e.cost.total=e.cost.input+e.cost.output+e.cost.cacheRead+e.cost.cacheWrite)}export{E as stream,D as streamSimple};
@@ -1,4 +1,4 @@
1
- import{n as e}from"./json-parse-CwN-SA_h.js";import{pr as t}from"./index-C8C76R86.js";import{t as n}from"./sanitize-unicode-DmIE6hZJ.js";import{d as r,f as i,l as a,s as o,t as s,u as c}from"./transform-messages-CjZBscG6.js";import{t as l}from"./hash-yQufAZII.js";function u(e,t){let n={v:1,id:e};return t&&(n.phase=t),JSON.stringify(n)}function d(e){if(e){if(e.startsWith(`{`))try{let t=JSON.parse(e);if(t.v===1&&typeof t.id==`string`)return t.phase===`commentary`||t.phase===`final_answer`?{id:t.id,phase:t.phase}:{id:t.id}}catch{}return{id:e}}}function f(e,t){let r=t.filter(e=>e.type===`text`).map(e=>e.text).join(`
1
+ import{n as e}from"./json-parse-CwN-SA_h.js";import{pr as t}from"./index-DCgpDQKf.js";import{t as n}from"./sanitize-unicode-DmIE6hZJ.js";import{d as r,f as i,l as a,s as o,t as s,u as c}from"./transform-messages-CjZBscG6.js";import{t as l}from"./hash-yQufAZII.js";function u(e,t){let n={v:1,id:e};return t&&(n.phase=t),JSON.stringify(n)}function d(e){if(e){if(e.startsWith(`{`))try{let t=JSON.parse(e);if(t.v===1&&typeof t.id==`string`)return t.phase===`commentary`||t.phase===`final_answer`?{id:t.id,phase:t.phase}:{id:t.id}}catch{}return{id:e}}}function f(e,t){let r=t.filter(e=>e.type===`text`).map(e=>e.text).join(`
2
2
  `),i=t.filter(e=>e.type===`image`),a=r.length>0;if(i.length===0||!e.input.includes(`image`))return n(a?r:i.length>0?`(see attached image)`:`(no tool output)`);let o=[];a&&o.push({type:`input_text`,text:n(r)});for(let e of i)o.push({type:`input_image`,detail:`auto`,image_url:`data:${e.mimeType};base64,${e.data}`});return o}function p(e,t,r,i){let o=[],c=new Set,u=e=>{let t=e.replace(/[^a-zA-Z0-9_-]/g,`_`);return(t.length>64?t.slice(0,64):t).replace(/_+$/,``)},p=e=>{let t=`fc_${l(e)}`;return t.length>64?t.slice(0,64):t},h=s(t.messages,e,(t,n,i)=>{if(!r.has(e.provider)||!t.includes(`|`))return u(t);let[a,o]=t.split(`|`),s=u(a),c=i.provider!==e.provider||i.api!==e.api?p(o):u(o);return c.startsWith(`fc_`)||(c=u(`fc_${c}`)),`${s}|${c}`});if((i?.includeSystemPrompt??!0)&&t.systemPrompt){let r=e.compat,i=e.reasoning&&r?.supportsDeveloperRole!==!1?`developer`:`system`;o.push({role:i,content:n(t.systemPrompt)})}let g=0;for(let t of h){if(t.role===`user`)if(typeof t.content==`string`)o.push({role:`user`,content:[{type:`input_text`,text:n(t.content)}]});else{let e=t.content.map(e=>e.type===`text`?{type:`input_text`,text:n(e.text)}:{type:`input_image`,detail:`auto`,image_url:`data:${e.mimeType};base64,${e.data}`});if(e.length===0)continue;o.push({role:`user`,content:e})}else if(t.role===`assistant`){let r=[],s=t,c=s.provider===e.provider&&s.api===e.api,u=c&&s.model===e.id,f=c&&s.model!==e.id,p=0;for(let e of t.content)if(e.type===`thinking`){if(e.thinkingSignature){let t=JSON.parse(e.thinkingSignature);r.push(t)}}else if(e.type===`text`){let t=e,i=d(t.textSignature),a=p===0?`msg_pi_${g}`:`msg_pi_${g}_${p}`;p++;let o=i?.id;o?o.length>64&&(o=`msg_${l(o)}`):o=a,r.push({type:`message`,role:`assistant`,content:[{type:`output_text`,text:n(t.text),annotations:[]}],status:`completed`,id:o,phase:i?.phase})}else if(e.type===`toolCall`){let t=e,[o,s]=t.id.split(`|`),c=i?.grammarToolInputProperties?.get(t.name),l=s;(f&&l?.startsWith(`fc_`)||c===void 0&&!l?.startsWith(`fc_`))&&(l=void 0);let d=u||i?.deferredTools?.has(t.name)===!0;c===void 0?r.push({type:`function_call`,id:l,call_id:o,name:t.name,arguments:JSON.stringify(t.arguments),...d&&t.namespace!==void 0?{namespace:t.namespace}:{}}):r.push({type:`custom_tool_call`,id:l,call_id:o,name:t.name,input:n(a(t.name,t.arguments,c)),...d&&t.namespace!==void 0?{namespace:t.namespace}:{}})}if(r.length===0)continue;o.push(...r)}else if(t.role===`toolResult`){let[n]=t.toolCallId.split(`|`),r=f(e,t.content);i?.grammarToolInputProperties?.has(t.toolName)?o.push({type:`custom_tool_call_output`,call_id:n,output:r}):o.push({type:`function_call_output`,call_id:n,output:r});let a=[];for(let e of t.addedToolNames??[]){let t=i?.deferredTools?.get(e);!t||c.has(e)||(c.add(e),a.push(t))}if(a.length>0&&i?.deferredToolsMode===`additional-tools`)o.push({type:`additional_tools`,role:`developer`,tools:m(a,i.toolOptions)});else if(a.length>0&&i?.deferredToolsMode===`tool-search`){let e=a.map(e=>e.name),n=`pi_tool_load_${l(`${t.toolCallId}:${e.join(`,`)}`)}`;o.push({type:`tool_search_call`,call_id:n,execution:`client`,status:`completed`,arguments:{query:e.join(` `),limit:e.length}}),o.push({type:`tool_search_output`,call_id:n,execution:`client`,status:`completed`,tools:m(a,{...i.toolOptions,deferLoading:!0})})}}g++}return o}function m(e,t){let n=t?.strict===void 0?!1:t.strict,a=t?.supportsStrictMode??!0,o=t?.supportsOpenAIGrammarTools??!1;return e.map(e=>{let s=r(e,o);if(s)return{type:`custom`,name:e.name,description:e.description,format:{type:`grammar`,syntax:s.format,definition:s.definition},...t?.deferLoading?{defer_loading:!0}:{}};let l=i(e,a)??n,u={type:`function`,name:e.name,description:e.description,parameters:c(e,l===!0),...t?.deferLoading?{defer_loading:!0}:{}};return a&&(u.strict=l),u})}function h(e){let t=e.customInput?.property;if(t===void 0)return``;let n=e.arguments[t];return typeof n==`string`?n:``}function g(e,t,n){let r=e.customInput;if(!r)return;let i=o(r.jsonBuffer,r.property,t,n);return e.arguments={[r.property]:t},i}async function _(n,r,i,a,o){let s=!1,c=new Map,l=new Map,d=e=>{e.type===`message`&&e.phase===`final_answer`&&(r.stopReason=`stop`)},f=(e,t)=>{let n=c.get(e);return n?.type===t?n:void 0},p=(e,t)=>{t!==void 0&&i.push({type:`toolcall_delta`,contentIndex:e.contentIndex,delta:t,partial:r})},m=(e,t)=>{if(t.type===`reasoning`){let t={type:`thinking`,thinking:``};r.content.push(t);let n={type:`thinking`,block:t,contentIndex:r.content.length-1};return c.set(e,n),i.push({type:`thinking_start`,contentIndex:n.contentIndex,partial:r}),n}if(t.type===`message`){d(t);let n={type:`text`,text:``};r.content.push(n);let a={type:`text`,block:n,contentIndex:r.content.length-1};return c.set(e,a),i.push({type:`text_start`,contentIndex:a.contentIndex,partial:r}),a}if(t.type===`function_call`){let n={type:`toolCall`,id:`${t.call_id}|${t.id}`,name:t.name,arguments:{},...t.namespace===void 0?{}:{namespace:t.namespace},partialJson:t.arguments||``};r.content.push(n);let a={type:`toolCall`,block:n,contentIndex:r.content.length-1};return c.set(e,a),i.push({type:`toolcall_start`,contentIndex:a.contentIndex,partial:r}),a}if(t.type===`custom_tool_call`){let n=o?.grammarToolInputProperties?.get(t.name)??`input`,a=t.input||``,s={type:`toolCall`,id:`${t.call_id}|${t.id}`,name:t.name,arguments:{[n]:a},...t.namespace===void 0?{}:{namespace:t.namespace},customInput:{property:n,jsonBuffer:{input:``,started:!1,closed:!1}}};r.content.push(s);let l={type:`toolCall`,block:s,contentIndex:r.content.length-1};return c.set(e,l),i.push({type:`toolcall_start`,contentIndex:l.contentIndex,partial:r}),l}},_=(e,t)=>c.get(e)??m(e,t),y=e=>{for(let t of e){if(t.type!==`reasoning`||!t.encrypted_content)continue;let e=l.get(t.id);if(!e?.thinkingSignature)continue;let n=JSON.parse(e.thinkingSignature);n.encrypted_content||(e.thinkingSignature=JSON.stringify({...n,encrypted_content:t.encrypted_content}))}},b=e=>{if(s=!0,y(e.output??[]),e?.id&&(r.responseId=e.id),e?.usage){let t=e.usage.input_tokens_details,n=t?.cached_tokens||0,i=t?.cache_write_tokens||0;r.usage={input:Math.max(0,(e.usage.input_tokens||0)-n-i),output:e.usage.output_tokens||0,cacheRead:n,cacheWrite:i,reasoning:e.usage.output_tokens_details?.reasoning_tokens||0,totalTokens:e.usage.total_tokens||0,cost:{input:0,output:0,cacheRead:0,cacheWrite:0,total:0}}}if(t(a,r.usage),o?.applyServiceTierPricing){let t=o.resolveServiceTier?o.resolveServiceTier(e?.service_tier,o.serviceTier):e?.service_tier??o.serviceTier;o.applyServiceTierPricing(r.usage,t)}let n=e?.status,i=e?.incomplete_details,c=typeof i?.reason==`string`?i.reason:void 0;r.rawStopReason=c?`${n}.${c}`:n;let l=v(n,c);r.stopReason=l.stopReason,r.errorMessage=l.errorMessage,r.content.some(e=>e.type===`toolCall`)&&r.stopReason===`stop`&&(r.stopReason=`toolUse`)};for await(let t of n)if(t.type===`response.created`)r.responseId=t.response.id;else if(t.type===`response.output_item.added`)m(t.output_index,t.item);else if(t.type===`response.reasoning_summary_text.delta`){let e=f(t.output_index,`thinking`);if(!e)continue;e.block.thinking+=t.delta,i.push({type:`thinking_delta`,contentIndex:e.contentIndex,delta:t.delta,partial:r})}else if(t.type===`response.reasoning_summary_part.done`){let e=f(t.output_index,`thinking`);if(!e)continue;e.block.thinking+=`
3
3
 
4
4
  `,i.push({type:`thinking_delta`,contentIndex:e.contentIndex,delta:`
@@ -1 +1 @@
1
- import{Mn as e}from"./index-C8C76R86.js";import{x as t}from"./shared-renderer-C-yYfXvq.js";var n=[`alloy`,`ash`,`ballad`,`cedar`,`coral`,`echo`,`fable`,`marin`,`nova`,`onyx`,`sage`,`shimmer`,`verse`],r=[{value:`gpt-4o-mini-tts`,label:`GPT-4o mini TTS (steerable)`},{value:`tts-1`,label:`tts-1 (fast)`},{value:`tts-1-hd`,label:`tts-1 HD (higher quality)`}],i=new Set([`alloy`,`ash`,`coral`,`echo`,`fable`,`onyx`,`nova`,`sage`,`shimmer`]);function a(e,t){let r=(e??``).trim().toLowerCase();return t===`tts-1`||t===`tts-1-hd`?i.has(r)?r:`alloy`:n.includes(r)?r:`marin`}async function o(n){let{utterance:r,settings:i,getApiKey:o,signal:s}=n,c=await o(`openai`);if(!c)throw Error(`No OpenAI API key configured. Add one in Settings → Providers & Models.`);let l=i.model||`gpt-4o-mini-tts`,u={model:l,voice:a(r.voice||i.voiceName,l),input:r.text,response_format:`mp3`};return l===`gpt-4o-mini-tts`&&r.affect&&(u.instructions=`Speak with a ${r.affect} affect at a ${r.pace} pace.`),{audioChunks:1,playedChunks:+!!await t(await(await e(async()=>{let e=await fetch(`https://api.openai.com/v1/audio/speech`,{method:`POST`,headers:{"Content-Type":`application/json`,Authorization:`Bearer ${c}`},body:JSON.stringify(u),signal:s});if(!e.ok){let t=await e.text().catch(()=>``),n=e.headers.get(`retry-after`);throw Error(`OpenAI TTS request failed (${e.status}): ${t.slice(0,200)||e.statusText}${n?` retry-after: ${n}`:``}`)}return e},{signal:s})).blob(),{signal:s}).catch(()=>!1),transcript:r.text}}var s={id:`openai-tts`,label:`OpenAI TTS`,kind:`tts`,status:`stable`,description:`OpenAI Audio TTS REST API. Steerable affect/pace on gpt-4o-mini-tts.`,models:r,voices:n,needsApiKey:`openai`,synthesize:o};export{s as openAITtsProvider};
1
+ import{Mn as e}from"./index-DCgpDQKf.js";import{x as t}from"./shared-renderer-hMxAoPZb.js";var n=[`alloy`,`ash`,`ballad`,`cedar`,`coral`,`echo`,`fable`,`marin`,`nova`,`onyx`,`sage`,`shimmer`,`verse`],r=[{value:`gpt-4o-mini-tts`,label:`GPT-4o mini TTS (steerable)`},{value:`tts-1`,label:`tts-1 (fast)`},{value:`tts-1-hd`,label:`tts-1 HD (higher quality)`}],i=new Set([`alloy`,`ash`,`coral`,`echo`,`fable`,`onyx`,`nova`,`sage`,`shimmer`]);function a(e,t){let r=(e??``).trim().toLowerCase();return t===`tts-1`||t===`tts-1-hd`?i.has(r)?r:`alloy`:n.includes(r)?r:`marin`}async function o(n){let{utterance:r,settings:i,getApiKey:o,signal:s}=n,c=await o(`openai`);if(!c)throw Error(`No OpenAI API key configured. Add one in Settings → Providers & Models.`);let l=i.model||`gpt-4o-mini-tts`,u={model:l,voice:a(r.voice||i.voiceName,l),input:r.text,response_format:`mp3`};return l===`gpt-4o-mini-tts`&&r.affect&&(u.instructions=`Speak with a ${r.affect} affect at a ${r.pace} pace.`),{audioChunks:1,playedChunks:+!!await t(await(await e(async()=>{let e=await fetch(`https://api.openai.com/v1/audio/speech`,{method:`POST`,headers:{"Content-Type":`application/json`,Authorization:`Bearer ${c}`},body:JSON.stringify(u),signal:s});if(!e.ok){let t=await e.text().catch(()=>``),n=e.headers.get(`retry-after`);throw Error(`OpenAI TTS request failed (${e.status}): ${t.slice(0,200)||e.statusText}${n?` retry-after: ${n}`:``}`)}return e},{signal:s})).blob(),{signal:s}).catch(()=>!1),transcript:r.text}}var s={id:`openai-tts`,label:`OpenAI TTS`,kind:`tts`,status:`stable`,description:`OpenAI Audio TTS REST API. Steerable affect/pace on gpt-4o-mini-tts.`,models:r,voices:n,needsApiKey:`openai`,synthesize:o};export{s as openAITtsProvider};