feat: add custom/other OpenAI-compatible LLM providers
Allow Settings → Providers to define custom providers (id, name, base URL, API key, models, headers) without code changes. Persist config via OpenCode layers, store keys through auth.set, and keep web/VS Code parity. Co-authored-by: Serhii Dziupin <makeittech@users.noreply.github.com>
This commit is contained in:
co-authored by
Serhii Dziupin
parent
5d24d6cb2a
commit
be87e25c7d
@@ -1301,6 +1301,46 @@ export const settingsDict = {
|
||||
'settings.providers.page.connect.searchProvidersPlaceholder': '검색...',
|
||||
'settings.providers.page.connect.noProvidersFound': '프로바이더를 찾을 수 없습니다',
|
||||
'settings.providers.page.connect.allProvidersConnected': '모든 프로바이더가 연결되었습니다.',
|
||||
'settings.providers.page.custom.optionLabel': '기타 / 사용자 정의',
|
||||
'settings.providers.page.custom.title': '사용자 정의 제공자',
|
||||
'settings.providers.page.custom.description': '기본 URL, 자격 증명, 모델 목록으로 OpenAI 호환 제공자를 추가합니다. OpenCode 설정에 저장되어 다른 제공자와 같이 채팅에서 사용할 수 있습니다.',
|
||||
'settings.providers.page.custom.field.providerID.label': '제공자 ID',
|
||||
'settings.providers.page.custom.field.providerID.placeholder': 'my-provider',
|
||||
'settings.providers.page.custom.field.providerID.info': '소문자, 숫자, 하이픈, 밑줄. OpenCode 제공자 ID로 사용됩니다.',
|
||||
'settings.providers.page.custom.field.name.label': '표시 이름',
|
||||
'settings.providers.page.custom.field.name.placeholder': '내 제공자',
|
||||
'settings.providers.page.custom.field.name.info': '제공자 및 모델 선택기에 표시됩니다.',
|
||||
'settings.providers.page.custom.field.baseURL.label': '기본 URL',
|
||||
'settings.providers.page.custom.field.baseURL.placeholder': 'https://api.example.com/v1',
|
||||
'settings.providers.page.custom.field.baseURL.info': 'OpenAI 호환 API 기본 URL. http:// 또는 https://로 시작해야 합니다.',
|
||||
'settings.providers.page.custom.field.apiKey.label': 'API 키',
|
||||
'settings.providers.page.custom.field.apiKey.placeholder': 'sk-... 또는 {env:VAR_NAME}',
|
||||
'settings.providers.page.custom.field.apiKey.info': 'OpenChamber가 아니라 OpenCode 인증에 저장됩니다. 환경 변수에서 읽으려면 {env:VAR_NAME}을 사용하세요.',
|
||||
'settings.providers.page.custom.models.title': '모델',
|
||||
'settings.providers.page.custom.models.idLabel': '모델 ID',
|
||||
'settings.providers.page.custom.models.idPlaceholder': 'gpt-4o',
|
||||
'settings.providers.page.custom.models.nameLabel': '모델 이름',
|
||||
'settings.providers.page.custom.models.namePlaceholder': 'GPT-4o',
|
||||
'settings.providers.page.custom.models.add': '모델 추가',
|
||||
'settings.providers.page.custom.models.remove': '모델 제거',
|
||||
'settings.providers.page.custom.headers.title': '헤더',
|
||||
'settings.providers.page.custom.headers.description': '매 호출에 전송되는 선택적 요청 헤더입니다.',
|
||||
'settings.providers.page.custom.headers.keyLabel': '헤더 이름',
|
||||
'settings.providers.page.custom.headers.keyPlaceholder': 'X-Custom-Header',
|
||||
'settings.providers.page.custom.headers.valueLabel': '헤더 값',
|
||||
'settings.providers.page.custom.headers.valuePlaceholder': 'value',
|
||||
'settings.providers.page.custom.headers.add': '헤더 추가',
|
||||
'settings.providers.page.custom.headers.remove': '헤더 제거',
|
||||
'settings.providers.page.custom.actions.back': '뒤로',
|
||||
'settings.providers.page.custom.actions.save': '제공자 저장',
|
||||
'settings.providers.page.custom.error.providerID.required': '제공자 ID는 필수입니다',
|
||||
'settings.providers.page.custom.error.providerID.format': '소문자, 숫자, 하이픈, 밑줄을 사용하세요',
|
||||
'settings.providers.page.custom.error.providerID.exists': '이 ID의 제공자가 이미 연결되어 있습니다',
|
||||
'settings.providers.page.custom.error.name.required': '표시 이름은 필수입니다',
|
||||
'settings.providers.page.custom.error.baseURL.required': '기본 URL은 필수입니다',
|
||||
'settings.providers.page.custom.error.baseURL.format': '기본 URL은 http:// 또는 https://로 시작해야 합니다',
|
||||
'settings.providers.page.custom.error.required': '필수',
|
||||
'settings.providers.page.custom.error.duplicate': '중복',
|
||||
'settings.providers.page.auth.title': '인증',
|
||||
'settings.providers.page.auth.loadingMethods': '인증 방식 로딩 중...',
|
||||
'settings.providers.page.auth.apiKeyLabel': 'API Key',
|
||||
@@ -1358,6 +1398,8 @@ export const settingsDict = {
|
||||
'settings.providers.page.toast.deviceCodeCopyFailed': '기기 코드를 복사하지 못했습니다',
|
||||
'settings.providers.page.toast.providerDisconnected': '프로바이더 연결이 해제되었습니다',
|
||||
'settings.providers.page.toast.providerDisconnectFailed': '프로바이더 연결을 해제하지 못했습니다',
|
||||
'settings.providers.page.toast.customProviderSaved': '{provider} 연결됨',
|
||||
'settings.providers.page.toast.customProviderSaveFailed': '사용자 정의 제공자를 저장하지 못했습니다',
|
||||
'settings.mcp.page.empty.selectServer': '사이드바에서 MCP 서버를 선택하세요',
|
||||
'settings.mcp.page.empty.addNewOne': '또는 새로 추가하세요',
|
||||
'settings.mcp.page.header.newServer': '새 MCP 서버',
|
||||
|
||||
Reference in New Issue
Block a user