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:
Bradley Axen
2025-01-24 13:04:43 -08:00
committed by GitHub
parent eccb1b2261
commit 1c9a7c0b05
688 changed files with 71147 additions and 19132 deletions
@@ -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;
}