Skip to content

Commit

Permalink
Merge pull request #26 from OpenAgentPlatform/model-settings-ignore
Browse files Browse the repository at this point in the history
feat: Add model-specific field filtering for configuration
  • Loading branch information
johnfunmula authored Feb 18, 2025
2 parents 62b6a69 + 24279d4 commit 838b2fd
Show file tree
Hide file tree
Showing 3 changed files with 41 additions and 25 deletions.
4 changes: 2 additions & 2 deletions src/atoms/interfaceState.ts
Original file line number Diff line number Diff line change
Expand Up @@ -77,9 +77,9 @@ export const defaultInterface: Record<ModelProvider, InterfaceDefinition> = {
type: "list",
label: "Model ID",
description: "Model name to use (Please enter API Key first to see available models)",
required: true,
required: false,
default: "",
placeholder: "Select a model",
placeholder: "Default model",
listCallback: async (deps) => {
try {
return await window.ipcRenderer.openaiCompatibleModelList(deps.apiKey, deps.baseURL)
Expand Down
55 changes: 32 additions & 23 deletions src/components/ModelConfigForm.tsx
Original file line number Diff line number Diff line change
@@ -1,7 +1,8 @@
import React, { useState, useEffect, useRef } from "react"
import React, { useState, useEffect, useRef, useCallback } from "react"
import { useTranslation } from "react-i18next"
import { FieldDefinition, ModelProvider, PROVIDER_LABELS } from "../atoms/interfaceState"
import { configAtom, ModelConfig, saveConfigAtom } from "../atoms/configState"
import { ignoreFieldsForModel } from "../constants"
import { useAtom } from "jotai"
import { loadConfigAtom } from "../atoms/configState"
import useDebounce from "../hooks/useDebounce"
Expand Down Expand Up @@ -64,7 +65,6 @@ const ModelConfigForm: React.FC<ModelConfigFormProps> = ({
})
}
}, 100)


useEffect(() => {
if (initProvider.current !== provider) {
Expand Down Expand Up @@ -111,6 +111,32 @@ const ModelConfigForm: React.FC<ModelConfigFormProps> = ({
onProviderChange?.(newProvider)
setIsVerified(false)
}

const prepareModelConfig = useCallback((config: ModelConfig, provider: ModelProvider) => {
const _config = {...config}
if (provider === "openai" && initialData?.baseURL) {
delete (_config as any).baseURL
}

if (_config.topP === 0) {
delete (_config as any).topP
}

if (_config.temperature === 0) {
delete (_config as any).temperature
}

return Object.keys(_config).reduce((acc, key) => {
if (ignoreFieldsForModel.some(item => (item.model === _config.model || _config.model?.startsWith(item.prefix)) && item.fields.includes(key))) {
return acc
}

return {
...acc,
[key]: _config[key as keyof ModelConfig]
}
}, {} as ModelConfig)
}, [])

const verifyModel = async () => {
try {
Expand All @@ -120,19 +146,8 @@ const ModelConfigForm: React.FC<ModelConfigFormProps> = ({
const configuration = {...formData} as Partial<Pick<ModelConfig, "configuration">> & Omit<ModelConfig, "configuration">
delete configuration.configuration

if (provider === "openai" && initialData?.baseURL) {
delete (formData as any).baseURL
delete (configuration as any).baseURL
}

if (formData.topP === 0) {
delete (formData as any).topP
}
const _formData = prepareModelConfig(formData, provider)

if (formData.temperature === 0) {
delete (formData as any).temperature
}

const response = await fetch("/api/modelVerify", {
method: "POST",
headers: {
Expand All @@ -141,7 +156,7 @@ const ModelConfigForm: React.FC<ModelConfigFormProps> = ({
body: JSON.stringify({
provider,
modelSettings: {
...formData,
..._formData,
modelProvider,
configuration,
},
Expand Down Expand Up @@ -192,17 +207,11 @@ const ModelConfigForm: React.FC<ModelConfigFormProps> = ({
if (!validateForm())
return

if (formData.topP === 0) {
delete (formData as any).topP
}

if (formData.temperature === 0) {
delete (formData as any).temperature
}
const _formData = prepareModelConfig(formData, provider)

try {
setIsSubmitting(true)
const data = await saveConfig({ formData, provider })
const data = await saveConfig({ formData: _formData, provider })
await onSubmit(data)
loadConfig()
} finally {
Expand Down
7 changes: 7 additions & 0 deletions src/constants.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
export const ignoreFieldsForModel = [
{
model: "o3-mini",
fields: ["topP", "temperature"],
prefix: "o3-mini",
}
]

0 comments on commit 838b2fd

Please sign in to comment.