Files
hack/tools/scripts/llm-key-hunter/results/_cache/content/aceguru-mjh_apex-ai-agent.json
T

1 line
28 KiB
JSON
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
{"repo": "aceguru-mjh/apex-ai-agent", "files": {"core/integration/src/main/java/com/apex/agent/integration/category/models/BuiltinModelProviders.kt": {"fb9ad78c8f881c24b812fb131f892232349c0ada": {"t": 1785745718.4270284, "n": 8265, "h": "ac5bf2ff368a15b2", "c": "package com.apex.agent.integration.category.models\n\nimport com.apex.agent.integration.api.IntegrationCategory\nimport com.apex.agent.integration.market.IntegrationSourceType\nimport com.apex.agent.integration.market.MarketItem\n\n/**\n * 内置 LLM Provider 配置。\n *\n * 迁移自原 Apex-agent 的 ProviderProfile,包含主流 LLM 平台的连接配置。\n * 业务侧可直接使用这些预设配置,无需手动填写 endpoint 和模型名。\n *\n * # 包含的 Provider\n * - DeepSeek(深度推理/代码生成)\n * - Claude(Anthropic,最强推理)\n * - OpenAI(GPT-4/GPT-3.5)\n * - 通义千问(阿里,国内直连)\n * - 智谱 GLM(国内开源)\n * - Moonshot(Kimi,长上下文)\n * - 月之暗面(MiniMax)\n * - 本地 Ollama(离线推理)\n */\nobject BuiltinModelProviders {\n\n /**\n * Provider 认证类型。\n */\n enum class AuthType { API_KEY, OAUTH, NONE }\n\n /**\n * Provider 类型。\n */\n enum class ProviderType { CLOUD, LOCAL, SELF_HOSTED }\n\n /**\n * LLM Provider 配置。\n */\n data class ProviderConfig(\n val name: String,\n val displayName: String,\n val baseUrl: String,\n val apiKeyEnvVar: String,\n val authType: AuthType = AuthType.API_KEY,\n val providerType: ProviderType = ProviderType.CLOUD,\n val defaultModel: String,\n val modelsUrl: String = \"\",\n val icon: String = \"\",\n val description: String,\n val supportsStreaming: Boolean = true,\n val freeQuota: String = \"\",\n val region: String = \"global\"\n )\n\n /**\n * 所有内置 Provider 配置。\n */\n val providers: List<ProviderConfig> = listOf(\n ProviderConfig(\n name = \"deepseek\",\n displayName = \"DeepSeek\",\n baseUrl = \"https://api.deepseek.com/v1\",\n apiKeyEnvVar = \"DEEPSEEK_API_KEY\",\n defaultModel = \"deepseek-chat\",\n description = \"高性价比 LLM API,深度推理能力\",\n freeQuota = \"新用户赠送\",\n icon = \"https://platform.deepseek.com/favicon.ico\"\n ),\n ProviderConfig(\n name = \"deepseek-reasoner\",\n displayName = \"DeepSeek Reasoner\",\n baseUrl = \"https://api.deepseek.com/v1\",\n apiKeyEnvVar = \"DEEPSEEK_API_KEY\",\n defaultModel = \"deepseek-reasoner\",\n description = \"深度推理模型,链式思考(CoT)\",\n freeQuota = \"新用户赠送\",\n icon = \"https://platform.deepseek.com/favicon.ico\"\n ),\n ProviderConfig(\n name = \"claude\",\n displayName = \"Claude (Anthropic)\",\n baseUrl = \"https://api.anthropic.com/v1\",\n apiKeyEnvVar = \"ANTHROPIC_API_KEY\",\n defaultModel = \"claude-sonnet-4-20250514\",\n description = \"Anthropic 最强推理模型,擅长长文本分析\",\n freeQuota = \"有限免费额度\",\n icon = \"https://anthropic.com/favicon.ico\"\n ),\n ProviderConfig(\n name = \"openai\",\n displayName = \"OpenAI\",\n baseUrl = \"https://api.openai.com/v1\",\n apiKeyEnvVar = \"OPENAI_API_KEY\",\n defaultModel = \"gpt-4o\",\n modelsUrl = \"https://api.openai.com/v1/models\",\n description = \"GPT-4o / GPT-4 Turbo / GPT-3.5\",\n freeQuota = \"无免费额度\",\n icon = \"https://openai.com/favicon.ico\"\n ),\n ProviderConfig(\n name = \"qwen\",\n displayName = \"通义千问\",\n baseUrl = \"https://dashscope.aliyuncs.com/api/v1\",\n apiKeyEnvVar = \"DASHSCOPE_API_KEY\",\n defaultModel = \"qwen-max\",\n description = \"阿里通义千问,国内直连,多模态理解\",\n freeQuota = \"10 万 tokens/月\",\n region = \"cn\",\n icon = \"https://dashscope.aliyuncs.com/favicon.ico\"\n ),\n ProviderConfig(\n name = \"glm\",\n displayName = \"智谱 GLM\",\n baseUrl = \"https://open.bigmodel.cn/api/paas/v4\",\n apiKeyEnvVar = \"ZHIPU_API_KEY\",\n defaultModel = \"glm-4\",\n description = \"智谱 AI GLM-4,支持工具调用\",\n freeQuota = \"赠送 tokens\",\n region = \"cn\",\n icon = \"https://open.bigmodel.cn/favicon.ico\"\n ),\n ProviderConfig(\n name = \"moonshot\",\n displayName = \"Moonshot (Kimi)\",\n baseUrl = \"https://api.moonshot.cn/v1\",\n apiKeyEnvVar = \"MOONSHOT_API_KEY\",\n defaultModel = \"moonshot-v1-128k\",\n description = \"Kimi 长上下文模型,128K token 窗口\",\n freeQuota = \"有限免费额度\",\n region = \"cn\",\n icon = \"https://moonshot.cn/favicon.ico\"\n ),\n ProviderConfig(\n name = \"minimax\",\n displayName = \"MiniMax\",\n baseUrl = \"https://api.minimax.chat/v1\",\n apiKeyEnvVar = \"MINIMAX_API_KEY\",\n defaultModel = \"abab6.5-chat\",\n description = \"MiniMax 对话模型\",\n freeQuota = \"赠送 tokens\",\n region = \"cn\",\n icon = null ?: \"\"\n ),\n ProviderConfig(\n name = \"baichuan\",\n displayName = \"百川大模型\",\n baseUrl = \"https://api.baichuan-ai.com/v1\",\n apiKeyEnvVar = \"BAICHUAN_API_KEY\",\n defaultModel = \"Baichuan2-Turbo\",\n description = \"百川智能,中文能力优秀\",\n freeQuota = \"赠送 tokens\",\n region = \"cn\",\n icon = null ?: \"\"\n ),\n ProviderConfig(\n name = \"ollama\",\n displayName = \"Ollama (本地)\",\n baseUrl = \"http://localhost:11434/v1\",\n apiKeyEnvVar = \"\",\n authType = AuthType.NONE,\n providerType = ProviderType.LOCAL,\n defaultModel = \"llama3.2\",\n description = \"本地推理,完全离线,无需 API Key\",\n freeQuota = \"永久免费\",\n region = \"local\",\n icon = \"https://ollama.ai/favicon.ico\"\n ),\n ProviderConfig(\n name = \"agnes\",\n displayName = \"Agnes AI\",\n baseUrl = \"https://api.agnes.ai/v1\",\n apiKeyEnvVar = \"AGNES_API_KEY\",\n authType = AuthType.NONE,\n defaultModel = \"agnes-text-pro\",\n description = \"全球全模态永久免费,无额度限制\",\n freeQuota = \"永久免费\",\n icon = null ?: \"\"\n )\n )\n\n /**\n * 转换为 [MarketItem] 列表。\n */\n fun toMarketItems(marketId: String = \"builtin_models\"): List<MarketItem> {\n return providers.map { provider ->\n MarketItem(\n id = \"$marketId:${provider.name}\",\n name = provider.displayName,\n description = provider.description,\n author = provider.name,\n version = \"1.0.0\",\n category = IntegrationCategory.MODEL_PLATFORMS,\n marketId = marketId,\n sourceType = IntegrationSourceType.OFFICIAL_MARKET,\n downloadUrl = provider.baseUrl,\n tags = buildList {\n add(provider.providerType.name.lowercase())\n if (provider.region == \"cn\") add(\"国内\")\n if (provider.freeQuota.contains(\"永久免费\")) add(\"免费\")\n if (provider.supportsStreaming) add(\"streaming\")\n },\n rating = 4.5,\n downloadCount = 0,\n verified = true,\n metadata = mapOf(\n \"baseUrl\" to provider.baseUrl,\n \"defaultModel\" to provider.defaultModel,\n \"authType\" to provider.authType.name,\n \"providerType\" to provider.providerType.name,\n \"freeQuota\" to provider.freeQuota,\n \"region\" to provider.region,\n \"apiKeyEnvVar\" to provider.apiKeyEnvVar,\n \"supportsStreaming\" to provider.supportsStreaming.toString()\n )\n )\n }\n }\n\n /**\n * 按 name 获取配置。\n */\n fun getByName(name: String): ProviderConfig? = providers.find { it.name == name }\n\n /**\n * 按区域获取(global/cn/local)。\n */\n fun getByRegion(region: String): List<ProviderConfig> {\n return providers.filter { it.region == region }\n }\n\n /**\n * 获取所有免费 Provider。\n */\n fun getFreeProviders(): List<ProviderConfig> {\n return providers.filter {\n it.freeQuota.contains(\"永久免费\") || it.freeQuota.contains(\"免费\")\n }\n }\n\n /**\n * 获取本地 Provider。\n */\n fun getLocalProviders(): List<ProviderConfig> {\n return providers.filter { it.providerType == ProviderType.LOCAL }\n }\n}\n"}, "9e576bf00337679d804cbb1eb3ba8205a3e6527f": {"t": 1785755906.7734342, "n": 8265, "h": "ac5bf2ff368a15b2", "c": "package com.apex.agent.integration.category.models\n\nimport com.apex.agent.integration.api.IntegrationCategory\nimport com.apex.agent.integration.market.IntegrationSourceType\nimport com.apex.agent.integration.market.MarketItem\n\n/**\n * 内置 LLM Provider 配置。\n *\n * 迁移自原 Apex-agent 的 ProviderProfile,包含主流 LLM 平台的连接配置。\n * 业务侧可直接使用这些预设配置,无需手动填写 endpoint 和模型名。\n *\n * # 包含的 Provider\n * - DeepSeek(深度推理/代码生成)\n * - Claude(Anthropic,最强推理)\n * - OpenAI(GPT-4/GPT-3.5)\n * - 通义千问(阿里,国内直连)\n * - 智谱 GLM(国内开源)\n * - Moonshot(Kimi,长上下文)\n * - 月之暗面(MiniMax)\n * - 本地 Ollama(离线推理)\n */\nobject BuiltinModelProviders {\n\n /**\n * Provider 认证类型。\n */\n enum class AuthType { API_KEY, OAUTH, NONE }\n\n /**\n * Provider 类型。\n */\n enum class ProviderType { CLOUD, LOCAL, SELF_HOSTED }\n\n /**\n * LLM Provider 配置。\n */\n data class ProviderConfig(\n val name: String,\n val displayName: String,\n val baseUrl: String,\n val apiKeyEnvVar: String,\n val authType: AuthType = AuthType.API_KEY,\n val providerType: ProviderType = ProviderType.CLOUD,\n val defaultModel: String,\n val modelsUrl: String = \"\",\n val icon: String = \"\",\n val description: String,\n val supportsStreaming: Boolean = true,\n val freeQuota: String = \"\",\n val region: String = \"global\"\n )\n\n /**\n * 所有内置 Provider 配置。\n */\n val providers: List<ProviderConfig> = listOf(\n ProviderConfig(\n name = \"deepseek\",\n displayName = \"DeepSeek\",\n baseUrl = \"https://api.deepseek.com/v1\",\n apiKeyEnvVar = \"DEEPSEEK_API_KEY\",\n defaultModel = \"deepseek-chat\",\n description = \"高性价比 LLM API,深度推理能力\",\n freeQuota = \"新用户赠送\",\n icon = \"https://platform.deepseek.com/favicon.ico\"\n ),\n ProviderConfig(\n name = \"deepseek-reasoner\",\n displayName = \"DeepSeek Reasoner\",\n baseUrl = \"https://api.deepseek.com/v1\",\n apiKeyEnvVar = \"DEEPSEEK_API_KEY\",\n defaultModel = \"deepseek-reasoner\",\n description = \"深度推理模型,链式思考(CoT)\",\n freeQuota = \"新用户赠送\",\n icon = \"https://platform.deepseek.com/favicon.ico\"\n ),\n ProviderConfig(\n name = \"claude\",\n displayName = \"Claude (Anthropic)\",\n baseUrl = \"https://api.anthropic.com/v1\",\n apiKeyEnvVar = \"ANTHROPIC_API_KEY\",\n defaultModel = \"claude-sonnet-4-20250514\",\n description = \"Anthropic 最强推理模型,擅长长文本分析\",\n freeQuota = \"有限免费额度\",\n icon = \"https://anthropic.com/favicon.ico\"\n ),\n ProviderConfig(\n name = \"openai\",\n displayName = \"OpenAI\",\n baseUrl = \"https://api.openai.com/v1\",\n apiKeyEnvVar = \"OPENAI_API_KEY\",\n defaultModel = \"gpt-4o\",\n modelsUrl = \"https://api.openai.com/v1/models\",\n description = \"GPT-4o / GPT-4 Turbo / GPT-3.5\",\n freeQuota = \"无免费额度\",\n icon = \"https://openai.com/favicon.ico\"\n ),\n ProviderConfig(\n name = \"qwen\",\n displayName = \"通义千问\",\n baseUrl = \"https://dashscope.aliyuncs.com/api/v1\",\n apiKeyEnvVar = \"DASHSCOPE_API_KEY\",\n defaultModel = \"qwen-max\",\n description = \"阿里通义千问,国内直连,多模态理解\",\n freeQuota = \"10 万 tokens/月\",\n region = \"cn\",\n icon = \"https://dashscope.aliyuncs.com/favicon.ico\"\n ),\n ProviderConfig(\n name = \"glm\",\n displayName = \"智谱 GLM\",\n baseUrl = \"https://open.bigmodel.cn/api/paas/v4\",\n apiKeyEnvVar = \"ZHIPU_API_KEY\",\n defaultModel = \"glm-4\",\n description = \"智谱 AI GLM-4,支持工具调用\",\n freeQuota = \"赠送 tokens\",\n region = \"cn\",\n icon = \"https://open.bigmodel.cn/favicon.ico\"\n ),\n ProviderConfig(\n name = \"moonshot\",\n displayName = \"Moonshot (Kimi)\",\n baseUrl = \"https://api.moonshot.cn/v1\",\n apiKeyEnvVar = \"MOONSHOT_API_KEY\",\n defaultModel = \"moonshot-v1-128k\",\n description = \"Kimi 长上下文模型,128K token 窗口\",\n freeQuota = \"有限免费额度\",\n region = \"cn\",\n icon = \"https://moonshot.cn/favicon.ico\"\n ),\n ProviderConfig(\n name = \"minimax\",\n displayName = \"MiniMax\",\n baseUrl = \"https://api.minimax.chat/v1\",\n apiKeyEnvVar = \"MINIMAX_API_KEY\",\n defaultModel = \"abab6.5-chat\",\n description = \"MiniMax 对话模型\",\n freeQuota = \"赠送 tokens\",\n region = \"cn\",\n icon = null ?: \"\"\n ),\n ProviderConfig(\n name = \"baichuan\",\n displayName = \"百川大模型\",\n baseUrl = \"https://api.baichuan-ai.com/v1\",\n apiKeyEnvVar = \"BAICHUAN_API_KEY\",\n defaultModel = \"Baichuan2-Turbo\",\n description = \"百川智能,中文能力优秀\",\n freeQuota = \"赠送 tokens\",\n region = \"cn\",\n icon = null ?: \"\"\n ),\n ProviderConfig(\n name = \"ollama\",\n displayName = \"Ollama (本地)\",\n baseUrl = \"http://localhost:11434/v1\",\n apiKeyEnvVar = \"\",\n authType = AuthType.NONE,\n providerType = ProviderType.LOCAL,\n defaultModel = \"llama3.2\",\n description = \"本地推理,完全离线,无需 API Key\",\n freeQuota = \"永久免费\",\n region = \"local\",\n icon = \"https://ollama.ai/favicon.ico\"\n ),\n ProviderConfig(\n name = \"agnes\",\n displayName = \"Agnes AI\",\n baseUrl = \"https://api.agnes.ai/v1\",\n apiKeyEnvVar = \"AGNES_API_KEY\",\n authType = AuthType.NONE,\n defaultModel = \"agnes-text-pro\",\n description = \"全球全模态永久免费,无额度限制\",\n freeQuota = \"永久免费\",\n icon = null ?: \"\"\n )\n )\n\n /**\n * 转换为 [MarketItem] 列表。\n */\n fun toMarketItems(marketId: String = \"builtin_models\"): List<MarketItem> {\n return providers.map { provider ->\n MarketItem(\n id = \"$marketId:${provider.name}\",\n name = provider.displayName,\n description = provider.description,\n author = provider.name,\n version = \"1.0.0\",\n category = IntegrationCategory.MODEL_PLATFORMS,\n marketId = marketId,\n sourceType = IntegrationSourceType.OFFICIAL_MARKET,\n downloadUrl = provider.baseUrl,\n tags = buildList {\n add(provider.providerType.name.lowercase())\n if (provider.region == \"cn\") add(\"国内\")\n if (provider.freeQuota.contains(\"永久免费\")) add(\"免费\")\n if (provider.supportsStreaming) add(\"streaming\")\n },\n rating = 4.5,\n downloadCount = 0,\n verified = true,\n metadata = mapOf(\n \"baseUrl\" to provider.baseUrl,\n \"defaultModel\" to provider.defaultModel,\n \"authType\" to provider.authType.name,\n \"providerType\" to provider.providerType.name,\n \"freeQuota\" to provider.freeQuota,\n \"region\" to provider.region,\n \"apiKeyEnvVar\" to provider.apiKeyEnvVar,\n \"supportsStreaming\" to provider.supportsStreaming.toString()\n )\n )\n }\n }\n\n /**\n * 按 name 获取配置。\n */\n fun getByName(name: String): ProviderConfig? = providers.find { it.name == name }\n\n /**\n * 按区域获取(global/cn/local)。\n */\n fun getByRegion(region: String): List<ProviderConfig> {\n return providers.filter { it.region == region }\n }\n\n /**\n * 获取所有免费 Provider。\n */\n fun getFreeProviders(): List<ProviderConfig> {\n return providers.filter {\n it.freeQuota.contains(\"永久免费\") || it.freeQuota.contains(\"免费\")\n }\n }\n\n /**\n * 获取本地 Provider。\n */\n fun getLocalProviders(): List<ProviderConfig> {\n return providers.filter { it.providerType == ProviderType.LOCAL }\n }\n}\n"}, "11943826f6a1de1a0d18aa9dabde93a387651483": {"t": 1785755908.1234314, "n": 8265, "h": "ac5bf2ff368a15b2", "c": "package com.apex.agent.integration.category.models\n\nimport com.apex.agent.integration.api.IntegrationCategory\nimport com.apex.agent.integration.market.IntegrationSourceType\nimport com.apex.agent.integration.market.MarketItem\n\n/**\n * 内置 LLM Provider 配置。\n *\n * 迁移自原 Apex-agent 的 ProviderProfile,包含主流 LLM 平台的连接配置。\n * 业务侧可直接使用这些预设配置,无需手动填写 endpoint 和模型名。\n *\n * # 包含的 Provider\n * - DeepSeek(深度推理/代码生成)\n * - Claude(Anthropic,最强推理)\n * - OpenAI(GPT-4/GPT-3.5)\n * - 通义千问(阿里,国内直连)\n * - 智谱 GLM(国内开源)\n * - Moonshot(Kimi,长上下文)\n * - 月之暗面(MiniMax)\n * - 本地 Ollama(离线推理)\n */\nobject BuiltinModelProviders {\n\n /**\n * Provider 认证类型。\n */\n enum class AuthType { API_KEY, OAUTH, NONE }\n\n /**\n * Provider 类型。\n */\n enum class ProviderType { CLOUD, LOCAL, SELF_HOSTED }\n\n /**\n * LLM Provider 配置。\n */\n data class ProviderConfig(\n val name: String,\n val displayName: String,\n val baseUrl: String,\n val apiKeyEnvVar: String,\n val authType: AuthType = AuthType.API_KEY,\n val providerType: ProviderType = ProviderType.CLOUD,\n val defaultModel: String,\n val modelsUrl: String = \"\",\n val icon: String = \"\",\n val description: String,\n val supportsStreaming: Boolean = true,\n val freeQuota: String = \"\",\n val region: String = \"global\"\n )\n\n /**\n * 所有内置 Provider 配置。\n */\n val providers: List<ProviderConfig> = listOf(\n ProviderConfig(\n name = \"deepseek\",\n displayName = \"DeepSeek\",\n baseUrl = \"https://api.deepseek.com/v1\",\n apiKeyEnvVar = \"DEEPSEEK_API_KEY\",\n defaultModel = \"deepseek-chat\",\n description = \"高性价比 LLM API,深度推理能力\",\n freeQuota = \"新用户赠送\",\n icon = \"https://platform.deepseek.com/favicon.ico\"\n ),\n ProviderConfig(\n name = \"deepseek-reasoner\",\n displayName = \"DeepSeek Reasoner\",\n baseUrl = \"https://api.deepseek.com/v1\",\n apiKeyEnvVar = \"DEEPSEEK_API_KEY\",\n defaultModel = \"deepseek-reasoner\",\n description = \"深度推理模型,链式思考(CoT)\",\n freeQuota = \"新用户赠送\",\n icon = \"https://platform.deepseek.com/favicon.ico\"\n ),\n ProviderConfig(\n name = \"claude\",\n displayName = \"Claude (Anthropic)\",\n baseUrl = \"https://api.anthropic.com/v1\",\n apiKeyEnvVar = \"ANTHROPIC_API_KEY\",\n defaultModel = \"claude-sonnet-4-20250514\",\n description = \"Anthropic 最强推理模型,擅长长文本分析\",\n freeQuota = \"有限免费额度\",\n icon = \"https://anthropic.com/favicon.ico\"\n ),\n ProviderConfig(\n name = \"openai\",\n displayName = \"OpenAI\",\n baseUrl = \"https://api.openai.com/v1\",\n apiKeyEnvVar = \"OPENAI_API_KEY\",\n defaultModel = \"gpt-4o\",\n modelsUrl = \"https://api.openai.com/v1/models\",\n description = \"GPT-4o / GPT-4 Turbo / GPT-3.5\",\n freeQuota = \"无免费额度\",\n icon = \"https://openai.com/favicon.ico\"\n ),\n ProviderConfig(\n name = \"qwen\",\n displayName = \"通义千问\",\n baseUrl = \"https://dashscope.aliyuncs.com/api/v1\",\n apiKeyEnvVar = \"DASHSCOPE_API_KEY\",\n defaultModel = \"qwen-max\",\n description = \"阿里通义千问,国内直连,多模态理解\",\n freeQuota = \"10 万 tokens/月\",\n region = \"cn\",\n icon = \"https://dashscope.aliyuncs.com/favicon.ico\"\n ),\n ProviderConfig(\n name = \"glm\",\n displayName = \"智谱 GLM\",\n baseUrl = \"https://open.bigmodel.cn/api/paas/v4\",\n apiKeyEnvVar = \"ZHIPU_API_KEY\",\n defaultModel = \"glm-4\",\n description = \"智谱 AI GLM-4,支持工具调用\",\n freeQuota = \"赠送 tokens\",\n region = \"cn\",\n icon = \"https://open.bigmodel.cn/favicon.ico\"\n ),\n ProviderConfig(\n name = \"moonshot\",\n displayName = \"Moonshot (Kimi)\",\n baseUrl = \"https://api.moonshot.cn/v1\",\n apiKeyEnvVar = \"MOONSHOT_API_KEY\",\n defaultModel = \"moonshot-v1-128k\",\n description = \"Kimi 长上下文模型,128K token 窗口\",\n freeQuota = \"有限免费额度\",\n region = \"cn\",\n icon = \"https://moonshot.cn/favicon.ico\"\n ),\n ProviderConfig(\n name = \"minimax\",\n displayName = \"MiniMax\",\n baseUrl = \"https://api.minimax.chat/v1\",\n apiKeyEnvVar = \"MINIMAX_API_KEY\",\n defaultModel = \"abab6.5-chat\",\n description = \"MiniMax 对话模型\",\n freeQuota = \"赠送 tokens\",\n region = \"cn\",\n icon = null ?: \"\"\n ),\n ProviderConfig(\n name = \"baichuan\",\n displayName = \"百川大模型\",\n baseUrl = \"https://api.baichuan-ai.com/v1\",\n apiKeyEnvVar = \"BAICHUAN_API_KEY\",\n defaultModel = \"Baichuan2-Turbo\",\n description = \"百川智能,中文能力优秀\",\n freeQuota = \"赠送 tokens\",\n region = \"cn\",\n icon = null ?: \"\"\n ),\n ProviderConfig(\n name = \"ollama\",\n displayName = \"Ollama (本地)\",\n baseUrl = \"http://localhost:11434/v1\",\n apiKeyEnvVar = \"\",\n authType = AuthType.NONE,\n providerType = ProviderType.LOCAL,\n defaultModel = \"llama3.2\",\n description = \"本地推理,完全离线,无需 API Key\",\n freeQuota = \"永久免费\",\n region = \"local\",\n icon = \"https://ollama.ai/favicon.ico\"\n ),\n ProviderConfig(\n name = \"agnes\",\n displayName = \"Agnes AI\",\n baseUrl = \"https://api.agnes.ai/v1\",\n apiKeyEnvVar = \"AGNES_API_KEY\",\n authType = AuthType.NONE,\n defaultModel = \"agnes-text-pro\",\n description = \"全球全模态永久免费,无额度限制\",\n freeQuota = \"永久免费\",\n icon = null ?: \"\"\n )\n )\n\n /**\n * 转换为 [MarketItem] 列表。\n */\n fun toMarketItems(marketId: String = \"builtin_models\"): List<MarketItem> {\n return providers.map { provider ->\n MarketItem(\n id = \"$marketId:${provider.name}\",\n name = provider.displayName,\n description = provider.description,\n author = provider.name,\n version = \"1.0.0\",\n category = IntegrationCategory.MODEL_PLATFORMS,\n marketId = marketId,\n sourceType = IntegrationSourceType.OFFICIAL_MARKET,\n downloadUrl = provider.baseUrl,\n tags = buildList {\n add(provider.providerType.name.lowercase())\n if (provider.region == \"cn\") add(\"国内\")\n if (provider.freeQuota.contains(\"永久免费\")) add(\"免费\")\n if (provider.supportsStreaming) add(\"streaming\")\n },\n rating = 4.5,\n downloadCount = 0,\n verified = true,\n metadata = mapOf(\n \"baseUrl\" to provider.baseUrl,\n \"defaultModel\" to provider.defaultModel,\n \"authType\" to provider.authType.name,\n \"providerType\" to provider.providerType.name,\n \"freeQuota\" to provider.freeQuota,\n \"region\" to provider.region,\n \"apiKeyEnvVar\" to provider.apiKeyEnvVar,\n \"supportsStreaming\" to provider.supportsStreaming.toString()\n )\n )\n }\n }\n\n /**\n * 按 name 获取配置。\n */\n fun getByName(name: String): ProviderConfig? = providers.find { it.name == name }\n\n /**\n * 按区域获取(global/cn/local)。\n */\n fun getByRegion(region: String): List<ProviderConfig> {\n return providers.filter { it.region == region }\n }\n\n /**\n * 获取所有免费 Provider。\n */\n fun getFreeProviders(): List<ProviderConfig> {\n return providers.filter {\n it.freeQuota.contains(\"永久免费\") || it.freeQuota.contains(\"免费\")\n }\n }\n\n /**\n * 获取本地 Provider。\n */\n fun getLocalProviders(): List<ProviderConfig> {\n return providers.filter { it.providerType == ProviderType.LOCAL }\n }\n}\n"}}}}