Skip to content

Commit df44a20

Browse files
committed
feat: enhance support for 'intern' provider in settings and error handling
1 parent a5ed1a8 commit df44a20

4 files changed

Lines changed: 53 additions & 16 deletions

File tree

app/components/DocsAssistant.tsx

Lines changed: 19 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,9 @@ function DocsAssistantInner({ pageContext }: DocsAssistantProps) {
5353
const currentApiKey =
5454
currentProvider === "openai"
5555
? openaiApiKeyRef.current
56-
: geminiApiKeyRef.current;
56+
: currentProvider === "gemini"
57+
? geminiApiKeyRef.current
58+
: ""; // intern provider doesn't need API key
5759

5860
console.log("[DocsAssistant] useChat body function called with:", {
5961
provider: currentProvider,
@@ -118,9 +120,14 @@ interface AssistantErrorState {
118120

119121
function deriveAssistantError(
120122
err: unknown,
121-
provider: "openai" | "gemini",
123+
provider: "openai" | "gemini" | "intern",
122124
): AssistantErrorState {
123-
const providerLabel = provider === "gemini" ? "Google Gemini" : "OpenAI";
125+
const providerLabel =
126+
provider === "gemini"
127+
? "Google Gemini"
128+
: provider === "intern"
129+
? "Intern-AI"
130+
: "OpenAI";
124131
const fallback: AssistantErrorState = {
125132
message:
126133
"The assistant couldn't complete that request. Please try again later.",
@@ -176,14 +183,16 @@ function deriveAssistantError(
176183

177184
let showSettingsCTA = false;
178185

186+
// For intern provider, don't show settings CTA for API key related errors
179187
if (
180-
statusCode === 400 ||
181-
statusCode === 401 ||
182-
statusCode === 403 ||
183-
normalized.includes("api key") ||
184-
normalized.includes("apikey") ||
185-
normalized.includes("missing key") ||
186-
normalized.includes("unauthorized")
188+
provider !== "intern" &&
189+
(statusCode === 400 ||
190+
statusCode === 401 ||
191+
statusCode === 403 ||
192+
normalized.includes("api key") ||
193+
normalized.includes("apikey") ||
194+
normalized.includes("missing key") ||
195+
normalized.includes("unauthorized"))
187196
) {
188197
showSettingsCTA = true;
189198
}

app/components/assistant-ui/SettingsDialog.tsx

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,9 +51,13 @@ export const SettingsDialog = ({
5151
<RadioGroup
5252
value={provider}
5353
onValueChange={(value) =>
54-
setProvider(value as "openai" | "gemini")
54+
setProvider(value as "openai" | "gemini" | "intern")
5555
}
5656
>
57+
<div className="flex items-center space-x-2">
58+
<RadioGroupItem value="intern" id="intern" />
59+
<Label htmlFor="intern">InternS1 (Free)</Label>
60+
</div>
5761
<div className="flex items-center space-x-2">
5862
<RadioGroupItem value="openai" id="openai" />
5963
<Label htmlFor="openai">OpenAI</Label>
@@ -90,6 +94,15 @@ export const SettingsDialog = ({
9094
/>
9195
</div>
9296
)}
97+
98+
{provider === "intern" && (
99+
<div className="space-y-2">
100+
<div className="text-sm text-muted-foreground">
101+
感谢上海AILab的书生大模型对本项目的算力支持,Intern-AI
102+
模型已预配置,无需提供 API Key。
103+
</div>
104+
</div>
105+
)}
93106
</div>
94107

95108
<DialogFooter>

app/components/assistant-ui/thread.tsx

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -268,9 +268,19 @@ const Composer: FC<ComposerProps> = ({
268268
onClearError,
269269
}) => {
270270
const { provider, openaiApiKey, geminiApiKey } = useAssistantSettings();
271-
const activeKey = provider === "openai" ? openaiApiKey : geminiApiKey;
272-
const hasActiveKey = activeKey.trim().length > 0;
273-
const providerLabel = provider === "gemini" ? "Google Gemini" : "OpenAI";
271+
const activeKey =
272+
provider === "openai"
273+
? openaiApiKey
274+
: provider === "gemini"
275+
? geminiApiKey
276+
: "";
277+
const hasActiveKey = provider === "intern" || activeKey.trim().length > 0;
278+
const providerLabel =
279+
provider === "gemini"
280+
? "Google Gemini"
281+
: provider === "intern"
282+
? "Intern-AI"
283+
: "OpenAI";
274284

275285
const handleOpenSettings = useCallback(() => {
276286
onClearError?.();

app/hooks/useAssistantSettings.tsx

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ import {
1010
} from "react";
1111
import type { ReactNode } from "react";
1212

13-
type Provider = "openai" | "gemini";
13+
type Provider = "openai" | "gemini" | "intern";
1414

1515
interface AssistantSettingsState {
1616
provider: Provider;
@@ -45,7 +45,12 @@ const parseStoredSettings = (raw: string | null): AssistantSettingsState => {
4545
try {
4646
const parsed = JSON.parse(raw) as Partial<AssistantSettingsState>;
4747
return {
48-
provider: parsed.provider === "gemini" ? "gemini" : "openai",
48+
provider:
49+
parsed.provider === "gemini"
50+
? "gemini"
51+
: parsed.provider === "intern"
52+
? "intern"
53+
: "openai",
4954
openaiApiKey:
5055
typeof parsed.openaiApiKey === "string" ? parsed.openaiApiKey : "",
5156
geminiApiKey:

0 commit comments

Comments
 (0)