feat: V1.0 (#734)
Co-authored-by: Michael Neale <michael.neale@gmail.com> Co-authored-by: Wendy Tang <wendytang@squareup.com> Co-authored-by: Jarrod Sibbison <72240382+jsibbison-square@users.noreply.github.com> Co-authored-by: Alex Hancock <alex.hancock@example.com> Co-authored-by: Alex Hancock <alexhancock@block.xyz> Co-authored-by: Lifei Zhou <lifei@squareup.com> Co-authored-by: Wes <141185334+wesrblock@users.noreply.github.com> Co-authored-by: Max Novich <maksymstepanenko1990@gmail.com> Co-authored-by: Zaki Ali <zaki@squareup.com> Co-authored-by: Salman Mohammed <smohammed@squareup.com> Co-authored-by: Kalvin C <kalvinnchau@users.noreply.github.com> Co-authored-by: Alec Thomas <alec@swapoff.org> Co-authored-by: lily-de <119957291+lily-de@users.noreply.github.com> Co-authored-by: kalvinnchau <kalvin@block.xyz> Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> Co-authored-by: Rizel Scarlett <rizel@squareup.com> Co-authored-by: bwrage <bwrage@squareup.com> Co-authored-by: Kalvin Chau <kalvin@squareup.com> Co-authored-by: Alice Hau <110418948+ahau-square@users.noreply.github.com> Co-authored-by: Alistair Gray <ajgray@stripe.com> Co-authored-by: Nahiyan Khan <nahiyan.khan@gmail.com> Co-authored-by: Alex Hancock <alexhancock@squareup.com> Co-authored-by: Nahiyan Khan <nahiyan@squareup.com> Co-authored-by: marcelle <1852848+laanak08@users.noreply.github.com> Co-authored-by: Yingjie He <yingjiehe@block.xyz> Co-authored-by: Yingjie He <yingjiehe@squareup.com> Co-authored-by: Lily Delalande <ldelalande@block.xyz> Co-authored-by: Adewale Abati <acekyd01@gmail.com> Co-authored-by: Ebony Louis <ebony774@gmail.com> Co-authored-by: Angie Jones <jones.angie@gmail.com> Co-authored-by: Ebony Louis <55366651+EbonyLouis@users.noreply.github.com>
This commit is contained in:
@@ -0,0 +1,80 @@
|
||||
import { useModel } from './ModelContext'; // Import the useModel hook
|
||||
import { Model } from './ModelContext';
|
||||
import { useMemo } from 'react';
|
||||
import { goose_models } from './hardcoded_stuff';
|
||||
import { ToastFailureGeneral, ToastSuccessModelSwitch } from './toasts';
|
||||
import { initializeSystem } from '../../../utils/providerUtils';
|
||||
import { useRecentModels } from './RecentModels';
|
||||
|
||||
export function useHandleModelSelection() {
|
||||
const { switchModel, currentModel } = useModel(); // Access switchModel via useModel
|
||||
const { addRecentModel } = useRecentModels(); // Access addRecentModel from useRecentModels
|
||||
|
||||
return async (model: Model, componentName?: string) => {
|
||||
try {
|
||||
// Check if the selected model is already the active model
|
||||
if (currentModel && currentModel.id === model.id) {
|
||||
console.log(`[${componentName}] Selected model is already active: ${model.name}`);
|
||||
return;
|
||||
}
|
||||
|
||||
// Call the context's switchModel to update the model
|
||||
switchModel(model);
|
||||
|
||||
// Keep track of the recently used models
|
||||
addRecentModel(model);
|
||||
|
||||
// switch models via the backend
|
||||
// initialize agent
|
||||
await initializeSystem(model.provider.toLowerCase(), model.name);
|
||||
|
||||
// Log to the console for tracking
|
||||
console.log(`[${componentName}] Switched to model: ${model.name} (${model.provider})`);
|
||||
|
||||
// Display a success toast notification
|
||||
ToastSuccessModelSwitch(model);
|
||||
} catch (error) {
|
||||
// Handle errors gracefully
|
||||
console.error(`[${componentName}] Failed to switch model:`, error);
|
||||
// Display an error toast notification
|
||||
ToastFailureGeneral(`Failed to switch to model: ${model.name}`);
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
export function createSelectedModel(selectedProvider, modelName) {
|
||||
let selectedModel = goose_models.find(
|
||||
(model) =>
|
||||
model.provider.toLowerCase() === selectedProvider &&
|
||||
model.name.toLowerCase() === modelName.toLowerCase()
|
||||
);
|
||||
|
||||
if (!selectedModel) {
|
||||
// Normalize the casing for the provider using the first matching model
|
||||
const normalizedProvider =
|
||||
goose_models.find((model) => model.provider.toLowerCase() === selectedProvider)?.provider ||
|
||||
selectedProvider;
|
||||
|
||||
// Construct a model object
|
||||
selectedModel = {
|
||||
name: modelName,
|
||||
provider: normalizedProvider, // Use normalized provider
|
||||
};
|
||||
}
|
||||
|
||||
return selectedModel;
|
||||
}
|
||||
|
||||
export function useFilteredModels(search: string, activeKeys: string[]) {
|
||||
const filteredModels = useMemo(() => {
|
||||
const modelOptions = goose_models.filter((model) => activeKeys.includes(model.provider));
|
||||
|
||||
if (!search) {
|
||||
return modelOptions; // Return all models if no search term
|
||||
}
|
||||
|
||||
return modelOptions.filter((model) => model.name.toLowerCase().includes(search.toLowerCase()));
|
||||
}, [search, activeKeys]);
|
||||
|
||||
return filteredModels;
|
||||
}
|
||||
Reference in New Issue
Block a user