v2.2.19: Cloud Model Providers Support (OpenRouter, Anthropic, Gemini)

This commit is contained in:
g1nation
2026-05-16 23:34:35 +09:00
parent c7b596f17a
commit 88664c7c6e
21 changed files with 1154 additions and 46 deletions
+72
View File
@@ -212,6 +212,78 @@
<div id="googleError" class="error" hidden></div>
</section>
<!-- Cloud LLM Providers -->
<section class="section" data-section="providers">
<h2>Cloud LLM Providers</h2>
<p class="hint">Ollama / LM Studio 로컬 외에 cloud API 를 붙여서 모델 선택지를 확장. API key 는 모두 Secret Storage 에 저장 (settings.json 침범 X). 사이드바 모델 dropdown 에서 활성 provider 의 모델이 함께 표시됩니다.</p>
<!-- OpenRouter -->
<h3 style="margin-top:6px;font-size:13px;color:var(--text)">OpenRouter</h3>
<p class="hint">100+ 모델 (Claude / Gemini / GPT / Llama 전부) 을 단일 API 로. <a href="https://openrouter.ai/keys" target="_blank">openrouter.ai/keys</a> 에서 API key 발급.</p>
<div class="row toggle">
<label><input id="prOpenrouterEnabled" type="checkbox"> OpenRouter 활성화</label>
</div>
<div class="row">
<label for="prOpenrouterKey">API Key</label>
<div class="input-group">
<input id="prOpenrouterKey" type="password" placeholder="sk-or-..." autocomplete="off" spellcheck="false" />
<button data-save="providers.openrouter.apiKey">저장</button>
</div>
</div>
<div class="row">
<label for="prOpenrouterDefault">기본 모델 (선택)</label>
<div class="input-group">
<input id="prOpenrouterDefault" type="text" placeholder="anthropic/claude-3.5-sonnet" autocomplete="off" />
<button data-save="providers.openrouter.defaultModel">저장</button>
</div>
</div>
<!-- Anthropic -->
<h3 style="margin-top:18px;font-size:13px;color:var(--text)">Anthropic Claude (직통)</h3>
<p class="hint">Anthropic 직접 API — prompt caching 등 native 기능 활용 가능. <a href="https://console.anthropic.com/settings/keys" target="_blank">console.anthropic.com/settings/keys</a> 에서 API key 발급.</p>
<div class="row toggle">
<label><input id="prAnthropicEnabled" type="checkbox"> Anthropic 활성화</label>
</div>
<div class="row">
<label for="prAnthropicKey">API Key</label>
<div class="input-group">
<input id="prAnthropicKey" type="password" placeholder="sk-ant-..." autocomplete="off" spellcheck="false" />
<button data-save="providers.anthropic.apiKey">저장</button>
</div>
</div>
<div class="row">
<label for="prAnthropicDefault">기본 모델</label>
<div class="input-group">
<input id="prAnthropicDefault" type="text" placeholder="claude-3-5-sonnet-20241022" autocomplete="off" />
<button data-save="providers.anthropic.defaultModel">저장</button>
</div>
</div>
<!-- Gemini -->
<h3 style="margin-top:18px;font-size:13px;color:var(--text)">Google Gemini (직통)</h3>
<p class="hint">1M context (gemini-1.5-pro), 무료 tier 사용 가능. <a href="https://aistudio.google.com/app/apikey" target="_blank">aistudio.google.com/app/apikey</a> 에서 발급.</p>
<div class="row toggle">
<label><input id="prGeminiEnabled" type="checkbox"> Gemini 활성화</label>
</div>
<div class="row">
<label for="prGeminiKey">API Key</label>
<div class="input-group">
<input id="prGeminiKey" type="password" placeholder="AIzaSy..." autocomplete="off" spellcheck="false" />
<button data-save="providers.gemini.apiKey">저장</button>
</div>
</div>
<div class="row">
<label for="prGeminiDefault">기본 모델</label>
<div class="input-group">
<input id="prGeminiDefault" type="text" placeholder="gemini-2.0-flash-exp" autocomplete="off" />
<button data-save="providers.gemini.defaultModel">저장</button>
</div>
</div>
<div id="providersFeedback" class="feedback" hidden></div>
<div id="providersError" class="error" hidden></div>
</section>
<!-- Advanced -->
<section class="section" data-section="advanced">
<h2>고급</h2>