HEX
Server: LiteSpeed
System: Linux houston.panomity.com 6.8.0-100-generic #100-Ubuntu SMP PREEMPT_DYNAMIC Tue Jan 13 16:40:06 UTC 2026 x86_64
User: nudepix (1011)
PHP: 7.4.33
Disabled: pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals,pcntl_unshare,
Upload Files
File: //opt/agentcloud/webapp/src/components/RetrievalStrategyComponent.tsx
import InfoAlert from 'components/InfoAlert';
import React, { useEffect } from 'react';
import { Retriever, ToolType } from 'struct/tool';

interface RetrievalStrategyProps {
	toolRetriever: Retriever;
	setToolRetriever: (value: Retriever) => void;
	toolDecayRate?: number;
	setToolDecayRate?: (value: number) => void;
	currentDatasource?: { sourceType: string };
	toolTimeWeightField?: string;
	setToolTimeWeightField?: (value: string) => void;
	schema?: any;
	defaultRetriever?: Retriever;
}

const RetrievalStrategyComponent: React.FC<RetrievalStrategyProps> = ({
	toolRetriever,
	setToolRetriever,
	toolDecayRate,
	setToolDecayRate,
	currentDatasource,
	toolTimeWeightField,
	setToolTimeWeightField,
	schema,
	defaultRetriever,
}) => {
	useEffect(() => {
		if (defaultRetriever) {
			setToolRetriever(defaultRetriever || Retriever.SELF_QUERY);
		}
	}, []);
	return (
		<div>
			<div className='mt-2'>
				<label htmlFor='toolRetriever' className='block text-sm font-medium leading-6 text-gray-900 dark:text-slate-400'>
					Retrieval Strategy
				</label>
				<div>
					<select
						required
						id='toolRetriever'
						name='toolRetriever'
						className='w-full rounded-md border-0 py-1.5 text-gray-900 shadow-sm ring-1 ring-inset ring-gray-300 focus:ring-2 focus:ring-inset focus:ring-indigo-600 sm:text-sm sm:leading-6 dark:bg-slate-800 dark:ring-slate-600 dark:text-white'
						value={toolRetriever}
						onChange={(e) => setToolRetriever(e.target.value as Retriever)}
					>
						{defaultRetriever === Retriever.SELF_QUERY ? <>
							<option value={Retriever.SELF_QUERY}>Self Query (Default)</option>
							<option value={Retriever.RAW}>Raw Similarity Search</option>
						</> : <>
							<option value={Retriever.RAW}>Raw Similarity Search (Default)</option>
							<option value={Retriever.SELF_QUERY}>Self Query</option>
						</> }
						<option value={Retriever.MULTI_QUERY}>Multi Query</option>
						{currentDatasource?.sourceType !== 'file' && <option value={Retriever.TIME_WEIGHTED}>Time Weighted</option>}
					</select>
				</div>
			</div>

			{toolRetriever === Retriever.TIME_WEIGHTED && (
				<>
					<div className='mt-2'>
						<label htmlFor='toolDecayRate' className='block text-sm font-medium leading-6 text-gray-900 dark:text-slate-400'>
							Decay Rate
						</label>
						<div>
							<input
								type='range'
								id='toolDecayRate'
								name='toolDecayRate'
								required
								min='0'
								max='1'
								step='0.01'
								value={toolDecayRate}
								onChange={e => setToolDecayRate(parseFloat(e.target.value))}
								className='w-full h-2 bg-gray-200 rounded-lg appearance-none cursor-pointer dark:bg-gray-700'
							/>
							<div className='flex justify-between text-xs text-gray-600'>
								<span>0</span>
								<span>
									<div className='w-full text-center mb-2'>{toolDecayRate}</div>
									{(toolDecayRate === 1 || toolDecayRate === 0) && <InfoAlert message='A decay rate of exactly 0 or 1 is equivalent to default similarity search' color='yellow' />}
								</span>
								<span>1</span>
							</div>
						</div>
					</div>
					{setToolTimeWeightField && <div className='mt-2'>
						<label htmlFor='toolTimeWeightField' className='block text-sm font-medium leading-6 text-gray-900 dark:text-slate-400'>
							Time Weight Field
						</label>
						<div>
							<select
								required
								id='toolTimeWeightField'
								name='toolTimeWeightField'
								className='w-full rounded-md border-0 py-1.5 text-gray-900 shadow-sm ring-1 ring-inset ring-gray-300 focus:ring-2 focus:ring-inset focus:ring-indigo-600 sm:text-sm sm:leading-6 dark:bg-slate-800 dark:ring-slate-600 dark:text-white'
								value={toolTimeWeightField}
								onChange={(e) => setToolTimeWeightField(e.target.value)}
							>
								{schema?.streams?.map((stream, ei) => {
									const foundStreamSchema = schema?.streams?.find(st => st?.stream?.name === stream?.stream?.name);
									const foundStreamProperties = foundStreamSchema?.stream?.jsonSchema?.properties;
									if (!foundStreamProperties) { return; }
									const foundSchemaKeys = Object.keys(foundStreamProperties);
									return <optgroup label={stream?.stream?.name} key={`timeWeightField_optgroup_${ei}`}>
										{foundSchemaKeys
											.map((sk, ski) => (<option key={`timeWeightField_option_${ski}`} value={sk}>{sk}</option>))}
									</optgroup>;
								})}
							</select>
						</div>
					</div>}
				</>
			)}

			{/*toolRetriever === Retriever.SELF_QUERY && ... */}
			
		</div>
	);
};

export default RetrievalStrategyComponent;