diff --git a/packages/core/src/core/loggingContentGenerator/loggingContentGenerator.ts b/packages/core/src/core/loggingContentGenerator/loggingContentGenerator.ts index 3c64c1267..1a51846c3 100644 --- a/packages/core/src/core/loggingContentGenerator/loggingContentGenerator.ts +++ b/packages/core/src/core/loggingContentGenerator/loggingContentGenerator.ts @@ -159,7 +159,7 @@ export class LoggingContentGenerator implements ContentGenerator { return response; } catch (error) { const durationMs = Date.now() - startTime; - this._logApiError(undefined, durationMs, error, req.model, userPromptId); + this._logApiError('', durationMs, error, req.model, userPromptId); await this.logOpenAIInteraction(openaiRequest, undefined, error); throw error; } @@ -178,7 +178,7 @@ export class LoggingContentGenerator implements ContentGenerator { stream = await this.wrapped.generateContentStream(req, userPromptId); } catch (error) { const durationMs = Date.now() - startTime; - this._logApiError(undefined, durationMs, error, req.model, userPromptId); + this._logApiError('', durationMs, error, req.model, userPromptId); await this.logOpenAIInteraction(openaiRequest, undefined, error); throw error; } @@ -225,7 +225,7 @@ export class LoggingContentGenerator implements ContentGenerator { } catch (error) { const durationMs = Date.now() - startTime; this._logApiError( - undefined, + responses[0]?.responseId ?? '', durationMs, error, responses[0]?.modelVersion || model, diff --git a/packages/core/src/core/openaiContentGenerator/provider/dashscope.test.ts b/packages/core/src/core/openaiContentGenerator/provider/dashscope.test.ts index 2e528120a..e1ecb61b6 100644 --- a/packages/core/src/core/openaiContentGenerator/provider/dashscope.test.ts +++ b/packages/core/src/core/openaiContentGenerator/provider/dashscope.test.ts @@ -117,6 +117,28 @@ describe('DashScopeOpenAICompatibleProvider', () => { expect(result).toBe(true); }); + it('should return true for DashScope coding plan URL', () => { + const config = { + authType: AuthType.USE_OPENAI, + baseUrl: 'https://coding.dashscope.aliyuncs.com/v1', + } as ContentGeneratorConfig; + + const result = + DashScopeOpenAICompatibleProvider.isDashScopeProvider(config); + expect(result).toBe(true); + }); + + it('should return true for DashScope international coding plan URL', () => { + const config = { + authType: AuthType.USE_OPENAI, + baseUrl: 'https://coding-intl.dashscope-intl.aliyuncs.com/v1', + } as ContentGeneratorConfig; + + const result = + DashScopeOpenAICompatibleProvider.isDashScopeProvider(config); + expect(result).toBe(true); + }); + it('should return false for non-DashScope configurations', () => { const configs = [ { diff --git a/packages/core/src/core/openaiContentGenerator/provider/dashscope.ts b/packages/core/src/core/openaiContentGenerator/provider/dashscope.ts index c2134914a..a889401cf 100644 --- a/packages/core/src/core/openaiContentGenerator/provider/dashscope.ts +++ b/packages/core/src/core/openaiContentGenerator/provider/dashscope.ts @@ -35,14 +35,13 @@ export class DashScopeOpenAICompatibleProvider static isDashScopeProvider( contentGeneratorConfig: ContentGeneratorConfig, ): boolean { - const authType = contentGeneratorConfig.authType; - const baseUrl = contentGeneratorConfig.baseUrl; - return ( - authType === AuthType.QWEN_OAUTH || - baseUrl === 'https://dashscope.aliyuncs.com/compatible-mode/v1' || - baseUrl === 'https://dashscope-intl.aliyuncs.com/compatible-mode/v1' || - !baseUrl - ); + const { authType, baseUrl } = contentGeneratorConfig; + + if (authType === AuthType.QWEN_OAUTH) return true; + if (!baseUrl) return true; + + // Matches: dashscope.aliyuncs.com, *.dashscope.aliyuncs.com, or *.dashscope-intl.aliyuncs.com + return /([\w-]+\.)?dashscope(-intl)?\.aliyuncs\.com/i.test(baseUrl); } buildHeaders(): Record {