MCPcopy Create free account
hub / github.com/buct2012dbl/Dorchestrator / executeWithFallback

Function executeWithFallback

coding-agent/src/agent/provider-utils.ts:108–207  ·  view source on GitHub ↗
(
  provider: LLMProvider,
  resolvedModel: string,
  fn: (provider: LLMProvider) => Promise<T>
)

Source from the content-addressed store, hash-verified

106 * Execute LLM request with automatic fallback on error
107 */
108export async function executeWithFallback<T>(
109 provider: LLMProvider,
110 resolvedModel: string,
111 fn: (provider: LLMProvider) => Promise<T>
112): Promise<T> {
113 const startTime = Date.now();
114
115 try {
116 const result = await fn(provider);
117
118 const duration = Date.now() - startTime;
119 logger.info('LLM request completed', {
120 provider: provider.name,
121 model: resolvedModel,
122 duration
123 });
124 metrics.timing('llm.request.duration', duration, {
125 provider: provider.name,
126 model: resolvedModel,
127 success: 'true'
128 });
129
130 return result;
131
132 } catch (error) {
133 const duration = Date.now() - startTime;
134 logger.error('LLM request failed', {
135 provider: provider.name,
136 model: resolvedModel,
137 duration,
138 error: error instanceof Error ? error.message : String(error)
139 });
140 metrics.timing('llm.request.duration', duration, {
141 provider: provider.name,
142 model: resolvedModel,
143 success: 'false'
144 });
145 metrics.increment('llm.request.failed', 1, {
146 provider: provider.name,
147 model: resolvedModel
148 });
149
150 // Try fallback chain if available
151 const fallbackChain = configLoader.getFallbackChain();
152 const currentProviderIndex = fallbackChain.indexOf(provider.name);
153 const remainingProviders = fallbackChain.slice(currentProviderIndex + 1);
154
155 if (remainingProviders.length > 0) {
156 logger.info('Attempting fallback providers', {
157 failed: provider.name,
158 remaining: remainingProviders
159 });
160
161 for (const fallbackName of remainingProviders) {
162 const fallbackProvider = providerRegistry.get(fallbackName);
163 if (!fallbackProvider) continue;
164
165 try {

Callers 2

processMethod · 0.85

Calls 8

fnFunction · 0.85
infoMethod · 0.80
timingMethod · 0.80
errorMethod · 0.80
incrementMethod · 0.80
getFallbackChainMethod · 0.80
warnMethod · 0.80
getMethod · 0.45

Tested by

no test coverage detected