UNPKG

ai-sdk-react-model-picker

Version:

A flexible, theme-aware React component library for selecting and managing AI models. Built for seamless integration with Vercel's AI SDK v5, with special support for VSCode extensions and JetBrains IDEs.

55 lines 57.8 kB
"use strict";var Ne=Object.create;var H=Object.defineProperty;var Te=Object.getOwnPropertyDescriptor;var Pe=Object.getOwnPropertyNames;var je=Object.getPrototypeOf,Ae=Object.prototype.hasOwnProperty;var Ee=(e,t,o,r)=>{if(t&&typeof t=="object"||typeof t=="function")for(let a of Pe(t))!Ae.call(e,a)&&a!==o&&H(e,a,{get:()=>t[a],enumerable:!(r=Te(t,a))||r.enumerable});return e};var R=(e,t,o)=>(o=e!=null?Ne(je(e)):{},Ee(t||!e||!e.__esModule?H(o,"default",{value:e,enumerable:!0}):o,e));Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const n=require("react/jsx-runtime"),s=require("react"),Le=require("react-hook-form"),J="/";function K(e){return`${e.provider.id}${J}${e.model.id}`}function z(e){const t=e.split(J);if(t.length!==2)throw new TypeError("Invalid ProviderAndModelKey format");return{providerId:t[0],modelId:t[1]}}function Se(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}function Y(e){if(!Se(e))throw new Error("Value is not an object");for(const[t,o]of Object.entries(e))if(typeof o!="string")throw new TypeError(`Value at key "${t}" is not a string`)}var C=(e=>(e.RequiresApiKey="Requires API Key",e.Local="Local",e.Free="Free",e.OpenSource="Open-Source",e.Vision="Vision",e.Tools="Tools/Functions",e.LongContext="Long Context",e))(C||{});class S{hasCredentials(t){return this.configuration.validateConfig(t).ok}validateCredentials(t){const o=this.configuration.validateConfig(t);return o.ok?o.fieldValidationWarnings.length>0?{isValid:!0,warning:o.fieldValidationWarnings.join(` `)}:{isValid:!0}:{isValid:!1,error:o.message??`${this.metadata.name} configuration is invalid`}}async getModels(){return this.models}getDefaultModel(){return this.models.find(t=>t.isDefault===!0)??this.models[0]}}const M=e=>e,c=e=>e,O="recentlyUsedModels",q="providersWithCredentials",Ie="config";function Ve(e){try{Y(e)}catch(t){return console.error("Invalid storage format:",t),[]}try{return Object.entries(e).toSorted((t,o)=>Number(o[1])-Number(t[1])).map(([t])=>t)}catch(t){return console.error("Invalid value format:",t),[]}}async function X(e){return e.get(O).then(Ve)}async function ee(e){return X(e).then(t=>t.length>0?t[0]:void 0)}async function Re(e,t){return e.get(O).then(o=>e.set(O,{...o,[t]:Date.now().toString()}))}async function Ke(e,t){const o=await e.get(O);if(o===void 0)return{};for(const r of t)delete o[r];return e.set(O,o).then(()=>o)}async function ze(e){return e.get(q).then(t=>Object.keys(t??{}))}async function Oe(e,t){return e.get(q).then(o=>e.set(q,{...o,[t]:Date.now().toString()}))}async function qe(e,t){return e.get(q).then(o=>{if(o!==void 0)return delete o[t],e.set(q,o)})}function B(e){return`${e}:${Ie}`}async function De(e,t,o){return e.set(B(t),o)}async function W(e,t){return e.get(B(t))}async function Ue(e,t){return e.remove(B(t))}function $e(e){const t={},o=new Map;for(const r of e)t[r.metadata.id]=r.metadata,o.set(r.metadata.id,r.models.reduce((a,d)=>(a.set(d.id,d),a),new Map));return{providerMetadata:t,providerModels:o}}function Be(e,t){const[o,r]=s.useState([]),[a,d]=s.useState([]),[i,f]=s.useState(void 0),y=l=>{qe(e,l);const u=o.filter(b=>b.provider.id===l).map(b=>b.key);Ke(e,u);const m=o.filter(b=>b.provider.id!==l),g=a.filter(b=>b.provider.id!==l),w=m[0]??g[0];return r(m),d(g),f(w),w===void 0?void 0:{model:w.model,provider:w.provider}},p=(l,u)=>{const m=t.getProvider(l),g=u===void 0?m.getDefaultModel():m.models.find(v=>v.id===u);if(g===void 0)return;const w={model:g,provider:m.metadata};Oe(e,l),Re(e,K(w));const b=new Set([...o.map(v=>v.key),...a.map(v=>v.key)]),T=m.models.filter(v=>v.id!==g.id&&!b.has(K({model:v,provider:m.metadata}))).map(v=>({model:v,provider:m.metadata,key:K({model:v,provider:m.metadata})}));d(v=>[...T,...v]);const x=K(w),h={...w,key:x};return f(h),r(v=>{const A=v.findIndex(E=>E.key===x);return A===-1?[h,...v]:[h,...v.slice(0,A),...v.slice(A+1)]}),d(v=>v.filter(A=>A.key!==x)),h};return s.useEffect(()=>{async function l(){try{const u=await X(e),m=await ze(e),w=[...new Set([...u.map(h=>z(h).providerId),...m])].map(h=>t.getProvider(h)),{providerMetadata:b,providerModels:T}=$e(w),x=u.map(h=>{const{providerId:v,modelId:A}=z(h),E=T.get(v)?.get(A);if(E!==void 0)return T.get(v)?.delete(A),{model:E,provider:b[v],key:h}}).filter(h=>h!==void 0);f(h=>h??x[0]),r(x),d([...T.entries()].flatMap(([h,v])=>[...v.entries()].map(([A,E])=>({model:E,provider:b[h],key:K({model:E,provider:b[h]})}))))}catch(u){console.error("Failed to load recently used models:",u)}}l()},[e,t]),{recentlyUsedModels:o,modelsWithCredentials:a,selectedModel:i,setSelectedProviderAndModel:p,deleteProvider:y}}const We=e=>s.createElement("svg",{viewBox:"0 0 24 24",fill:"currentColor",...e},s.createElement("path",{d:"M16.804 1.957l7.22 4.105v.087L16.73 10.21l.017-2.117-.821-.03c-1.059-.028-1.611.002-2.268.11-1.064.175-2.038.577-3.147 1.352L8.345 11.03c-.284.195-.495.336-.68.455l-.515.322-.397.234.385.23.53.338c.476.314 1.17.796 2.701 1.866 1.11.775 2.083 1.177 3.147 1.352l.3.045c.694.091 1.375.094 2.825.033l.022-2.159 7.22 4.105v.087L16.589 22l.014-1.862-.635.022c-1.386.042-2.137.002-3.138-.162-1.694-.28-3.26-.926-4.881-2.059l-2.158-1.5a21.997 21.997 0 00-.755-.498l-.467-.28a55.927 55.927 0 00-.76-.43C2.908 14.73.563 14.116 0 14.116V9.888l.14.004c.564-.007 2.91-.622 3.809-1.124l1.016-.58.438-.274c.428-.28 1.072-.726 2.686-1.853 1.621-1.133 3.186-1.78 4.881-2.059 1.152-.19 1.974-.213 3.814-.138l.02-1.907z"})),_e=e=>s.createElement("svg",{viewBox:"0 0 24 24",fill:"currentColor",...e},s.createElement("path",{d:"M22.2819 9.8211a5.9847 5.9847 0 0 0-.5157-4.9108 6.0462 6.0462 0 0 0-6.5098-2.9A6.0651 6.0651 0 0 0 4.9807 4.1818a5.9847 5.9847 0 0 0-3.9977 2.9 6.0462 6.0462 0 0 0 .7427 7.0966 5.98 5.98 0 0 0 .511 4.9107 6.051 6.051 0 0 0 6.5146 2.9001A5.9847 5.9847 0 0 0 13.2599 24a6.0557 6.0557 0 0 0 5.7718-4.2058 5.9894 5.9894 0 0 0 3.9977-2.9001 6.0557 6.0557 0 0 0-.7475-7.0729zm-9.022 12.6081a4.4755 4.4755 0 0 1-2.8764-1.0408l.1419-.0804 4.7783-2.7582a.7948.7948 0 0 0 .3927-.6813v-6.7369l2.02 1.1686a.071.071 0 0 1 .038.052v5.5826a4.504 4.504 0 0 1-4.4945 4.4944zm-9.6607-4.1254a4.4708 4.4708 0 0 1-.5346-3.0137l.142.0852 4.783 2.7582a.7712.7712 0 0 0 .7806 0l5.8428-3.3685v2.3324a.0804.0804 0 0 1-.0332.0615L9.74 19.9502a4.4992 4.4992 0 0 1-6.1408-1.6464zM2.3408 7.8956a4.485 4.485 0 0 1 2.3655-1.9728V11.6a.7664.7664 0 0 0 .3879.6765l5.8144 3.3543-2.0201 1.1685a.0757.0757 0 0 1-.071 0l-4.8303-2.7865A4.504 4.504 0 0 1 2.3408 7.872zm16.5963 3.8558L13.1038 8.364 15.1192 7.2a.0757.0757 0 0 1 .071 0l4.8303 2.7913a4.4944 4.4944 0 0 1-.6765 8.1042v-5.6772a.79.79 0 0 0-.407-.667zm2.0107-3.0231l-.142-.0852-4.7735-2.7818a.7759.7759 0 0 0-.7854 0L9.409 9.2297V6.8974a.0662.0662 0 0 1 .0284-.0615l4.8303-2.7866a4.4992 4.4992 0 0 1 6.6802 4.66zM8.3065 12.863l-2.02-1.1638a.0804.0804 0 0 1-.038-.0567V6.0742a4.4992 4.4992 0 0 1 7.3757-3.4537l-.142.0805L8.704 5.459a.7948.7948 0 0 0-.3927.6813zm1.0976-2.3654l2.602-1.4998 2.6069 1.4998v2.9994l-2.5974 1.4997-2.6067-1.4997Z"})),Fe=e=>s.createElement("svg",{viewBox:"0 0 24 24",fill:"currentColor",...e},s.createElement("path",{d:"M1.052 16.916l9.539 2.552a21.007 21.007 0 00.06 2.033l5.956 1.593a11.997 11.997 0 01-5.586.865l-.18-.016-.044-.004-.084-.009-.094-.01a11.605 11.605 0 01-.157-.02l-.107-.014-.11-.016a11.962 11.962 0 01-.32-.051l-.042-.008-.075-.013-.107-.02-.07-.015-.093-.019-.075-.016-.095-.02-.097-.023-.094-.022-.068-.017-.088-.022-.09-.024-.095-.025-.082-.023-.109-.03-.062-.02-.084-.025-.093-.028-.105-.034-.058-.019-.08-.026-.09-.031-.066-.024a6.293 6.293 0 01-.044-.015l-.068-.025-.101-.037-.057-.022-.08-.03-.087-.035-.088-.035-.079-.032-.095-.04-.063-.028-.063-.027a5.655 5.655 0 01-.041-.018l-.066-.03-.103-.047-.052-.024-.096-.046-.062-.03-.084-.04-.086-.044-.093-.047-.052-.027-.103-.055-.057-.03-.058-.032a6.49 6.49 0 01-.046-.026l-.094-.053-.06-.034-.051-.03-.072-.041-.082-.05-.093-.056-.052-.032-.084-.053-.061-.039-.079-.05-.07-.047-.053-.035a7.785 7.785 0 01-.054-.036l-.044-.03-.044-.03a6.066 6.066 0 01-.04-.028l-.057-.04-.076-.054-.069-.05-.074-.054-.056-.042-.076-.057-.076-.059-.086-.067-.045-.035-.064-.052-.074-.06-.089-.073-.046-.039-.046-.039a7.516 7.516 0 01-.043-.037l-.045-.04-.061-.053-.07-.062-.068-.06-.062-.058-.067-.062-.053-.05-.088-.084a13.28 13.28 0 01-.099-.097l-.029-.028-.041-.042-.069-.07-.05-.051-.05-.053a6.457 6.457 0 01-.168-.179l-.08-.088-.062-.07-.071-.08-.042-.049-.053-.062-.058-.068-.046-.056a7.175 7.175 0 01-.027-.033l-.045-.055-.066-.082-.041-.052-.05-.064-.02-.025a11.99 11.99 0 01-1.44-2.402zm-1.02-5.794l11.353 3.037a20.468 20.468 0 00-.469 2.011l10.817 2.894a12.076 12.076 0 01-1.845 2.005L.657 15.923l-.016-.046-.035-.104a11.965 11.965 0 01-.05-.153l-.007-.023a11.896 11.896 0 01-.207-.741l-.03-.126-.018-.08-.021-.097-.018-.081-.018-.09-.017-.084-.018-.094c-.026-.141-.05-.283-.071-.426l-.017-.118-.011-.083-.013-.102a12.01 12.01 0 01-.019-.161l-.005-.047a12.12 12.12 0 01-.034-2.145zm1.593-5.15l11.948 3.196c-.368.605-.705 1.231-1.01 1.875l11.295 3.022c-.142.82-.368 1.612-.668 2.365l-11.55-3.09L.124 10.26l.015-.1.008-.049.01-.067.015-.087.018-.098c.026-.148.056-.295.088-.442l.028-.124.02-.085.024-.097c.022-.09.045-.18.07-.268l.028-.102.023-.083.03-.1.025-.082.03-.096.026-.082.031-.095a11.896 11.896 0 011.01-2.232zm4.442-4.4L17.352 4.59a20.77 20.77 0 00-1.688 1.721l7.823 2.093c.267.852.442 1.744.513 2.665L2.106 5.213l.045-.065.027-.04.04-.055.046-.065.055-.076.054-.072.064-.086.05-.065.057-.073.055-.07.06-.074.055-.069.065-.077.054-.066.066-.077.053-.06.072-.082.053-.06.067-.074.054-.058.073-.078.058-.06.063-.067.168-.17.1-.098.059-.056.076-.071a12.084 12.084 0 012.272-1.677zM12.017 0h.097l.082.001.069.001.054.002.068.002.046.001.076.003.047.002.06.003.054.002.087.005.105.007.144.011.088.007.044.004.077.008.082.008.047.005.102.012.05.006.108.014.081.01.042.006.065.01.207.032.07.012.065.011.14.026.092.018.11.022.046.01.075.016.041.01L14.7.3l.042.01.065.015.049.012.071.017.096.024.112.03.113.03.113.032.05.015.07.02.078.024.073.023.05.016.05.016.076.025.099.033.102.036.048.017.064.023.093.034.11.041.116.045.1.04.047.02.06.024.041.018.063.026.04.018.057.025.11.048.1.046.074.035.075.036.06.028.092.046.091.045.102.052.053.028.049.026.046.024.06.033.041.022.052.029.088.05.106.06.087.051.057.034.053.032.096.059.088.055.098.062.036.024.064.041.084.056.04.027.062.042.062.043.023.017c.054.037.108.075.161.114l.083.06.065.048.056.043.086.065.082.064.04.03.05.041.086.069.079.065.085.071c.712.6 1.353 1.283 1.909 2.031L7.222.994l.062-.027.065-.028.081-.034.086-.035c.113-.045.227-.09.341-.131l.096-.035.093-.033.084-.03.096-.031c.087-.03.176-.058.264-.085l.091-.027.086-.025.102-.03.085-.023.1-.026L9.04.37l.09-.023.091-.022.095-.022.09-.02.098-.021.091-.02.095-.018.092-.018.1-.018.091-.016.098-.017.092-.014.097-.015.092-.013.102-.013.091-.012.105-.012.09-.01.105-.01c.093-.01.186-.018.28-.024l.106-.008.09-.005.11-.006.093-.004.1-.004.097-.002.099-.002.197-.002z"})),Ge=e=>s.createElement("svg",{viewBox:"0 0 24 24",fill:"currentColor",...e},s.createElement("path",{d:"M13.05 15.513h3.08c.214 0 .389.177.389.394v1.82a1.704 1.704 0 011.296 1.661c0 .943-.755 1.708-1.685 1.708-.931 0-1.686-.765-1.686-1.708 0-.807.554-1.484 1.297-1.662v-1.425h-2.69v4.663a.395.395 0 01-.188.338l-2.69 1.641a.385.385 0 01-.405-.002l-4.926-3.086a.395.395 0 01-.185-.336V16.3L2.196 14.87A.395.395 0 012 14.555L2 14.528V9.406c0-.14.073-.27.192-.34l2.465-1.462V4.448c0-.129.062-.249.165-.322l.021-.014L9.77 1.058a.385.385 0 01.407 0l2.69 1.675a.395.395 0 01.185.336V7.6h3.856V5.683a1.704 1.704 0 01-1.296-1.662c0-.943.755-1.708 1.685-1.708.931 0 1.685.765 1.685 1.708 0 .807-.553 1.484-1.296 1.662v2.311a.391.391 0 01-.389.394h-4.245v1.806h6.624a1.69 1.69 0 011.64-1.313c.93 0 1.685.764 1.685 1.707 0 .943-.754 1.708-1.685 1.708a1.69 1.69 0 01-1.64-1.314H13.05v1.937h4.953l.915 1.18a1.66 1.66 0 01.84-.227c.931 0 1.685.764 1.685 1.707 0 .943-.754 1.708-1.685 1.708-.93 0-1.685-.765-1.685-1.708 0-.346.102-.668.276-.937l-.724-.935H13.05v1.806zM9.973 1.856L7.93 3.122V6.09h-.778V3.604L5.435 4.669v2.945l2.11 1.36L9.712 7.61V5.334h.778V7.83c0 .136-.07.263-.184.335L7.963 9.638v2.081l1.422 1.009-.446.646-1.406-.998-1.53 1.005-.423-.66 1.605-1.055v-1.99L5.038 8.29l-2.26 1.34v1.676l1.972-1.189.398.677-2.37 1.429V14.3l2.166 1.258 2.27-1.368.397.677-2.176 1.311V19.3l1.876 1.175 2.365-1.426.398.678-2.017 1.216 1.918 1.201 2.298-1.403v-5.78l-4.758 2.893-.4-.675 5.158-3.136V3.289L9.972 1.856zM16.13 18.47a.913.913 0 00-.908.92c0 .507.406.918.908.918a.913.913 0 00.907-.919.913.913 0 00-.907-.92zm3.63-3.81a.913.913 0 00-.908.92c0 .508.406.92.907.92a.913.913 0 00.908-.92.913.913 0 00-.908-.92zm1.555-4.99a.913.913 0 00-.908.92c0 .507.407.918.908.918a.913.913 0 00.907-.919.913.913 0 00-.907-.92zM17.296 3.1a.913.913 0 00-.907.92c0 .508.406.92.907.92a.913.913 0 00.908-.92.913.913 0 00-.908-.92z"})),He=e=>s.createElement("svg",{viewBox:"0 0 24 24",fill:"currentColor",...e},s.createElement("path",{d:"M17.3041 3.541h-3.6718l6.696 16.918H24Zm-10.6082 0L0 20.459h3.7442l1.3693-3.5527h7.0052l1.3693 3.5528h3.7442L10.5363 3.5409Zm-.3712 10.2232 2.2914-5.9456 2.2914 5.9456Z"})),Ze=e=>s.createElement("svg",{viewBox:"0 0 24 24",fill:"currentColor",...e},s.createElement("path",{d:"M11.04 19.32Q12 21.51 12 24q0-2.49.93-4.68.96-2.19 2.58-3.81t3.81-2.55Q21.51 12 24 12q-2.49 0-4.68-.93a12.3 12.3 0 0 1-3.81-2.58 12.3 12.3 0 0 1-2.58-3.81Q12 2.49 12 0q0 2.49-.96 4.68-.93 2.19-2.55 3.81a12.3 12.3 0 0 1-3.81 2.58Q2.49 12 0 12q2.49 0 4.68.96 2.19.93 3.81 2.55t2.55 3.81"})),Qe=e=>s.createElement("svg",{viewBox:"0 0 96 96",fill:"currentColor",...e},s.createElement("path",{d:"M33.338 6.544a4.118 4.118 0 0 0-3.943 2.879L4.252 83.917a4.14 4.14 0 0 0 3.908 5.538h20.787a4.443 4.443 0 0 0 3.41-2.9l5.014-14.777 17.91 16.705a4.237 4.237 0 0 0 2.666.972H81.24L71.024 60.261l-29.781.007L59.47 6.544z"}),s.createElement("path",{d:"M66.595 9.364a4.145 4.145 0 0 0-3.928-2.82H33.648a4.146 4.146 0 0 1 3.928 2.82l25.184 74.62a4.146 4.146 0 0 1-3.928 5.472h29.02a4.146 4.146 0 0 0 3.927-5.472z"})),Je=e=>s.createElement("svg",{viewBox:"0 0 24 24",fill:"currentColor",...e},s.createElement("path",{d:"M17.143 3.429v3.428h-3.429v3.429h-3.428V6.857H6.857V3.43H3.43v13.714H0v3.428h10.286v-3.428H6.857v-3.429h3.429v3.429h3.429v-3.429h3.428v3.429h-3.428v3.428H24v-3.428h-3.43V3.429z"})),Ye=e=>s.createElement("svg",{viewBox:"0 0 24 24",fill:"currentColor",...e},s.createElement("path",{d:"M8.128 14.099c.592 0 1.77-.033 3.398-.703 1.897-.781 5.672-2.2 8.395-3.656 1.905-1.018 2.74-2.366 2.74-4.18A4.56 4.56 0 0018.1 1H7.549A6.55 6.55 0 001 7.55c0 3.617 2.745 6.549 7.128 6.549z"}),s.createElement("path",{d:"M9.912 18.61a4.387 4.387 0 012.705-4.052l3.323-1.38c3.361-1.394 7.06 1.076 7.06 4.715a5.104 5.104 0 01-5.105 5.104l-3.597-.001a4.386 4.386 0 01-4.386-4.387z"}),s.createElement("path",{d:"M4.776 14.962A3.775 3.775 0 001 18.738v.489a3.776 3.776 0 007.551 0v-.49a3.775 3.775 0 00-3.775-3.775z"})),Xe=e=>s.createElement("svg",{viewBox:"0 0 24 24",fill:"currentColor",width:"512",height:"512",...e},s.createElement("path",{d:"M11.7 18q-2.4-.125-4.05-1.85T6 12q0-2.5 1.75-4.25T12 6q2.425 0 4.15 1.65T18 11.7l-2.1-.625q-.325-1.35-1.4-2.212T12 8q-1.65 0-2.825 1.175T8 12q0 1.425.863 2.5t2.212 1.4L11.7 18Zm1.2 3.95q-.225.05-.45.05H12q-2.075 0-3.9-.788t-3.175-2.137q-1.35-1.35-2.137-3.175T2 12q0-2.075.788-3.9t2.137-3.175q1.35-1.35 3.175-2.137T12 2q2.075 0 3.9.788t3.175 2.137q1.35 1.35 2.138 3.175T22 12v.45q0 .225-.05.45L20 12.3V12q0-3.35-2.325-5.675T12 4Q8.65 4 6.325 6.325T4 12q0 3.35 2.325 5.675T12 20h.3l.6 1.95Zm7.625.55l-4.275-4.275L15 22l-3-10l10 3l-3.775 1.25l4.275 4.275l-1.975 1.975Z"})),et=e=>s.createElement("svg",{viewBox:"0 0 41.336 41.336",fill:"currentColor",width:"800",height:"800",...e},s.createElement("path",{d:"M36.335,5.668h-8.167V1.5c0-0.828-0.672-1.5-1.5-1.5h-12c-0.828,0-1.5,0.672-1.5,1.5v4.168H5.001c-1.104,0-2,0.896-2,2 s0.896,2,2,2h2.001v29.168c0,1.381,1.119,2.5,2.5,2.5h22.332c1.381,0,2.5-1.119,2.5-2.5V9.668h2.001c1.104,0,2-0.896,2-2 S37.438,5.668,36.335,5.668z M14.168,35.67c0,0.828-0.672,1.5-1.5,1.5s-1.5-0.672-1.5-1.5v-21c0-0.828,0.672-1.5,1.5-1.5 s1.5,0.672,1.5,1.5V35.67z M22.168,35.67c0,0.828-0.672,1.5-1.5,1.5s-1.5-0.672-1.5-1.5v-21c0-0.828,0.672-1.5,1.5-1.5 s1.5,0.672,1.5,1.5V35.67z M25.168,5.668h-9V3h9V5.668z M30.168,35.67c0,0.828-0.672,1.5-1.5,1.5s-1.5-0.672-1.5-1.5v-21 c0-0.828,0.672-1.5,1.5-1.5s1.5,0.672,1.5,1.5V35.67z"})),te=e=>s.createElement("svg",{viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",...e},s.createElement("polyline",{points:"20 6 9 17 4 12"})),oe=e=>s.createElement("svg",{viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",...e},s.createElement("polyline",{points:"6 9 12 15 18 9"})),tt=e=>s.createElement("svg",{viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",...e},s.createElement("line",{x1:"12",y1:"5",x2:"12",y2:"19"}),s.createElement("line",{x1:"5",y1:"12",x2:"19",y2:"12"})),re=s.createContext(void 0);function _(){const e=s.useContext(re);if(!e)throw new Error("Listbox components must be used within a Listbox");return e}function ne({value:e,onChange:t=()=>{},children:o,className:r=""}){const[a,d]=s.useState(!1),i=s.useRef(null),f=s.useRef(null);return s.useEffect(()=>{function y(p){a&&i.current&&f.current&&p.target instanceof Node&&!i.current.contains(p.target)&&!f.current.contains(p.target)&&d(!1)}return document.addEventListener("mousedown",y),()=>{document.removeEventListener("mousedown",y)}},[a]),s.useEffect(()=>{function y(p){p.key==="Escape"&&a&&(d(!1),i.current?.focus(),p.stopPropagation())}return document.addEventListener("keydown",y),()=>{document.removeEventListener("keydown",y)}},[a]),n.jsx(re.Provider,{value:{value:e,onChange:t,isOpen:a,setIsOpen:d,buttonRef:i,optionsRef:f},children:n.jsx("div",{className:`relative ${r}`,children:o})})}function se({children:e,className:t="",shouldOpenList:o,...r}){const{isOpen:a,setIsOpen:d,buttonRef:i}=_(),f=p=>{(o===void 0||o())&&d(!a)},y=p=>{p.key==="Enter"||p.key===" "?(p.preventDefault(),d(!a)):p.key==="ArrowDown"&&(p.preventDefault(),d(!0))};return n.jsx("button",{type:"button",ref:i,onClick:f,onKeyDown:y,"aria-expanded":a,"aria-haspopup":"listbox",className:` leading-none flex items-center justify-between w-full bg-transparent rounded focus:text-foreground transition-all duration-150 ${t} `,...r,children:e})}function ie({children:e,className:t="",...o}){const{isOpen:r,optionsRef:a,buttonRef:d}=_(),[i,f]=s.useState({top:0,left:0}),y=s.useCallback(()=>{if(!d.current||!a.current)return;const p=d.current.getBoundingClientRect(),u=a.current.getBoundingClientRect().height,m=8;let g=p.top-u-m;g<m&&(g=p.bottom+m);const w=p.left;f({top:g,left:w})},[d,a]);return s.useEffect(()=>(r&&y(),()=>{}),[r,y]),r?n.jsx("div",{style:{position:"fixed",top:0,left:0,right:0,bottom:0,background:"transparent",zIndex:1e3,pointerEvents:"none"},children:n.jsx("div",{ref:a,role:"listbox",className:` absolute z-50 max-w-xs mt-1 py-1 bg-background border border-solid border-border rounded max-h-60 overflow-auto ${t} `,style:{top:i.top,left:i.left,pointerEvents:"auto"},...o,children:e})}):null}function F({value:e,children:t,disabled:o=!1,className:r="",onClick:a,...d}){const{value:i,onChange:f,setIsOpen:y}=_(),p=i===e,l=m=>{o||(f(e),y(!1),a?.(m))},u=m=>{o||((m.key==="Enter"||m.key===" ")&&(m.preventDefault(),f(e),y(!1),m.stopPropagation()),m.key==="Escape"&&(m.preventDefault(),y(!1),m.stopPropagation()))};return n.jsx("div",{role:"option","aria-selected":p,tabIndex:o?-1:0,onClick:l,onKeyDown:u,className:` px-3 py-1 cursor-pointer select-none ${p?"bg-primary text-white":"text-foreground hover:bg-accent"} ${o?"opacity-50 cursor-not-allowed":"hover:bg-accent"} transition-colors duration-150 ${r} `,...d,children:typeof t=="function"?t({selected:p}):t})}function ot({show:e=!0,children:t,className:o=""}){if(e)return n.jsx("div",{className:`transition-all duration-150 ease-out ${o}`,children:t})}function rt({selectedItem:e,onSelectionChange:t,topOptions:o=[],otherOptions:r=[],className:a="",placeholder:d="Select an option",isLoading:i=!1,disabled:f=!1}){const y=e?.name??d,p=e?.icon??Xe,l=u=>{const m=u.name,g=u.icon;return n.jsx(F,{value:u,className:"flex items-center justify-between gap-2",children:({selected:w})=>n.jsxs(n.Fragment,{children:[n.jsxs("div",{className:"flex items-center gap-2 min-w-0 flex-1",children:[n.jsx(g,{className:"w-4 h-4 flex-shrink-0 text-current"}),n.jsx("span",{className:"text-xs truncate",children:m})]}),w&&n.jsx(te,{className:"w-3 h-3 flex-shrink-0"})]})},`provider-${u.id}`)};return n.jsxs(ne,{value:e,onChange:t,className:a,children:[n.jsxs(se,{disabled:f||i,className:"relative w-full text-foreground p-2 border border-border border-solid text-sm","aria-label":y,children:[n.jsxs("span",{className:"flex items-center gap-2 min-w-0 flex-1",children:[n.jsx(p,{className:"w-4 h-4 flex-shrink-0 text-current"}),n.jsx("span",{className:"truncate pl-2",children:i?"Loading...":y})]}),n.jsx(oe,{className:"w-4 h-4 flex-shrink-0 text-muted","aria-hidden":"true"})]}),n.jsx(ot,{children:n.jsxs(ie,{className:"py-1",children:[o.length>0&&n.jsxs("div",{children:[n.jsx("div",{className:"px-3 py-1 text-xs font-medium uppercase tracking-wider text-muted bg-transparent",children:"Popular"}),o.map(u=>l(u))]}),o.length>0&&r.length>0&&n.jsx("div",{className:"border-t border-border my-1"}),r.length>0&&n.jsxs("div",{children:[o.length>0&&n.jsx("div",{className:"px-3 py-1 text-xs font-medium uppercase tracking-wider text-muted bg-transparent",children:"Additional Options"}),r.map(u=>l(u))]}),o.length===0&&r.length===0&&!i&&n.jsx("div",{className:"px-3 py-4 text-center text-sm text-muted",children:"No options available"}),i&&n.jsx("div",{className:"px-3 py-4 text-center text-sm text-muted",children:n.jsxs("div",{className:"flex items-center justify-center gap-2",children:[n.jsx("div",{className:"w-4 h-4 border-2 border-primary border-t-transparent rounded-full animate-spin"}),"Loading options..."]})})]})})]})}function ae({providerRegistry:e,storage:t,onClose:o,onProviderConfigured:r,className:a="",onProviderDeleted:d}){const[i,f]=s.useState(),[y,p]=s.useState({}),[l,u]=s.useState(),[m,g]=s.useState(!1),{register:w,handleSubmit:b,formState:{errors:T,isValid:x,isSubmitting:h},reset:v,getFieldState:A}=Le.useForm({mode:"onTouched"}),E=()=>{const k=i?.metadata.id;if(p({}),u(void 0),i===void 0){v();return}const P=i.configuration.fields.reduce((N,j)=>(N[j.key]="",N),{});k===i.metadata.id&&v(P)},{topProviders:ye,otherProviders:be}=s.useMemo(()=>{const k=e.getAllProviders().map(j=>j.metadata),P=[],N=[];for(const j of k)e.topProviders.includes(j.id)?P.push(j):N.push(j);return{topProviders:P,otherProviders:N}},[e]),ke=(k,P)=>{if(i===void 0)return"Provider is required";const N=i.configuration.validateField(k,P),j=P!==void 0&&P.trim().length>0,{isDirty:U}=A(k);if(N?.error!==void 0)return j||U?N.error:void 0;N?.warning===void 0&&k in y&&j?p($=>{const{[k]:Tt,...Me}=$;return Me}):N?.warning!==void 0&&(j||U)&&p($=>({...$,[k]:N.warning}))},we=async k=>{E();const P=await W(t,k.id);P!==void 0&&v(P),g(P!==void 0),f(e.getProvider(k.id))},Ce=async k=>{const P=Object.fromEntries(Object.entries(k).filter(([N,j])=>typeof j=="string"));if(i!==void 0)try{const N=i.validateCredentials(P);if(!N.isValid){u(N.error??"An unknown error occurred");return}await De(t,i.metadata.id,P),r(i.metadata),v(),p({}),u(void 0),g(!1)}catch(N){u(`Error saving model configuration: ${N instanceof Error?N.message:String(N)}`)}};return n.jsx("div",{className:"fixed inset-0 bg-black bg-opacity-50 flex items-center justify-center z-50 backdrop-blur-sm",onClick:o,role:"dialog","aria-modal":"true","aria-labelledby":"add-model-title",children:n.jsx("div",{className:`transition-all duration-250 min-h-1/2 bg-background border border-border rounded-lg shadow-lg max-w-md w-full mx-4 max-h-[90vh] overflow-y-auto ${a} `,onClick:k=>k.stopPropagation(),children:n.jsxs("form",{onSubmit:b(Ce),className:"p-6",children:[n.jsxs("div",{className:"flex items-center justify-between mb-6",children:[n.jsx("h2",{id:"add-model-title",className:"text-md font-semibold text-foreground leading-none",children:"Add Provider"}),n.jsx("button",{type:"button",onClick:o,className:`text-muted p-1 bg-transparent border-none rounded text-foreground hover:bg-accent transition-colors duration-150`,"aria-label":"Close dialog",children:n.jsx("svg",{className:"w-5 h-5",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24","aria-hidden":"true",children:n.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M6 18L18 6M6 6l12 12"})})})]}),n.jsxs("div",{className:"space-y-6",children:[n.jsxs("div",{children:[n.jsx("label",{className:"block text-sm font-medium text-foreground mb-2",children:"Provider"}),n.jsx(rt,{selectedItem:i?.metadata,onSelectionChange:k=>void we(k),topOptions:ye,otherOptions:be}),n.jsxs("p",{className:"mt-1 text-xs text-muted",children:["Don't see your provider?"," ",n.jsx("a",{href:"https://github.com/hbmartin/ai-sdk-react-model-picker/issues",target:"_blank",rel:"noopener noreferrer",className:"text-primary hover:underline",children:"Request one here"})]})]}),i?.configuration.fields.map(({key:k,label:P,placeholder:N,required:j})=>n.jsxs("div",{children:[n.jsxs("label",{className:"block text-sm font-medium text-foreground mb-2",children:[P,j===!0?" *":""]}),n.jsx("input",{placeholder:N,autoComplete:"off",spellCheck:"false",autoCorrect:"off",autoCapitalize:"off",type:"text",className:"w-full px-3 py-2 border border-border border-solid rounded bg-background text-foreground focus:outline-none focus:ring-2 focus:ring-primary focus:border-primary",...w(k,{validate:U=>ke(k,U)})}),T[k]&&n.jsx("p",{className:"mt-1 px-1 text-xs text-destructive",children:T[k].message}),k in y&&!(k in T)&&n.jsx("p",{className:"mt-1 px-1 text-xs text-warning",children:y[k]}),k==="apiKey"&&i.metadata.apiKeyUrl!==void 0&&!(k in y)&&!(k in T)&&n.jsx("p",{className:"mt-1 text-xs text-muted",children:n.jsx("a",{href:i.metadata.apiKeyUrl,target:"_blank",rel:"noopener noreferrer",className:"text-primary hover:underline",children:"Get your API key here"})})]},k))]}),l!==void 0&&n.jsx("p",{className:"my-2 px-1 text-sm text-destructive",children:l}),n.jsxs("div",{className:"flex justify-between gap-2",children:[i!==void 0&&m&&n.jsx("button",{type:"button",disabled:h,"aria-busy":h,onClick:()=>{Ue(t,i.metadata.id),g(!1),E(),d(i.metadata.id)},className:`w-1/4 mt-8 px-4 py-2 text-sm bg-destructive text-white rounded disabled:opacity-50 cursor-pointer disabled:cursor-not-allowed border border-border border-solid transition-colors active:scale-95 transition-all duration-100 ease-in-out `,children:n.jsx(et,{className:"w-4 h-4 flex-shrink-0 text-current"})}),n.jsx("button",{type:"submit",disabled:h||!x||i===void 0,"aria-busy":h,className:` mt-8 px-4 py-2 text-sm bg-primary text-white rounded w-full font-medium disabled:opacity-50 cursor-pointer disabled:cursor-not-allowed border border-border border-solid transition-colors active:scale-95 transition-all duration-100 ease-in-out `,children:m?h?"Updating...":"Update":h?"Connecting...":"Connect"})]})]})})})}function Z({model:e}){const t=e.provider.icon;return n.jsx(F,{value:e.key,children:({selected:o})=>n.jsxs("div",{className:"flex w-full items-center justify-between",children:[n.jsxs("div",{className:"flex items-center gap-2 min-w-0 flex-1",children:[n.jsx(t,{className:"h-3 w-3 text-current flex-shrink-0","aria-hidden":"true"}),n.jsxs("span",{className:"line-clamp-1 text-xs",children:[e.model.displayName,n.jsx("span",{className:"text-muted ml-1.5 text-[10px] italic",children:e.provider.name})]})]}),n.jsx(te,{className:`h-3 w-3 flex-shrink-0 ${o?"":"invisible"}`})]})},e.key)}function de({optionOne:e,optionTwo:t,selected:o,onClick:r,className:a="",disabled:d=!1}){return n.jsxs("div",{className:` inline-flex items-center text-center cursor-pointer border border-border bg-accent rounded-default ${d?"opacity-50 cursor-not-allowed":"hover:bg-opacity-80"} ${a} `,onClick:d?void 0:r,onKeyDown:d?void 0:r,onKeyUp:d?void 0:r,role:"button",tabIndex:d?-1:0,"aria-disabled":d,"aria-pressed":o,"aria-label":`Toggle between ${e} and ${t}`,children:[n.jsx("div",{className:` text-center px-3 py-2 rounded-default transition-all duration-200 ease-in-out ${o?"bg-primary text-white shadow-sm":"text-foreground hover:bg-opacity-60"} `,children:e}),n.jsx("div",{className:` text-center px-3 py-2 rounded-default transition-all duration-200 ease-in-out ${o?"text-foreground hover:bg-opacity-60":"bg-primary text-white shadow-sm"} `,children:t})]})}const Q="__add_model__";function nt({storage:e,providerRegistry:t,onModelChange:o,roles:r,selectedRole:a,onRoleChange:d,className:i="",disabled:f=!1}){const[y,p]=s.useState(!1),{recentlyUsedModels:l,modelsWithCredentials:u,selectedModel:m,setSelectedProviderAndModel:g,deleteProvider:w}=Be(e,t),b=x=>{if(x===Q){p(!0);return}const{providerId:h,modelId:v}=z(x);if(v===m?.model.id&&h===m.provider.id)return;const A=g(h,v);A&&o?.(A)},T=s.useCallback(()=>l.length===0&&u.length===0?(p(!0),!1):!0,[l,u]);return n.jsxs("div",{className:`ai-sdk-model-picker ${i}`,children:[r&&r.length>0&&n.jsx("div",{className:"mb-3",children:n.jsx(de,{optionOne:r[0]?.label||"Option 1",optionTwo:r[1]?.label||"Option 2",selected:a===r[0]?.id,onClick:()=>{d&&r.length>1&&d(a===r[0].id?r[1].id:r[0].id)}})}),n.jsx(ne,{value:m?.key,onChange:b,children:n.jsxs("div",{className:"relative flex",children:[n.jsxs(se,{disabled:f,className:"h-[18px] gap-1 border-none min-w-0 flex-1 text-muted hover:text-foreground py-0 px-1 text-xs",shouldOpenList:T,children:[n.jsx("span",{className:"line-clamp-1 break-all hover:brightness-110 text-left",children:m?.model.displayName??"Add Model Provider"}),n.jsx(oe,{className:"hidden h-2 w-2 flex-shrink-0 hover:brightness-110 min-[200px]:flex","aria-hidden":"true"})]}),n.jsxs(ie,{className:"min-w-[160px]",children:[n.jsx("div",{className:"no-scrollbar max-h-[300px] mb-1",children:u.length===0&&l.length===0?n.jsx("div",{className:"text-muted px-2 py-4 text-center text-xs",children:"No models configured"}):n.jsxs(n.Fragment,{children:[n.jsx("div",{className:"px-2 py-1 text-[10px] font-semibold text-muted uppercase",children:"Recently Used"}),l.map(x=>n.jsx(Z,{model:x},x.key)),u.length>0&&n.jsx("div",{className:"px-2 py-1 text-[10px] font-semibold text-muted uppercase",children:"Available Models"}),u.map(x=>n.jsx(Z,{model:x},x.key))]})}),n.jsx("hr",{className:"bg-accent h-px border-0 m-0"}),n.jsx(F,{value:Q,children:n.jsxs("div",{className:"text-muted flex items-center my-1 hover:text-foreground text-xs font-semibold",children:[n.jsx(tt,{className:"mr-2 h-3 w-3"}),"Add Model Provider"]})})]})]})}),y&&n.jsx(ae,{providerRegistry:t,storage:e,onClose:()=>p(!1),onProviderConfigured:x=>{const h=g(x.id);p(!1),o?.(h)},onProviderDeleted:x=>{const h=w(x);o?.(h)}})]})}function le(){const[e,t]=s.useState("light"),[o,r]=s.useState("web");return s.useEffect(()=>{if(typeof document>"u")return;if(document.body.className.includes("vscode-")){r("vscode");const f=document.body.className.includes("vscode-dark")?"dark":"light";t(f);return}const a=document.body.dataset["vscode-theme-kind"]??document.body.dataset.vscodeThemeKind;if(a?.includes("vscode-")===!0){r("vscode");const f=a.includes("dark")?"dark":"light";t(f);return}if(document.body.dataset.ide!==void 0&&document.body.dataset.ide==="jetbrains"){r("jetbrains");const f=document.body.classList.contains("dark")||document.documentElement.dataset.theme==="dark";t(f?"dark":"light");return}r("web");const d=globalThis.window.matchMedia("(prefers-color-scheme: dark)");t(d.matches?"dark":"light");const i=f=>t(f.matches?"dark":"light");return d.addEventListener("change",i),()=>d.removeEventListener("change",i)},[]),{theme:e,environment:o}}function ce({tag:e,className:t=""}){const{environment:o}=le(),r="inline-flex items-center px-2 py-1 text-xs font-medium rounded-md",d=(o==="vscode"?{[C.RequiresApiKey]:"bg-vscode-error/20 text-vscode-error border border-vscode-error/30",[C.Local]:"bg-vscode-success/20 text-vscode-success border border-vscode-success/30",[C.Free]:"bg-vscode-warning/20 text-vscode-warning border border-vscode-warning/30",[C.OpenSource]:"bg-vscode-button-bg/20 text-vscode-button-fg border border-vscode-button-bg/30",[C.Vision]:"bg-vscode-text-link/20 text-vscode-text-link border border-vscode-text-link/30",[C.Tools]:"bg-vscode-info/20 text-vscode-info border border-vscode-info/30",[C.LongContext]:"bg-vscode-warning/15 text-vscode-warning border border-vscode-warning/25"}:{[C.RequiresApiKey]:"bg-destructive/10 text-destructive border border-destructive/20",[C.Local]:"bg-success/10 text-success border border-success/20",[C.Free]:"bg-warning/10 text-warning border border-warning/20",[C.OpenSource]:"bg-primary/10 text-primary border border-primary/20",[C.Vision]:"bg-primary/15 text-primary border border-primary/25",[C.Tools]:"bg-accent/50 text-accent-foreground border border-border",[C.LongContext]:"bg-warning/5 text-warning border border-warning/15"})[e]||"bg-accent text-accent-foreground border border-border",i=[r,d,t].filter(Boolean).join(" ");return n.jsx("span",{className:i,title:`This model ${e.toLowerCase()}`,children:e})}const st=5e4;function it({model:e,title:t,description:o,tags:r=[],documentationUrl:a,onClick:d,disabled:i=!1,className:f=""}){const[y,p]=s.useState(!1),l=t??e.model.displayName,u=o??e.provider.description??"",m=a??e.provider.documentationUrl,g=[];e.model.supportsVision===!0&&g.push(C.Vision),e.model.supportsTools===!0&&g.push(C.Tools),e.model.contextLength!==void 0&&e.model.contextLength>st&&g.push(C.LongContext);const w=[...new Set([...r,...g])];return n.jsx("div",{className:` relative w-full border border-border rounded-default transition-all duration-500 ${i?"opacity-50 cursor-not-allowed":y?"border-primary bg-primary bg-opacity-10 cursor-pointer shadow-sm":"hover:shadow-sm"} ${f} `,onMouseEnter:()=>!i&&p(!0),onMouseLeave:()=>!i&&p(!1),onClick:i?void 0:b=>{b.target.closest("a")||d?.(b,e)},children:n.jsxs("div",{className:"px-4 py-3",children:[n.jsxs("div",{className:"flex items-center mb-3",children:[n.jsx("div",{className:"mr-3 w-6 h-6 flex-shrink-0",children:n.jsx(e.provider.icon,{className:"w-6 h-6 text-foreground"})}),n.jsx("h3",{className:"text-lg font-semibold text-foreground truncate",children:l})]}),w.length>0&&n.jsx("div",{className:"flex flex-wrap gap-2 mb-3",children:w.map(b=>n.jsx(ce,{tag:b},b))}),u&&n.jsx("p",{className:"text-muted text-sm mb-3 leading-relaxed",children:u}),n.jsxs("div",{className:"flex flex-wrap gap-4 text-xs text-muted",children:[e.model.maxTokens!==void 0&&n.jsxs("span",{children:["Max tokens: ",e.model.maxTokens.toLocaleString()]}),e.model.contextLength!==void 0&&n.jsxs("span",{children:["Context: ",e.model.contextLength.toLocaleString()]})]}),typeof m=="string"&&m.trim()!==""&&n.jsx("a",{href:m,target:"_blank",rel:"noopener noreferrer",className:` absolute top-3 right-3 p-1.5 text-muted hover:text-foreground transition-colors duration-200 `,title:"Read the documentation","aria-label":"Read the documentation",onClick:b=>b.stopPropagation(),children:n.jsxs("svg",{width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round","aria-hidden":"true",children:[n.jsx("path",{d:"M2 3h6a4 4 0 0 1 4 4v14a3 3 0 0 0-3-3H2z"}),n.jsx("path",{d:"M22 3h-6a4 4 0 0 0-4 4v14a3 3 0 0 1 3-3h7z"})]})})]})})}const ue=s.createContext(void 0);function at(e,t){switch(t.type){case"SET_MODEL":return{...e,selectedModelId:t.payload};case"SET_ROLE":return{...e,selectedRole:t.payload};case"SET_LOADING":return{...e,isLoading:t.payload};case"SET_ERROR":return{...e,error:t.payload??void 0};default:return e}}function dt({children:e,providerRegistry:t,storage:o,initialModelId:r,initialRole:a,roles:d,theme:i,onConfigureProvider:f,onMissingConfiguration:y}){const[p,l]=s.useReducer(at,{selectedModelId:r??void 0,selectedRole:a,isLoading:!1,error:void 0}),u=s.useMemo(()=>t.getAllModels(),[t]),m=s.useMemo(()=>{if(p.selectedModelId!==void 0)return u.find(h=>h.model.id===p.selectedModelId)??void 0},[p.selectedModelId,u]),g=s.useCallback(h=>{l({type:"SET_MODEL",payload:h.model.id})},[]),w=s.useCallback(h=>{l({type:"SET_ROLE",payload:h})},[]),b=s.useCallback(h=>{l({type:"SET_LOADING",payload:h})},[]),T=s.useCallback(h=>{l({type:"SET_ERROR",payload:h})},[]),x=s.useMemo(()=>({state:p,selectedModel:m,allModels:u,providerRegistry:t,storage:o,roles:d,theme:i,selectModel:g,selectRole:w,setLoading:b,setError:T,onConfigureProvider:f,onMissingConfiguration:y}),[p,m,u,t,o,d,i,g,w,b,T,f,y]);return s.createElement(ue.Provider,{value:x},e)}function D(){const e=s.useContext(ue);if(!e)throw new Error("useModelPicker must be used within a ModelPickerProvider");return e}function lt(){const{selectedModel:e}=D();return e}function ct(){const{allModels:e}=D();return e}function ut(){const{state:e,selectedModel:t,selectModel:o,selectRole:r,setLoading:a,setError:d}=D();return{selectedModelId:e.selectedModelId,selectedRole:e.selectedRole,selectedModel:t,isLoading:e.isLoading,error:e.error,selectModel:o,selectRole:r,setLoading:a,setError:d}}function mt(){const{providerRegistry:e,storage:t,onConfigureProvider:o,onMissingConfiguration:r}=D(),a=s.useCallback(i=>{o(i)},[o]),d=s.useCallback(i=>{r(i)},[r]);return{providerRegistry:e,storage:t,configureProvider:a,handleMissingConfiguration:d}}function pt(){const[e,t]=s.useState(()=>{if(typeof document>"u")return{isVSCodeEnv:!1,themeKind:void 0,isJetBrainsEnv:!1};const r=typeof globalThis.window.acquireVsCodeApi=="function",a=document.body.dataset.ide==="jetbrains";let d;if(r){const i=document.body.className;if(i.includes("vscode-dark"))d="vscode-dark";else if(i.includes("vscode-light"))d="vscode-light";else if(i.includes("vscode-high-contrast"))d="vscode-high-contrast";else{const f=document.body.dataset.vscodeThemeKind;(f==="vscode-dark"||f==="vscode-light"||f==="vscode-high-contrast")&&(d=f)}}return{isVSCodeEnv:r,themeKind:d,isJetBrainsEnv:a}}),o=s.useRef(void 0);return s.useEffect(()=>{if(!e.isVSCodeEnv)return;const r=()=>{const a=document.body.className,d=document.body.dataset.vscodeThemeKind;let i;a.includes("vscode-dark")||d==="vscode-dark"?i="vscode-dark":a.includes("vscode-light")||d==="vscode-light"?i="vscode-light":(a.includes("vscode-high-contrast")||d==="vscode-high-contrast")&&(i="vscode-high-contrast"),i!==e.themeKind&&t(f=>({...f,themeKind:i}))};return o.current=new MutationObserver(r),o.current.observe(document.body,{attributes:!0,attributeFilter:["class","data-vscode-theme-kind"]}),()=>{o.current&&(o.current.disconnect(),o.current=void 0)}},[e.isVSCodeEnv,e.themeKind]),s.useEffect(()=>{if(e.isVSCodeEnv||e.isJetBrainsEnv)return;const r=globalThis.matchMedia("(prefers-color-scheme: dark)"),a=d=>{document.documentElement.dataset.theme=d.matches?"dark":"light"};return r.addEventListener("change",a),()=>r.removeEventListener("change",a)},[e.isVSCodeEnv,e.isJetBrainsEnv]),e}function ht(e,t,o){if(typeof document>"u")return e;const r=typeof globalThis.window.acquireVsCodeApi=="function",a=Object.hasOwn(document.body.dataset,"ide")&&document.body.dataset.ide==="jetbrains";return r&&t!==void 0?`${e} ${t}`:a&&o!==void 0?`${e} ${o}`:e}function ft(e,t,o){const r=[];return e.length>0&&r.push(`Missing required: ${e.join(", ")}`),t.length>0&&r.push(`Validation errors: ${t.join(", ")}`),o&&o.length>0&&r.push(`At least one of these is required: ${o.join(", ")}`),r.join(` `)}function L(...e){return t=>{const{fields:o,requiresAtLeastOneOf:r}=t,a=new Set(o.filter(l=>l.required===!0).map(l=>l.key)),d=new Set(o.filter(l=>l.required!==!0).map(l=>l.key)),i=new Map(o.map(l=>[String(l.key),l.validation]));function f(l){const u=[];for(const x of a)(!(x in l)||l[String(x)].trim().length===0)&&u.push(String(x));const m=[];for(const x of Object.keys(l))!a.has(x)&&!d.has(x)&&m.push(x);const g=[],w=[];for(const[x,h]of i)if(x in l&&h!==void 0){const v=h(l[x]);v?.error!==void 0&&g.push(v.error),v?.warning!==void 0&&w.push(v.warning)}const b=vt(l,r),T=u.length===0&&g.length===0&&b;return{ok:T,missingRequired:u,extraneous:m,fieldValidationErrors:g,fieldValidationWarnings:w,message:T?void 0:ft(u,g,b?void 0:r?.map(String))}}function y(l,u){if(i.has(l))return i.get(l)?.(u)}function p(l){if(l===void 0){if(a.size>0)throw new Error(`Configuration is undefined, but required keys are: ${[...a].join(", ")}`);if(r!==void 0&&r.length>0)throw new Error(`Configuration is undefined, but at least one of these keys is required: ${r.join(", ")}`);return}const{ok:u,message:m}=f(l);if(!u)throw new Error(m);for(const g of Object.keys(l))l[g].trim().length===0&&delete l[g]}return{requiresAtLeastOneOf:r?.map(String),fields:o,assertValidConfigAndRemoveEmptyKeys:p,validateConfig:f,validateField:y}}}function vt(e,t){return t?.some(o=>typeof e[String(o)]=="string"&&e[String(o)].trim().length>0)??!0}function V(e,t=!1){return{key:"baseURL",label:t?"API Base URL":"API Base URL (optional)",placeholder:e,required:t,validation:o=>{if(t&&(o===void 0||o.trim().length===0))return{error:"API Base URL is required"};if(o?.startsWith("https://")===!1)return{warning:'API base URL typically starts with "https://"'}}}}function I(e,t=!1){return{key:"apiKey",label:"API Key",placeholder:typeof e=="string"?`${e}...`:"",required:t,validation:o=>{if(t&&(o===void 0||o.trim().length===0))return{error:"API key is required"};if(typeof e=="string"&&o?.startsWith(e)===!1)return{warning:`API key typically starts with "${e}"`};if(typeof e=="number"&&(o?.length??0)<e)return{warning:`API key appears to be too short (${o?.length===void 0?"":String(o.length)} < ${String(e)})`}}}}class me extends S{metadata={id:M("anthropic"),name:"Anthropic",description:"Use Claude Sonnet, Claude Opus, and other Anthropic models",icon:He,documentationUrl:"https://docs.anthropic.com",apiKeyUrl:"https://console.anthropic.com/account/keys"};models=[{id:c("claude-sonnet-4-20250514"),displayName:"Claude Sonnet 4",maxTokens:2e5,contextLength:2e5,supportsVision:!0,supportsTools:!0,isDefault:!0},{id:c("claude-opus-4-1-20250805"),displayName:"Claude Opus 4.1",maxTokens:2e5,supportsVision:!0,supportsTools:!0},{id:c("claude-3-5-haiku-20241022"),displayName:"Claude 3.5 Haiku",maxTokens:2e5,supportsVision:!0,supportsTools:!0}];configuration=L()({fields:[I("sk-"),V("https://api.anthropic.com/v1")],requiresAtLeastOneOf:["apiKey","baseURL"]});async createInstance(t){let o;try{o=await import("@ai-sdk/anthropic")}catch{throw new Error('Anthropic provider requires "@ai-sdk/anthropic" to be installed. Please install it with: npm install @ai-sdk/anthropic')}return this.configuration.assertValidConfigAndRemoveEmptyKeys(t.options),o.createAnthropic(t.options)(t.model)}}class pe extends S{metadata={id:M("azure"),name:"Azure OpenAI",description:"Use GPT-4 and other models through Azure OpenAI Service",icon:Qe,documentationUrl:"https://learn.microsoft.com/en-us/azure/ai-foundry/",apiKeyUrl:"https://portal.azure.com"};models=[{id:c("gpt-4o"),displayName:"GPT-4 Omni (Azure)",maxTokens:128e3,contextLength:128e3,supportsVision:!0,supportsTools:!0,isDefault:!0},{id:c("gpt-4-turbo"),displayName:"GPT-4 Turbo (Azure)",maxTokens:128e3,contextLength:128e3,supportsVision:!0,supportsTools:!0},{id:c("gpt-4"),displayName:"GPT-4 (Azure)",maxTokens:8192,contextLength:8192,supportsTools:!0},{id:c("gpt-35-turbo"),displayName:"GPT-3.5 Turbo (Azure)",maxTokens:4096,contextLength:16385,supportsTools:!0}];configuration=L()({fields:[I(10,!0),V("https://{resourceName}.openai.azure.com/openai/v1{path}",!0)]});async createInstance(t){let o;try{o=await import("@ai-sdk/azure")}catch{throw new Error('Azure provider requires "@ai-sdk/azure" to be installed. Please install it with: npm install @ai-sdk/azure')}return this.configuration.assertValidConfigAndRemoveEmptyKeys(t.options),o.createAzure(t.options)(t.model)}getTags(){return[C.RequiresApiKey]}}const gt=/^[a-z]{2}-[a-z]+-\d+$/,xt=/^[\dA-Z]{20}$/,yt=/^[\d+/=A-Za-z]{40}$/;class bt extends S{metadata={id:M("bedrock"),name:"AWS Bedrock",description:"AWS Bedrock unified API for multiple foundation models",icon:Ge,documentationUrl:"https://docs.aws.amazon.com/bedrock/",apiKeyUrl:"https://ai-sdk.dev/providers/ai-sdk-providers/amazon-bedrock#authentication"};models=[{id:c("anthropic.claude-3-5-sonnet-20241022-v2:0"),displayName:"Claude 3.5 Sonnet v2",isDefault:!0,maxTokens:2e5,supportsVision:!0},{id:c("anthropic.claude-3-5-sonnet-20240620-v1:0"),displayName:"Claude 3.5 Sonnet",maxTokens:2e5,supportsVision:!0},{id:c("anthropic.claude-3-opus-20240229-v1:0"),displayName:"Claude 3 Opus",maxTokens:2e5,supportsVision:!0},{id:c("anthropic.claude-3-sonnet-20240229-v1:0"),displayName:"Claude 3 Sonnet",maxTokens:2e5,supportsVision:!0},{id:c("anthropic.claude-3-haiku-20240307-v1:0"),displayName:"Claude 3 Haiku",maxTokens:2e5,supportsVision:!0},{id:c("amazon.nova-pro-v1:0"),displayName:"Amazon Nova Pro",maxTokens:3e5,supportsVision:!0},{id:c("amazon.nova-lite-v1:0"),displayName:"Amazon Nova Lite",maxTokens:3e5,supportsVision:!0},{id:c("amazon.nova-micro-v1:0"),displayName:"Amazon Nova Micro",maxTokens:128e3,supportsVision:!1},{id:c("meta.llama3-2-90b-instruct-v1:0"),displayName:"Llama 3.2 90B Instruct",maxTokens:131072,supportsVision:!1},{id:c("meta.llama3-2-11b-instruct-v1:0"),displayName:"Llama 3.2 11B Instruct",maxTokens:131072,supportsVision:!1},{id:c("meta.llama3-1-405b-instruct-v1:0"),displayName:"Llama 3.1 405B Instruct",maxTokens:131072,supportsVision:!1},{id:c("meta.llama3-1-70b-instruct-v1:0"),displayName:"Llama 3.1 70B Instruct",maxTokens:131072,supportsVision:!1},{id:c("meta.llama3-1-8b-instruct-v1:0"),displayName:"Llama 3.1 8B Instruct",maxTokens:131072,supportsVision:!1},{id:c("mistral.mistral-large-2407-v1:0"),displayName:"Mistral Large 2407",maxTokens:131072,supportsVision:!1},{id:c("mistral.mistral-small-2402-v1:0"),displayName:"Mistral Small 2402",maxTokens:32768,supportsVision:!1},{id:c("mistral.mixtral-8x7b-instruct-v0:1"),displayName:"Mixtral 8x7B Instruct",maxTokens:32768,supportsVision:!1},{id:c("ai21.jamba-1-5-large-v1:0"),displayName:"AI21 Jamba 1.5 Large",maxTokens:262144,supportsVision:!1},{id:c("ai21.jamba-1-5-mini-v1:0"),displayName:"AI21 Jamba 1.5 Mini",maxTokens:262144,supportsVision:!1},{id:c("cohere.command-r-plus-v1:0"),displayName:"Cohere Command R+",maxTokens:128e3,supportsVision:!1},{id:c("cohere.command-r-v1:0"),displayName:"Cohere Command R",maxTokens:128e3,supportsVision:!1}];configuration=L()({fields:[{key:"region",label:"AWS Region",placeholder:"us-east-1",required:!0,validation:t=>{if(t===void 0)return{error:"AWS region is required"};if(!gt.test(t))return{error:"AWS region format is invalid."}}},{key:"accessKeyId",label:"Access Key ID",placeholder:"AKIA...",required:!0,validation:t=>{if(t===void 0)return{error:"Access key ID is required"};if(!xt.test(t))return{error:"Access key ID must be exactly 20 upper case or numeric characters."}}},{key:"secretAccessKey",label:"Secret Access Key",placeholder:"...",required:!0,validation:t=>{if(t===void 0)return{error:"Secret access key is required"};if(!yt.test(t))return{error:"Secret access key must be exactly 40 characters."}}},{key:"sessionToken",label:"Session Token",placeholder:"...",required:!1}]});async createInstance(t){let o;try{o=await Promise.resolve().then(()=>require("./index-BU1OO-YA.cjs"))}catch{throw new Error('Bedrock provider requires "@ai-sdk/amazon-bedrock" to be installed. Please install it with: npm install @ai-sdk/amazon-bedrock')}return this.configuration.assertValidConfigAndRemoveEmptyKeys(t.options),o.createAmazonBedrock(t.options)(t.model)}}class he extends S{metadata={id:M("cohere"),name:"Cohere",description:"Use Command R+, Command R, and other Cohere models",icon:Ye,documentationUrl:"https://docs.cohere.com",apiKeyUrl:"https://dashboard.cohere.com/api-keys"};models=[{id:c("command-r-plus"),displayName:"Command R+",maxTokens:128e3,contextLength:128e3,supportsTools:!0,isDefault:!0},{id:c("command-r"),displayName:"Command R",maxTokens:128e3,contextLength:128e3,supportsTools:!0},{id:c("command"),displayName:"Command",maxTokens:4096,contextLength:4096,supportsTools:!0},{id:c("command-light"),displayName:"Command Light",maxTokens:4096,contextLength:4096}];configuration=L()({fields:[I(10,!0),V("https://api.cohere.com/v2")]});async createInstance(t){let o;try{o=await import("@ai-sdk/cohere")}catch{throw new Error('Cohere provider requires "@ai-sdk/cohere" to be installed. Please install it with: npm install @ai-sdk/cohere')}return this.configuration.assertValidConfigAndRemoveEmptyKeys(t.options),o.createCohere(t.options)(t.model)}getTags(){return[C.RequiresApiKey]}}class fe extends S{metadata={id:M("google"),name:"Google",description:"Use Gemini Pro, Gemini Flash, and other Google models",icon:Ze,documentationUrl:"https://ai.google.dev",apiKeyUrl:"https://aistudio.google.com/app/apikey"};models=[{id:c("gemini-2.5-pro"),displayName:"Gemini 2.5 Pro",maxTokens:1048576,supportsVision:!0,supportsTools:!0,isDefault:!0},{id:c("gemini-2.5-flash"),displayName:"Gemini 2.5 Flash",maxTokens:1048576,supportsVision:!0,supportsTools:!0}];configuration=L()({fields:[I(10,!0),V("https://generativelanguage.googleapis.com/v1beta")]});async createInstance(t){let o;try{o=await import("@ai-sdk/google")}catch{throw new Error('Google provider requires "@ai-sdk/google" to be installed. Please install it with: npm install @ai-sdk/google')}return this.config