From 90f5c44b91c0f62f3d87ab0e28b288111bc7d5d9 Mon Sep 17 00:00:00 2001 From: rjmacarthy Date: Sun, 21 Apr 2024 22:24:37 +0100 Subject: [PATCH] add model name/select to provider header --- src/extension/cache.ts | 2 +- src/webview/model-select.tsx | 23 +++++------ src/webview/provider-select.tsx | 4 +- src/webview/providers.module.css | 11 ++++++ src/webview/providers.tsx | 65 ++++++++++++++++++++++++++------ src/webview/utils.ts | 8 ++-- 6 files changed, 79 insertions(+), 34 deletions(-) diff --git a/src/extension/cache.ts b/src/extension/cache.ts index 04b1d286..0ef01f33 100644 --- a/src/extension/cache.ts +++ b/src/extension/cache.ts @@ -39,7 +39,7 @@ export class LRUCache { } normalize(src: string): string { - return src.split('\n').join('').replace(/\s+/gm, '').replace(' ', '') + return src.split('\n').join('').replace(/\s+/g, '').replace(/\s/g, '') } getKey(prefixSuffix: PrefixSuffix): string { diff --git a/src/webview/model-select.tsx b/src/webview/model-select.tsx index e4d2547e..a04db2af 100644 --- a/src/webview/model-select.tsx +++ b/src/webview/model-select.tsx @@ -17,19 +17,14 @@ export const ModelSelect = ({ model, models, setModel }: Props) => { } return ( -
-
- -
- - {models?.map((model, index) => { - return ( - - ) - })} - -
+ + {models?.map((model, index) => { + return ( + + ) + })} + ) } diff --git a/src/webview/provider-select.tsx b/src/webview/provider-select.tsx index a3a85670..2603623a 100644 --- a/src/webview/provider-select.tsx +++ b/src/webview/provider-select.tsx @@ -43,7 +43,7 @@ export const ProviderSelect = () => { .sort((a, b) => a.modelName.localeCompare(b.modelName)) .map((provider, index) => ( - {`${provider.label} (${provider.provider})`} + {`${provider.label} (${provider.modelName})`} ))} @@ -59,7 +59,7 @@ export const ProviderSelect = () => { .sort((a, b) => a.modelName.localeCompare(b.modelName)) .map((provider, index) => ( - {`${provider.label} (${provider.provider})`} + {`${provider.label} (${provider.modelName})`} ))} diff --git a/src/webview/providers.module.css b/src/webview/providers.module.css index 1306d687..fbb9103f 100644 --- a/src/webview/providers.module.css +++ b/src/webview/providers.module.css @@ -33,6 +33,10 @@ flex-wrap: wrap; } +.providerHeader, .providerForm vscode-dropdown { + flex-grow: 1; +} + .providerHeader h4 { margin: 0; } @@ -52,6 +56,8 @@ .providerForm { width: 100%; + display: flex; + flex-direction: column; } .providerForm div { @@ -68,6 +74,11 @@ gap: 5px; } +.providerHeader vscode-dropdown { + flex-grow: 1; + margin-right: 10px; +} + .providerHeader svg { width: 20px; } diff --git a/src/webview/providers.tsx b/src/webview/providers.tsx index b0972c87..5249359f 100644 --- a/src/webview/providers.tsx +++ b/src/webview/providers.tsx @@ -14,13 +14,16 @@ import styles from './providers.module.css' import { TwinnyProvider } from '../extension/provider-manager' import { DEFAULT_PROVIDER_FORM_VALUES, - FIM_TEMPLATE_FORMAT, + FIM_TEMPLATE_FORMAT } from '../common/constants' import { ModelSelect } from './model-select' export const Providers = () => { const [showForm, setShowForm] = React.useState(false) const [provider, setProvider] = React.useState() + const { models } = useOllamaModels() + const hasOllamaModels = !!models?.length + const { updateProvider } = useProviders() const { providers, removeProvider, copyProvider, resetProviders } = useProviders() @@ -50,6 +53,19 @@ export const Providers = () => { resetProviders() } + const handleSetModel = (provider: TwinnyProvider, model: string) => { + updateProvider({ + ...provider, + modelName: model + }) + } + + const handleChange = (provider: TwinnyProvider, e: unknown) => { + const event = e as unknown as React.ChangeEvent + const { value } = event.target + handleSetModel(provider, value) + } + return (

Providers

@@ -69,7 +85,27 @@ export const Providers = () => { {Object.values(providers).map((provider, index) => (
-

{provider.label}

+ {provider.provider === ApiProviders.Ollama && + hasOllamaModels && ( + + handleSetModel(provider, model) + } + /> + )} + {provider.provider !== ApiProviders.Ollama && ( + { + handleChange(provider, e) + }} + value={provider.modelName} + placeholder='Applicable for some providers like "Ollama"' + > + )}
{
+
+ Label: {provider.label} +
Provider: {provider.provider}
@@ -110,9 +149,6 @@ export const Providers = () => { Fim Template: {provider.fimTemplate}
)} -
- Model: {provider.modelName} -
Hostname: {provider.apiHostname}
@@ -271,13 +307,18 @@ function ProviderForm({ onClose, provider }: ProviderFormProps) {
{formState.provider === ApiProviders.Ollama && hasOllamaModels && ( - { - setFormState({ ...formState, modelName: model }) - }} - /> +
+
+ +
+ { + setFormState({ ...formState, modelName: model }) + }} + /> +
)} {formState.provider !== ApiProviders.Ollama && ( diff --git a/src/webview/utils.ts b/src/webview/utils.ts index df7056b9..77f89d26 100644 --- a/src/webview/utils.ts +++ b/src/webview/utils.ts @@ -1,6 +1,4 @@ -import { - EMPTY_MESAGE, -} from '../common/constants' +import { EMPTY_MESAGE } from '../common/constants' import { CodeLanguage, supportedLanguages } from '../common/languages' import { LanguageType, ServerMessage } from '../common/types' @@ -57,8 +55,8 @@ export const kebabToSentence = (kebabStr: string) => { export const getLineBreakCount = (str: string) => str.split('\n').length export const getModelShortName = (name: string) => { - if (name.length > 32) { - return `${name.substring(0, 15)}...${name.substring(name.length - 16)}` + if (name.length > 25) { + return `${name.substring(0, 10)}...${name.substring(name.length - 10)}` } return name }