From 95df69ff829892d62526c9ffe5b348482920d54b Mon Sep 17 00:00:00 2001 From: kangfenmao Date: Tue, 1 Apr 2025 11:05:31 +0800 Subject: [PATCH] refactor: move websearch provider code to providers folder --- .../ProviderSettings/ProviderSetting.tsx | 2 +- .../{ => AiProvider}/AnthropicProvider.ts | 2 +- .../{ => AiProvider}/BaseProvider.ts | 0 .../{ => AiProvider}/GeminiProvider.ts | 0 .../{ => AiProvider}/OpenAIProvider.ts | 0 .../{ => AiProvider}/ProviderFactory.ts | 0 .../{AiProvider.ts => AiProvider/index.ts} | 46 +++++++++++++++++-- .../BaseWebSearchProvider.ts | 0 .../WebSearchProvider}/DefaultProvider.ts | 0 .../WebSearchProvider}/ExaProvider.ts | 0 .../WebSearchProvider}/SearxngProvider.ts | 0 .../WebSearchProvider}/TavilyProvider.ts | 0 .../WebSearchProviderFactory.ts | 0 .../WebSearchProvider/index.ts} | 0 src/renderer/src/providers/index.d.ts | 30 ------------ src/renderer/src/services/WebSearchService.ts | 2 +- src/renderer/src/utils/mcp-tools.ts | 2 +- 17 files changed, 46 insertions(+), 38 deletions(-) rename src/renderer/src/providers/{ => AiProvider}/AnthropicProvider.ts (99%) rename src/renderer/src/providers/{ => AiProvider}/BaseProvider.ts (100%) rename src/renderer/src/providers/{ => AiProvider}/GeminiProvider.ts (100%) rename src/renderer/src/providers/{ => AiProvider}/OpenAIProvider.ts (100%) rename src/renderer/src/providers/{ => AiProvider}/ProviderFactory.ts (100%) rename src/renderer/src/providers/{AiProvider.ts => AiProvider/index.ts} (66%) rename src/renderer/src/{webSearchProvider => providers/WebSearchProvider}/BaseWebSearchProvider.ts (100%) rename src/renderer/src/{webSearchProvider => providers/WebSearchProvider}/DefaultProvider.ts (100%) rename src/renderer/src/{webSearchProvider => providers/WebSearchProvider}/ExaProvider.ts (100%) rename src/renderer/src/{webSearchProvider => providers/WebSearchProvider}/SearxngProvider.ts (100%) rename src/renderer/src/{webSearchProvider => providers/WebSearchProvider}/TavilyProvider.ts (100%) rename src/renderer/src/{webSearchProvider => providers/WebSearchProvider}/WebSearchProviderFactory.ts (100%) rename src/renderer/src/{webSearchProvider/WebSearchEngineProvider.ts => providers/WebSearchProvider/index.ts} (100%) delete mode 100644 src/renderer/src/providers/index.d.ts diff --git a/src/renderer/src/pages/settings/ProviderSettings/ProviderSetting.tsx b/src/renderer/src/pages/settings/ProviderSettings/ProviderSetting.tsx index fdb89b24..e4f65263 100644 --- a/src/renderer/src/pages/settings/ProviderSettings/ProviderSetting.tsx +++ b/src/renderer/src/pages/settings/ProviderSettings/ProviderSetting.tsx @@ -6,7 +6,7 @@ import { PROVIDER_CONFIG } from '@renderer/config/providers' import { useTheme } from '@renderer/context/ThemeProvider' import { useProvider } from '@renderer/hooks/useProvider' import i18n from '@renderer/i18n' -import { isOpenAIProvider } from '@renderer/providers/ProviderFactory' +import { isOpenAIProvider } from '@renderer/providers/AiProvider/ProviderFactory' import { checkApi, formatApiKeys } from '@renderer/services/ApiService' import { checkModelsHealth, ModelCheckStatus } from '@renderer/services/HealthCheckService' import { isProviderSupportAuth, isProviderSupportCharge } from '@renderer/services/ProviderService' diff --git a/src/renderer/src/providers/AnthropicProvider.ts b/src/renderer/src/providers/AiProvider/AnthropicProvider.ts similarity index 99% rename from src/renderer/src/providers/AnthropicProvider.ts rename to src/renderer/src/providers/AiProvider/AnthropicProvider.ts index cad5df45..0c30513d 100644 --- a/src/renderer/src/providers/AnthropicProvider.ts +++ b/src/renderer/src/providers/AiProvider/AnthropicProvider.ts @@ -221,7 +221,7 @@ export default class AnthropicProvider extends BaseProvider { return onChunk({ text, reasoning_content, - usage: message.usage, + usage: message.usage as any, metrics: { completion_tokens: message.usage.output_tokens, time_completion_millsec, diff --git a/src/renderer/src/providers/BaseProvider.ts b/src/renderer/src/providers/AiProvider/BaseProvider.ts similarity index 100% rename from src/renderer/src/providers/BaseProvider.ts rename to src/renderer/src/providers/AiProvider/BaseProvider.ts diff --git a/src/renderer/src/providers/GeminiProvider.ts b/src/renderer/src/providers/AiProvider/GeminiProvider.ts similarity index 100% rename from src/renderer/src/providers/GeminiProvider.ts rename to src/renderer/src/providers/AiProvider/GeminiProvider.ts diff --git a/src/renderer/src/providers/OpenAIProvider.ts b/src/renderer/src/providers/AiProvider/OpenAIProvider.ts similarity index 100% rename from src/renderer/src/providers/OpenAIProvider.ts rename to src/renderer/src/providers/AiProvider/OpenAIProvider.ts diff --git a/src/renderer/src/providers/ProviderFactory.ts b/src/renderer/src/providers/AiProvider/ProviderFactory.ts similarity index 100% rename from src/renderer/src/providers/ProviderFactory.ts rename to src/renderer/src/providers/AiProvider/ProviderFactory.ts diff --git a/src/renderer/src/providers/AiProvider.ts b/src/renderer/src/providers/AiProvider/index.ts similarity index 66% rename from src/renderer/src/providers/AiProvider.ts rename to src/renderer/src/providers/AiProvider/index.ts index d57d8589..e736fca7 100644 --- a/src/renderer/src/providers/AiProvider.ts +++ b/src/renderer/src/providers/AiProvider/index.ts @@ -1,9 +1,47 @@ -import BaseProvider from '@renderer/providers/BaseProvider' -import ProviderFactory from '@renderer/providers/ProviderFactory' -import { Assistant, GenerateImageParams, Message, Model, Provider, Suggestion } from '@renderer/types' +import type { GroundingMetadata } from '@google/generative-ai' +import BaseProvider from '@renderer/providers/AiProvider/BaseProvider' +import ProviderFactory from '@renderer/providers/AiProvider/ProviderFactory' +import type { + Assistant, + GenerateImageParams, + GenerateImageResponse, + MCPTool, + MCPToolResponse, + Message, + Metrics, + Model, + Provider, + Suggestion +} from '@renderer/types' import OpenAI from 'openai' -import { CompletionsParams } from '.' +export interface ChunkCallbackData { + text?: string + reasoning_content?: string + usage?: OpenAI.Completions.CompletionUsage + metrics?: Metrics + search?: GroundingMetadata + citations?: string[] + mcpToolResponse?: MCPToolResponse[] + generateImage?: GenerateImageResponse +} + +export interface CompletionsParams { + messages: Message[] + assistant: Assistant + onChunk: ({ + text, + reasoning_content, + usage, + metrics, + search, + citations, + mcpToolResponse, + generateImage + }: ChunkCallbackData) => void + onFilterMessages: (messages: Message[]) => void + mcpTools?: MCPTool[] +} export default class AiProvider { private sdk: BaseProvider diff --git a/src/renderer/src/webSearchProvider/BaseWebSearchProvider.ts b/src/renderer/src/providers/WebSearchProvider/BaseWebSearchProvider.ts similarity index 100% rename from src/renderer/src/webSearchProvider/BaseWebSearchProvider.ts rename to src/renderer/src/providers/WebSearchProvider/BaseWebSearchProvider.ts diff --git a/src/renderer/src/webSearchProvider/DefaultProvider.ts b/src/renderer/src/providers/WebSearchProvider/DefaultProvider.ts similarity index 100% rename from src/renderer/src/webSearchProvider/DefaultProvider.ts rename to src/renderer/src/providers/WebSearchProvider/DefaultProvider.ts diff --git a/src/renderer/src/webSearchProvider/ExaProvider.ts b/src/renderer/src/providers/WebSearchProvider/ExaProvider.ts similarity index 100% rename from src/renderer/src/webSearchProvider/ExaProvider.ts rename to src/renderer/src/providers/WebSearchProvider/ExaProvider.ts diff --git a/src/renderer/src/webSearchProvider/SearxngProvider.ts b/src/renderer/src/providers/WebSearchProvider/SearxngProvider.ts similarity index 100% rename from src/renderer/src/webSearchProvider/SearxngProvider.ts rename to src/renderer/src/providers/WebSearchProvider/SearxngProvider.ts diff --git a/src/renderer/src/webSearchProvider/TavilyProvider.ts b/src/renderer/src/providers/WebSearchProvider/TavilyProvider.ts similarity index 100% rename from src/renderer/src/webSearchProvider/TavilyProvider.ts rename to src/renderer/src/providers/WebSearchProvider/TavilyProvider.ts diff --git a/src/renderer/src/webSearchProvider/WebSearchProviderFactory.ts b/src/renderer/src/providers/WebSearchProvider/WebSearchProviderFactory.ts similarity index 100% rename from src/renderer/src/webSearchProvider/WebSearchProviderFactory.ts rename to src/renderer/src/providers/WebSearchProvider/WebSearchProviderFactory.ts diff --git a/src/renderer/src/webSearchProvider/WebSearchEngineProvider.ts b/src/renderer/src/providers/WebSearchProvider/index.ts similarity index 100% rename from src/renderer/src/webSearchProvider/WebSearchEngineProvider.ts rename to src/renderer/src/providers/WebSearchProvider/index.ts diff --git a/src/renderer/src/providers/index.d.ts b/src/renderer/src/providers/index.d.ts deleted file mode 100644 index f634880d..00000000 --- a/src/renderer/src/providers/index.d.ts +++ /dev/null @@ -1,30 +0,0 @@ -import type { GroundingMetadata } from '@google/generative-ai' -import type { Assistant, MCPToolResponse, Message, Metrics } from '@renderer/types' - -interface ChunkCallbackData { - text?: string - reasoning_content?: string - usage?: OpenAI.Completions.CompletionUsage - metrics?: Metrics - search?: GroundingMetadata - citations?: string[] - mcpToolResponse?: MCPToolResponse[] - generateImage?: GenerateImageResponse -} - -interface CompletionsParams { - messages: Message[] - assistant: Assistant - onChunk: ({ - text, - reasoning_content, - usage, - metrics, - search, - citations, - mcpToolResponse, - generateImage - }: ChunkCallbackData) => void - onFilterMessages: (messages: Message[]) => void - mcpTools?: MCPTool[] -} diff --git a/src/renderer/src/services/WebSearchService.ts b/src/renderer/src/services/WebSearchService.ts index 9b7718af..16bf63ba 100644 --- a/src/renderer/src/services/WebSearchService.ts +++ b/src/renderer/src/services/WebSearchService.ts @@ -1,8 +1,8 @@ +import WebSearchEngineProvider from '@renderer/providers/WebSearchProvider' import store from '@renderer/store' import { setDefaultProvider, WebSearchState } from '@renderer/store/websearch' import { WebSearchProvider, WebSearchResponse } from '@renderer/types' import { hasObjectKey } from '@renderer/utils' -import WebSearchEngineProvider from '@renderer/webSearchProvider/WebSearchEngineProvider' import dayjs from 'dayjs' /** diff --git a/src/renderer/src/utils/mcp-tools.ts b/src/renderer/src/utils/mcp-tools.ts index 22b78f11..46eea760 100644 --- a/src/renderer/src/utils/mcp-tools.ts +++ b/src/renderer/src/utils/mcp-tools.ts @@ -18,7 +18,7 @@ import { addMCPServer } from '@renderer/store/mcp' import { MCPServer, MCPTool, MCPToolResponse } from '@renderer/types' import { ChatCompletionMessageToolCall, ChatCompletionTool } from 'openai/resources' -import { ChunkCallbackData } from '../providers' +import { ChunkCallbackData } from '../providers/AiProvider' const ensureValidSchema = (obj: Record): FunctionDeclarationSchemaProperty => { // Filter out unsupported keys for Gemini