59 lines
2.7 KiB
JavaScript
59 lines
2.7 KiB
JavaScript
// compare/state.js — shared mutable state for compare modules
|
|
const state = {
|
|
API_BASE: '',
|
|
isActive: false,
|
|
_openingSelector: false, // prevents duplicate compare modals on rapid re-clicks
|
|
_streaming: false,
|
|
_blindMode: true,
|
|
_saveOnClose: false,
|
|
_continueChat: false,
|
|
_timeout: 300, // seconds
|
|
_finishOrder: 0,
|
|
_paneElapsed: [], // per-pane total ms; populated on finish so the
|
|
// Fastest badge can be awarded by actual time
|
|
// (sequential mode otherwise always picks pane 1)
|
|
_selectedModels: [], // [{model, endpoint, endpointId, name}, ...]
|
|
_paneSessionIds: [], // session IDs for each pane
|
|
_paneMetrics: [], // metrics per pane from last round
|
|
_abortControllers: [], // per-pane abort controllers
|
|
_sidebarWasHidden: false,
|
|
_compareElements: [], // elements we added to container (for cleanup)
|
|
_savedToggles: null, // tool toggle states saved before compare
|
|
_savedIndicatorDisplay: {}, // display state of toolbar indicators before compare
|
|
_savedMode: 'chat', // agent/chat mode saved before compare
|
|
_hasVisibleResults: false, // compare results still on screen after close
|
|
_compareMode: 'chat', // 'chat', 'agent', 'search', or 'research'
|
|
_lastPrompt: '', // last prompt sent (for rematch)
|
|
_cachedModels: [], // cached model list for pane dropdowns
|
|
_probed: new Set(), // model IDs that have been successfully probed
|
|
_cachedProviders: null, // cached search providers for search mode
|
|
_searchSynthModels: null, // per-pane synthesis models for search mode
|
|
_parallel: true, // true = run all panes at once, false = one at a time
|
|
_fetchModelsCache: null,
|
|
_fetchModelsCacheTime: 0,
|
|
_expectedAnswer: '', // when an eval prompt with `answer` is picked,
|
|
// stream.js reads this and stamps ✓/✗ per pane
|
|
};
|
|
|
|
/** Reset transient state to defaults — useful for clean restarts. */
|
|
export function reset() {
|
|
state._openingSelector = false;
|
|
state._streaming = false;
|
|
state._finishOrder = 0;
|
|
state._paneElapsed = [];
|
|
state._abortControllers.forEach(c => { if (c) c.abort(); });
|
|
state._abortControllers = [];
|
|
state._paneSessionIds = [];
|
|
state._paneMetrics = [];
|
|
state._compareElements = [];
|
|
state._hasVisibleResults = false;
|
|
state._lastPrompt = '';
|
|
state._cachedModels = [];
|
|
state._probed = new Set();
|
|
state._cachedProviders = null;
|
|
state._fetchModelsCache = null;
|
|
state._fetchModelsCacheTime = 0;
|
|
}
|
|
|
|
export default state;
|