-
Notifications
You must be signed in to change notification settings - Fork 0
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Feature: Anthropic 설정을 언어 모델 기능 설정에 추가 #1
Changes from all commits
b49de5e
875ffde
830b5dc
559c87d
1a1de06
530124f
11390e3
80c098f
7283d60
7afdf3a
5b14782
fa77508
609dd96
eaa24ba
ef6f9d1
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,92 +1,92 @@ | ||
{ | ||
"name": "max-chatbot", | ||
"version": "0.8.2", | ||
"description": "Generate and brainstorm ideas while creating your notes using Large Language Models (LLMs) from Ollama, LM Studio, Anthropic, OpenAI, Mistral AI, and more for Obsidian.", | ||
"main": "main.js", | ||
"scripts": { | ||
"dev": "VITE_CJS_IGNORE_WARNING=true vite build --mode development --watch", | ||
"build": "VITE_CJS_IGNORE_WARNING=true vite build --mode production", | ||
"version": "node version-bump.mjs && git add manifest.json versions.json", | ||
"format": "prettier --write \"src/**/*.{ts,tsx}\"", | ||
"prepare": "husky", | ||
"lint": "eslint ./src", | ||
"lint:fix": "eslint ./src --fix", | ||
"lint:quiet": "eslint ./src --quiet", | ||
"test": "echo \"Error: no test specified\" && exit 1" | ||
}, | ||
"keywords": [ | ||
"obsidian", | ||
"chatbot", | ||
"chatgpt", | ||
"ollama" | ||
], | ||
"author": "anpigon", | ||
"license": "MIT", | ||
"devDependencies": { | ||
"@commitlint/config-conventional": "^19.2.2", | ||
"@eslint/js": "^9.5.0", | ||
"@rollup/plugin-json": "^6.1.0", | ||
"@rollup/plugin-typescript": "^11.1.6", | ||
"@trivago/prettier-plugin-sort-imports": "^4.3.0", | ||
"@types/lodash": "^4.17.5", | ||
"@types/node": "^20.14.7", | ||
"@types/react": "^18.3.2", | ||
"@types/react-dom": "^18.3.0", | ||
"@typescript-eslint/eslint-plugin": "^7.13.1", | ||
"@typescript-eslint/parser": "^7.10.0", | ||
"@vitejs/plugin-react": "^4.3.1", | ||
"@vitejs/plugin-react-swc": "^3.7.0", | ||
"autoprefixer": "^10.4.19", | ||
"builtin-modules": "^3.3.0", | ||
"bun-types": "latest", | ||
"esbuild": "0.21.5", | ||
"eslint": "^9.5.0", | ||
"husky": "^9.0.11", | ||
"obsidian": "latest", | ||
"postcss": "^8.4.38", | ||
"postcss-prefix-selector": "^1.16.1", | ||
"prettier": "^3.3.2", | ||
"prettier-plugin-sort-imports": "^1.8.5", | ||
"prettier-plugin-tailwindcss": "^0.6.5", | ||
"rollup-plugin-copy": "^3.5.0", | ||
"tailwindcss": "^3.4.4", | ||
"tslib": "^2.6.3", | ||
"typescript": "^5.4.5", | ||
"typescript-eslint": "^7.13.1", | ||
"vite": "^5.3.1" | ||
}, | ||
"dependencies": { | ||
"@commitlint/cli": "^19.3.0", | ||
"@heroicons/react": "^2.1.4", | ||
"@langchain/community": "^0.2.12", | ||
"@langchain/google-genai": "^0.0.20", | ||
"@langchain/groq": "^0.0.12", | ||
"@langchain/openai": "^0.1.3", | ||
"@msgpack/msgpack": "^3.0.0-beta2", | ||
"@orama/orama": "^2.0.20", | ||
"@popperjs/core": "^2.11.8", | ||
"clsx": "^2.1.1", | ||
"i18next": "^23.11.5", | ||
"langchain": "^0.2.5", | ||
"lodash": "^4.17.21", | ||
"merge-refs": "^1.3.0", | ||
"monkey-around": "^2.3.0", | ||
"openai": "^4.52.0", | ||
"react": "^18.3.1", | ||
"react-dom": "^18.3.1", | ||
"react-i18next": "^14.1.2", | ||
"tailwind-merge": "^2.3.0", | ||
"usehooks-ts": "^3.1.0" | ||
}, | ||
"overrides": { | ||
"@langchain/core": "0.2.0" | ||
}, | ||
"resolutions": { | ||
"@langchain/core": "0.2.0" | ||
}, | ||
"pnpm": { | ||
"overrides": { | ||
"@langchain/core": "0.2.0" | ||
} | ||
} | ||
"name": "max-chatbot", | ||
"version": "0.8.2", | ||
"description": "Generate and brainstorm ideas while creating your notes using Large Language Models (LLMs) from Ollama, LM Studio, Anthropic, OpenAI, Mistral AI, and more for Obsidian.", | ||
"main": "main.js", | ||
"scripts": { | ||
"dev": "VITE_CJS_IGNORE_WARNING=true vite build --mode development --watch", | ||
"build": "VITE_CJS_IGNORE_WARNING=true vite build --mode production", | ||
"version": "node version-bump.mjs && git add manifest.json versions.json", | ||
"format": "prettier --write \"src/**/*.{ts,tsx}\"", | ||
"prepare": "husky", | ||
"lint": "eslint ./src", | ||
"lint:fix": "eslint ./src --fix", | ||
"lint:quiet": "eslint ./src --quiet", | ||
"test": "echo \"Error: no test specified\" && exit 1" | ||
}, | ||
"keywords": [ | ||
"obsidian", | ||
"chatbot", | ||
"chatgpt", | ||
"ollama" | ||
], | ||
"author": "anpigon", | ||
"license": "MIT", | ||
"devDependencies": { | ||
"@commitlint/config-conventional": "^19.2.2", | ||
"@eslint/js": "^9.6.0", | ||
"@rollup/plugin-json": "^6.1.0", | ||
"@rollup/plugin-typescript": "^11.1.6", | ||
"@trivago/prettier-plugin-sort-imports": "^4.3.0", | ||
"@types/lodash": "^4.17.6", | ||
"@types/node": "^20.14.10", | ||
"@types/react": "^18.3.3", | ||
"@types/react-dom": "^18.3.0", | ||
"@typescript-eslint/eslint-plugin": "^7.15.0", | ||
"@typescript-eslint/parser": "^7.15.0", | ||
"@vitejs/plugin-react": "^4.3.1", | ||
"@vitejs/plugin-react-swc": "^3.7.0", | ||
"autoprefixer": "^10.4.19", | ||
"builtin-modules": "^3.3.0", | ||
"bun-types": "latest", | ||
"esbuild": "0.23.0", | ||
"eslint": "^9.6.0", | ||
"husky": "^9.0.11", | ||
"obsidian": "latest", | ||
"postcss": "^8.4.39", | ||
"postcss-prefix-selector": "^1.16.1", | ||
"prettier": "^3.3.2", | ||
"prettier-plugin-sort-imports": "^1.8.5", | ||
"prettier-plugin-tailwindcss": "^0.6.5", | ||
"rollup-plugin-copy": "^3.5.0", | ||
"tailwindcss": "^3.4.4", | ||
"tslib": "^2.6.3", | ||
"typescript": "^5.4.5", | ||
"typescript-eslint": "^7.15.0", | ||
"vite": "^5.3.3" | ||
}, | ||
"dependencies": { | ||
"@commitlint/cli": "^19.3.0", | ||
"@heroicons/react": "^2.1.4", | ||
"@langchain/anthropic": "^0.2.3", | ||
"@langchain/community": "^0.2.17", | ||
"@langchain/google-genai": "^0.0.21", | ||
"@langchain/groq": "^0.0.13", | ||
"@langchain/openai": "^0.2.1", | ||
"@msgpack/msgpack": "3.0.0-beta2", | ||
"@orama/orama": "^2.0.21", | ||
"@popperjs/core": "^2.11.8", | ||
"clsx": "^2.1.1", | ||
"i18next": "^23.11.5", | ||
"langchain": "^0.2.8", | ||
"lodash": "^4.17.21", | ||
"merge-refs": "^1.3.0", | ||
"monkey-around": "^2.3.0", | ||
"react": "^18.3.1", | ||
"react-dom": "^18.3.1", | ||
"react-i18next": "^14.1.2", | ||
"tailwind-merge": "^2.3.0", | ||
"usehooks-ts": "^3.1.0" | ||
}, | ||
"overrides": { | ||
"@langchain/core": "0.2.14" | ||
}, | ||
"resolutions": { | ||
"@langchain/core": "0.2.14" | ||
}, | ||
"pnpm": { | ||
"overrides": { | ||
"@langchain/core": "0.2.14" | ||
} | ||
} | ||
} | ||
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -14,7 +14,7 @@ export const UPSTAGE_MODELS = [ | |
'solar-1-mini-chat', // GPT-3.5보다 뛰어난 성능을 제공하는 소형 LLM으로, 영어와 한국어를 모두 지원하는 강력한 다국어 기능을 갖추고 있어 더 작은 패키지로 높은 효율성을 제공합니다. Context Length: 32768 | ||
'solar-1-mini-chat-ja', // 영어와 한국어의 높은 효율성과 성능을 유지하면서 일본어에 특화된 solar-mini-chat의 기능을 확장한 소형 LLM입니다. Context Length: 32768 | ||
]; | ||
export const ANTHROPIC_MODELS = ['claude-instant-1.2', 'claude-2.0', 'claude-2.1', 'claude-3-opus-20240229', 'claude-3-sonnet-20240229']; | ||
export const ANTHROPIC_MODELS = ['claude-3-5-sonnet-20240620', 'claude-3-opus-20240229', 'claude-3-sonnet-20240229', 'claude-3-haiku-20240307']; | ||
export const OPEN_AI_MODELS = ['gpt-3.5-turbo', 'gpt-4o', 'gpt-4']; | ||
|
||
export const enum LLM_PROVIDERS { | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 여기에 제공된 코드 패치에 대한 간단한 코드 리뷰입니다: 변경 사항 개요
개선 제안 및 버그 위험 평가
제안된 패치는 주요 기능에 큰 영향을 미치지 않지만, 위의 개선 사항들을 반영하면 더 관리하기 좋은 코드가 될 수 있습니다. |
||
|
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,73 @@ | ||
import {useCallback, useState, useEffect} from 'react'; | ||
import {useTranslation} from 'react-i18next'; | ||
import {twMerge} from 'tailwind-merge'; | ||
import clsx from 'clsx'; | ||
|
||
import {SettingItem} from '@/components/settings/setting-item'; | ||
import {usePlugin, useSettings} from '@/hooks/useApp'; | ||
import {useSettingDispatch} from '../../context'; | ||
import {Toggle} from '@/components/form/toggle'; | ||
|
||
export const AnthropicSetting = () => { | ||
const {t} = useTranslation('settings'); | ||
|
||
const plugin = usePlugin(); | ||
const settings = useSettings(); | ||
const {refreshChatbotView} = useSettingDispatch(); | ||
const providerSettings = settings.providers.ANTHROPIC; | ||
|
||
const [enable, setEnable] = useState(providerSettings?.enable ?? false); | ||
const [apiKey, setApiKey] = useState(providerSettings?.apiKey ?? ''); | ||
const [allowStream, setAllowStream] = useState(providerSettings?.allowStream ?? false); | ||
|
||
useEffect(() => { | ||
const save = async () => { | ||
await plugin.saveSettings(); | ||
refreshChatbotView(); | ||
}; | ||
void save(); | ||
}, [enable, apiKey, allowStream, plugin]); | ||
|
||
return ( | ||
<> | ||
<SettingItem heading name={t('Anthropic')} className="bg-secondary rounded-lg !px-3 mt-1"> | ||
<Toggle | ||
checked={enable} | ||
onChange={event => { | ||
const value = event.target.checked; | ||
setEnable(value); | ||
providerSettings.enable = value; | ||
}} | ||
/> | ||
</SettingItem> | ||
|
||
<div className={twMerge(clsx('p-3 hidden', {block: enable}))}> | ||
<SettingItem name={t('Provider API Key', {name: 'Anthropic API'})} description={t('Insert your provider API Key', {name: 'Anthropic API'})}> | ||
<input | ||
type="password" | ||
spellCheck={false} | ||
placeholder="sk-ant-api03-...-57SQAA" | ||
defaultValue={apiKey} | ||
onChange={event => { | ||
const value = event.target.value?.trim(); | ||
setApiKey(value); | ||
providerSettings.apiKey = value; | ||
}} | ||
/> | ||
</SettingItem> | ||
|
||
<SettingItem name={t('Allow Stream')} description={t('Allow the model to stream responses.', {name: 'Anthropic'})}> | ||
<Toggle | ||
name="allowStream" | ||
checked={allowStream} | ||
onChange={event => { | ||
const value = event.target.checked; | ||
setAllowStream(value); | ||
providerSettings.allowStream = value; | ||
}} | ||
/> | ||
</SettingItem> | ||
</div> | ||
</> | ||
); | ||
}; | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 이 코드 패치에 대한 간단한 코드 리뷰입니다: 개선 사항:
버그 위험:
전체 코드 스타일:
제안된 변경 사항을 통해 성능을 향상시키고, 잠재적인 버그를 줄이는 데 도움이 되길 바랍니다. There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 이 코드 패치에 대한 간단한 코드 리뷰는 다음과 같습니다: 버그 리스크 및 개선 사항
전체적인 요약:상태 관리를 보다 효율적으로 처리하기 위해 React의 상태 업데이트 규칙을 준수하고, UI 컴포넌트의 동기화를 보장하는 방향으로 코드를 리팩토링하는 것이 필요합니다. 이러한 변경을 통해 코드의 안정성과 유지보수성이 향상될 것입니다. |
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -23,6 +23,8 @@ export default function LanguageModels() { | |
<GoogleSetting /> | ||
<GroqSetting /> | ||
<UpstageSetting /> | ||
{/* TODO: Anthropic API의 CORS 에러로 인해 현재는 주석 처리 됨. 이후 CORS 문제 해결 시 주석 해제 요망 */} | ||
{/* <AnthropicSetting /> */} | ||
</> | ||
); | ||
} | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 코드와 관련하여 몇 가지 의견을 드립니다: 버그 위험성
개선 제안
다음을 고려해 볼 수 있습니다: // CORS 에러로 인해 현재는 주석 처리 됨. 이후 CORS 문제 해결 시 주석 해제 요망
{/* <AnthropicSetting /> */} 전반적으로 코드의 구조는 깔끔하며, 큰 문제점은 없어 보입니다. 향후 유지보수 및 협업을 위해 위 언급한 사항들을 고려해 보세요. |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,5 +1,6 @@ | ||
import {ChatOllama} from '@langchain/community/chat_models/ollama'; | ||
import {ChatGoogleGenerativeAI} from '@langchain/google-genai'; | ||
import {ChatAnthropic} from '@langchain/anthropic'; | ||
import {ChatOpenAI} from '@langchain/openai'; | ||
import {ChatGroq} from '@langchain/groq'; | ||
|
||
|
@@ -20,6 +21,8 @@ export default function createChatModelInstance(provider: LLM_PROVIDERS, model: | |
return new ChatGoogleGenerativeAI(options); | ||
case LLM_PROVIDERS.GROQ: | ||
return new ChatGroq(options); | ||
case LLM_PROVIDERS.ANTHROPIC: | ||
return new ChatAnthropic(options); | ||
default: | ||
return new ChatOpenAI({ | ||
...options, | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 이번 코드 패치는 새로운 ChatAnthropic 모델을 추가하려는 것으로 보입니다. 아래에 몇 가지 개선 사항 및 버그 위험을 제시합니다:
코드 패치 자체는 간결하고 정확해 보이지만 위의 개선 사항을 반영하면 더 안정적인 코드가 될 것입니다. |
||
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
이 코드 패치에 대한 간단한 코드 리뷰는 다음과 같습니다:
개선 사항:
잠재적 버그 위험:
의존성 충돌:
typescript-eslint
와 관련된 패키지들이 모두 버전이 변경되었기 때문에 주의가 필요합니다.중복 의존성:
langchain
관련 패키지들이 빈번히 업데이트되고 있으며,@langchain/core
에 대해 여러 번의 overrides가 설정되어 있습니다. 같은 기능과 관련된 중복된 설정이 문제를 발생시킬 수 있습니다.카멜 케이스 유지:
devDependencies
항목의 "esbuild" 버전이 0.21.5에서 0.23.0으로 업데이트되었습니다. 서로 다른 부분에서 영향을 미칠 수 있으므로 주의 깊게 테스트해야 합니다.추가적인 제안:
테스트 추가:
"test": "echo \"Error: no test specified\" && exit 1"
부분을 실제 테스트 실행 코드로 대체하는 것이 좋습니다. 이는 자동화된 빌드 파이프라인에서 코드 품질을 개선할 수 있습니다.변경된 항목 설명 문서화: