From ee77c548ca1fb3811e3b55af0cc2caa8ec490216 Mon Sep 17 00:00:00 2001 From: DarkSky <25152247+darkskygit@users.noreply.github.com> Date: Thu, 18 Sep 2025 20:56:54 +0800 Subject: [PATCH] feat: get prompt model names (#13607) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit fix AI-419 ## Summary by CodeRabbit - New Features - New API to fetch available models for a prompt, returning default, optional, and pro models with human‑readable names. - Added temperature and topP settings to prompt configuration for finer control. - Refactor - When no model is chosen, the default model is used instead of auto-picking a pro model. - Model metadata across providers now includes readable names, improving listings and selection UX. - Tests - Updated test snapshots and descriptions to reflect the new default-model behavior. --- .../__snapshots__/copilot.spec.ts.md | 4 +- .../__snapshots__/copilot.spec.ts.snap | Bin 2608 -> 2599 bytes .../server/src/__tests__/copilot.spec.ts | 4 +- .../copilot/providers/anthropic/official.ts | 4 ++ .../copilot/providers/anthropic/vertex.ts | 4 ++ .../src/plugins/copilot/providers/openai.ts | 15 ++++ .../server/src/plugins/copilot/resolver.ts | 66 ++++++++++++++++++ .../server/src/plugins/copilot/session.ts | 11 +-- packages/backend/server/src/schema.gql | 14 ++++ .../src/graphql/copilot-models-get.gql | 17 +++++ packages/common/graphql/src/graphql/index.ts | 22 ++++++ packages/common/graphql/src/schema.ts | 52 ++++++++++++++ 12 files changed, 200 insertions(+), 13 deletions(-) create mode 100644 packages/common/graphql/src/graphql/copilot-models-get.gql diff --git a/packages/backend/server/src/__tests__/__snapshots__/copilot.spec.ts.md b/packages/backend/server/src/__tests__/__snapshots__/copilot.spec.ts.md index 0797e8989..38fc2496b 100644 --- a/packages/backend/server/src/__tests__/__snapshots__/copilot.spec.ts.md +++ b/packages/backend/server/src/__tests__/__snapshots__/copilot.spec.ts.md @@ -467,9 +467,9 @@ Generated by [AVA](https://avajs.dev). 'gemini-2.5-flash' -> should pick first pro model when no requested model during active +> should pick default model when no requested model during active - 'gemini-2.5-pro' + 'gemini-2.5-flash' > should honor requested pro model during active diff --git a/packages/backend/server/src/__tests__/__snapshots__/copilot.spec.ts.snap b/packages/backend/server/src/__tests__/__snapshots__/copilot.spec.ts.snap index cd677a05b9ee4e665100f8d615931f0fc8ed06c9..2933e7d0efa98031624226adf9534d6f92d18f61 100644 GIT binary patch delta 2427 zcmV->3552r6sHt2K~_N^Q*L2!b7*gLAa*kf0|1ji6>00)8Q07k!2Xh4s>}t4llB+Y zYEAT(Y z*a9KZrwto6fDD3AkRd|u3?CdKds7r+4khtt4f1Q59|2Ft@5EJK9+(EmsS zkuL%GJAfMqurs+^Ex5@XCBO*+e2f5JPQgx=WPU(^pAz7Y1b8huy?^ykGwF(KGQ9;ThKo^2lO>o_`aC4X432ksuY|8K#a z8EXJ{|2_bB0JsalaRB*6WLDBZ-WT9`J_h-B>L7nkgM5gPK7uG7CjF0@0Gt*9?8Srl zO9Xg49s17@;8~61HzfDE75cj=a4Q8KpulW$dVkCGvlKW-fu|^NDLFmcGX1|4$QZ!e z3}C;Jm_E4rz~aW02!E{4cc*1Vfpxw+9gTst3`GWGEKu|GTA56sp%TR zNl3q`6ViVW6VmoNAw{XXU-X|%B_!hs0z5^47gMu*V}Js~6n_{`GE36O#5hKQ`zY|? zRL(LY&bpYK+M1hoO+bHMdEJn9|3Y>xFEUf*Omsmcsls+&rbSJ5K?}QStn}hJfqa1K`~N-Ur|)fCtioEfYkL9S7T2>%n%h z9&9h`V9S!sjei8Vi2w%|E8cv1gqOQ3znT3i)xMfFlI((&7C@0(^}CKT3i3N-+C}wYzG+@|evM8h;(OuPfGisZ1}Gxtck-m&)`~ znO-W>OJ#bg%vFoo*FTlf7dcy7yAHgXYuXk60Y1;Ini5`{?xR`*M(G%Ui8O46Fx(e6 zwUl(8bS9-4CEWKBLLNmb0MtS?-0n;Wb^0`bUndo`-Q*EM{?wqrnBfb-GS~Z8(u*n7 zG-;-5ozwE$K%HiJsY_SZUXo zsaRBDIr11r>i$ zFj(Kz2Bc+3Wc+Rd+)98s0z9(%ex?*31yH)s9a+^+pyvs2DV;q-!2YvAOGdGh3=q3{ zG2gzK0`H>DyWXFQSYO6u3nu;FPHE)5Bjy;lz`fvpxax^YRfU~Rp`|ACwL}av9VdHk z!QnAxkA@vh$NV|5h*@RZ z<>pb-I9M9cvl;{ zM;q%3)z)C$;$||(dC%rWXJPRE zc!?+Xnnzlu)g+hk(-m%&nQMPr(yV&6YuQzY%kjig216?R0IS5IFnY9BsW5NBjKHk- zZ(Q$RO~&LG5ou9)dMEY9+QN;v^zF@DYKf}t2xVHHaLrR9FWbFr^H%NeaZQ!umcyA_ zt4>#{YC)f;GQ3Wtv4i}k2j4;M1a38t^KBzYs%`JH-8p9lS!0X&%$ z()s23`c{}`fZ^o3|KZdWw(pe4*Av*S1!g-7(cb0sj^()T*PM(Un<{5pvz*AAxk~8H zoYMYG6*Sgd=j;o<4Au^`A@92W~3GXJH1{E zgZtxX6WsKh0M2);M?$@c%=iFP5qEFa+hGR&iSicNXzB^$V7ue(o@E_xBZRmOOV6GX zdH?K|!N^w{Mh1gANRMTS@e=?)2k^^;c{D*o^mzc65|h@o|67umV$vTWVVuTpnTiT5 z`oVVhq{#*tLgzwt>vRh9`#ob{UoP`s=)ms3>o7)X8*ms~D6o|R_s~woewG*~DPU1S!|g_S&hk&_S!BUS8XlR1%&H=P+BiVIUIoLO!Lq0vxR z=9%OLQ@EzA<)!7>)j)()Ox2{x+(MLnS;8&arF!=C8O>dr<9P1FMlw?372CCQ6XR34 zswXrtm{E2nT;bo7hzTBl_*ZiUUSu^#tw7qrG-+Ypt{3eycf4w|Q1kp>D9>g-r+1}y za)~{0g`2xP8gADbs+!UfvxKQ2cjYw)Z{t>008+9z&HQ^ delta 2436 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 C(aKo> diff --git a/packages/backend/server/src/__tests__/copilot.spec.ts b/packages/backend/server/src/__tests__/copilot.spec.ts index 6a3b69e75..602ff7fc9 100644 --- a/packages/backend/server/src/__tests__/copilot.spec.ts +++ b/packages/backend/server/src/__tests__/copilot.spec.ts @@ -2129,13 +2129,13 @@ test('should resolve model correctly based on subscription status and prompt con ); } - // payment enabled + active: without requested -> first pro; requested pro should be honored + // payment enabled + active: without requested -> default model; requested pro should be honored { mockStatus(SubscriptionStatus.Active); const model6 = await s.resolveModel(true); t.snapshot( model6, - 'should pick first pro model when no requested model during active' + 'should pick default model when no requested model during active' ); const model7 = await s.resolveModel(true, 'claude-sonnet-4@20250514'); diff --git a/packages/backend/server/src/plugins/copilot/providers/anthropic/official.ts b/packages/backend/server/src/plugins/copilot/providers/anthropic/official.ts index ce2ac59ac..efdc4a527 100644 --- a/packages/backend/server/src/plugins/copilot/providers/anthropic/official.ts +++ b/packages/backend/server/src/plugins/copilot/providers/anthropic/official.ts @@ -21,6 +21,7 @@ export class AnthropicOfficialProvider extends AnthropicProvider { readonly models = [ // Text to Text models { + name: 'GPT 4o', id: 'gpt-4o', capabilities: [ { @@ -101,6 +102,7 @@ export class OpenAIProvider extends CopilotProvider { }, // FIXME(@darkskygit): deprecated { + name: 'GPT 4o 2024-08-06', id: 'gpt-4o-2024-08-06', capabilities: [ { @@ -110,6 +112,7 @@ export class OpenAIProvider extends CopilotProvider { ], }, { + name: 'GPT 4o Mini', id: 'gpt-4o-mini', capabilities: [ { @@ -120,6 +123,7 @@ export class OpenAIProvider extends CopilotProvider { }, // FIXME(@darkskygit): deprecated { + name: 'GPT 4o Mini 2024-07-18', id: 'gpt-4o-mini-2024-07-18', capabilities: [ { @@ -129,6 +133,7 @@ export class OpenAIProvider extends CopilotProvider { ], }, { + name: 'GPT 4.1', id: 'gpt-4.1', capabilities: [ { @@ -143,6 +148,7 @@ export class OpenAIProvider extends CopilotProvider { ], }, { + name: 'GPT 4.1 2025-04-14', id: 'gpt-4.1-2025-04-14', capabilities: [ { @@ -156,6 +162,7 @@ export class OpenAIProvider extends CopilotProvider { ], }, { + name: 'GPT 4.1 Mini', id: 'gpt-4.1-mini', capabilities: [ { @@ -169,6 +176,7 @@ export class OpenAIProvider extends CopilotProvider { ], }, { + name: 'GPT 4.1 Nano', id: 'gpt-4.1-nano', capabilities: [ { @@ -182,6 +190,7 @@ export class OpenAIProvider extends CopilotProvider { ], }, { + name: 'GPT 5', id: 'gpt-5', capabilities: [ { @@ -195,6 +204,7 @@ export class OpenAIProvider extends CopilotProvider { ], }, { + name: 'GPT 5 2025-08-07', id: 'gpt-5-2025-08-07', capabilities: [ { @@ -208,6 +218,7 @@ export class OpenAIProvider extends CopilotProvider { ], }, { + name: 'GPT 5 Mini', id: 'gpt-5-mini', capabilities: [ { @@ -221,6 +232,7 @@ export class OpenAIProvider extends CopilotProvider { ], }, { + name: 'GPT 5 Nano', id: 'gpt-5-nano', capabilities: [ { @@ -234,6 +246,7 @@ export class OpenAIProvider extends CopilotProvider { ], }, { + name: 'GPT O1', id: 'o1', capabilities: [ { @@ -243,6 +256,7 @@ export class OpenAIProvider extends CopilotProvider { ], }, { + name: 'GPT O3', id: 'o3', capabilities: [ { @@ -252,6 +266,7 @@ export class OpenAIProvider extends CopilotProvider { ], }, { + name: 'GPT O4 Mini', id: 'o4-mini', capabilities: [ { diff --git a/packages/backend/server/src/plugins/copilot/resolver.ts b/packages/backend/server/src/plugins/copilot/resolver.ts index 9f356f70e..85f53e616 100644 --- a/packages/backend/server/src/plugins/copilot/resolver.ts +++ b/packages/backend/server/src/plugins/copilot/resolver.ts @@ -362,6 +362,27 @@ class CopilotPromptType { messages!: CopilotPromptMessageType[]; } +@ObjectType() +class CopilotModelType { + @Field(() => String) + id!: string; + + @Field(() => String) + name!: string; +} + +@ObjectType() +export class CopilotModelsType { + @Field(() => String) + defaultModel!: string; + + @Field(() => [CopilotModelType]) + optionalModels!: CopilotModelType[]; + + @Field(() => [CopilotModelType]) + proModels!: CopilotModelType[]; +} + @ObjectType() export class CopilotSessionType { @Field(() => ID) @@ -400,9 +421,12 @@ export class CopilotType { @Throttle() @Resolver(() => CopilotType) export class CopilotResolver { + private readonly modelNames = new Map(); + constructor( private readonly ac: AccessController, private readonly mutex: RequestMutex, + private readonly prompt: PromptService, private readonly chatSession: ChatSessionService, private readonly storage: CopilotStorage, private readonly docReader: DocReader, @@ -443,6 +467,48 @@ export class CopilotResolver { return { userId: user.id, workspaceId, docId: docId || undefined }; } + @ResolveField(() => CopilotModelsType, { + description: + 'List available models for a prompt, with human-readable names', + complexity: 2, + }) + async models( + @Args('promptName') promptName: string + ): Promise { + const prompt = await this.prompt.get(promptName); + if (!prompt) { + throw new NotFoundException('Prompt not found'); + } + const convertModels = (ids: string[]) => { + return ids + .map(id => ({ id, name: this.modelNames.get(id) })) + .filter(m => !!m.name) as CopilotModelType[]; + }; + const proModels = prompt.config?.proModels || []; + const missing = new Set( + [...prompt.optionalModels, ...proModels].filter( + id => !this.modelNames.has(id) + ) + ); + if (missing.size) { + for (const model of missing) { + if (this.modelNames.has(model)) continue; + const provider = await this.providerFactory.getProviderByModel(model); + if (provider?.configured()) { + for (const m of provider.models) { + if (m.name) this.modelNames.set(m.id, m.name); + } + } + } + } + + return { + defaultModel: prompt.model, + optionalModels: convertModels(prompt.optionalModels), + proModels: convertModels(proModels), + }; + } + @ResolveField(() => CopilotSessionType, { description: 'Get the session by id', complexity: 2, diff --git a/packages/backend/server/src/plugins/copilot/session.ts b/packages/backend/server/src/plugins/copilot/session.ts index 6ce10c5ad..9c37007fc 100644 --- a/packages/backend/server/src/plugins/copilot/session.ts +++ b/packages/backend/server/src/plugins/copilot/session.ts @@ -130,15 +130,8 @@ export class ChatSession implements AsyncDisposable { paymentEnabled = false; } - if (paymentEnabled) { - if (isUserAIPro) { - if (!requestedModelId) { - const firstPro = this.proModels[0]; - return normalize(firstPro); - } - } else if (isPro(requestedModelId)) { - return defaultModel; - } + if (paymentEnabled && !isUserAIPro && isPro(requestedModelId)) { + return defaultModel; } return normalize(requestedModelId); diff --git a/packages/backend/server/src/schema.gql b/packages/backend/server/src/schema.gql index 61a011bfd..15551a45b 100644 --- a/packages/backend/server/src/schema.gql +++ b/packages/backend/server/src/schema.gql @@ -226,6 +226,9 @@ type Copilot { contexts(contextId: String, sessionId: String): [CopilotContext!]! histories(docId: String, options: QueryChatHistoriesInput): [CopilotHistories!]! @deprecated(reason: "use `chats` instead") + """List available models for a prompt, with human-readable names""" + models(promptName: String!): CopilotModelsType! + """Get the quota of the user in the workspace""" quota: CopilotQuota! @@ -360,6 +363,17 @@ type CopilotMessageNotFoundDataType { messageId: String! } +type CopilotModelType { + id: String! + name: String! +} + +type CopilotModelsType { + defaultModel: String! + optionalModels: [CopilotModelType!]! + proModels: [CopilotModelType!]! +} + input CopilotPromptConfigInput { frequencyPenalty: Float presencePenalty: Float diff --git a/packages/common/graphql/src/graphql/copilot-models-get.gql b/packages/common/graphql/src/graphql/copilot-models-get.gql new file mode 100644 index 000000000..4c15fa3bf --- /dev/null +++ b/packages/common/graphql/src/graphql/copilot-models-get.gql @@ -0,0 +1,17 @@ +query getPromptModels($promptName: String!) { + currentUser { + copilot { + models(promptName: $promptName) { + defaultModel + optionalModels { + id + name + } + proModels { + id + name + } + } + } + } +} diff --git a/packages/common/graphql/src/graphql/index.ts b/packages/common/graphql/src/graphql/index.ts index 325def15d..4ad96df00 100644 --- a/packages/common/graphql/src/graphql/index.ts +++ b/packages/common/graphql/src/graphql/index.ts @@ -1059,6 +1059,28 @@ export const createCopilotMessageMutation = { file: true, }; +export const getPromptModelsQuery = { + id: 'getPromptModelsQuery' as const, + op: 'getPromptModels', + query: `query getPromptModels($promptName: String!) { + currentUser { + copilot { + models(promptName: $promptName) { + defaultModel + optionalModels { + id + name + } + proModels { + id + name + } + } + } + } +}`, +}; + export const copilotQuotaQuery = { id: 'copilotQuotaQuery' as const, op: 'copilotQuota', diff --git a/packages/common/graphql/src/schema.ts b/packages/common/graphql/src/schema.ts index 198d30279..541cb9fb6 100644 --- a/packages/common/graphql/src/schema.ts +++ b/packages/common/graphql/src/schema.ts @@ -263,6 +263,8 @@ export interface Copilot { contexts: Array; /** @deprecated use `chats` instead */ histories: Array; + /** List available models for a prompt, with human-readable names */ + models: CopilotModelsType; /** Get the quota of the user in the workspace */ quota: CopilotQuota; /** Get the session by id */ @@ -296,6 +298,10 @@ export interface CopilotHistoriesArgs { options?: InputMaybe; } +export interface CopilotModelsArgs { + promptName: Scalars['String']['input']; +} + export interface CopilotSessionArgs { sessionId: Scalars['String']['input']; } @@ -451,6 +457,19 @@ export interface CopilotMessageNotFoundDataType { messageId: Scalars['String']['output']; } +export interface CopilotModelType { + __typename?: 'CopilotModelType'; + id: Scalars['String']['output']; + name: Scalars['String']['output']; +} + +export interface CopilotModelsType { + __typename?: 'CopilotModelsType'; + defaultModel: Scalars['String']['output']; + optionalModels: Array; + proModels: Array; +} + export interface CopilotPromptConfigInput { frequencyPenalty?: InputMaybe; presencePenalty?: InputMaybe; @@ -4343,6 +4362,34 @@ export type CreateCopilotMessageMutation = { createCopilotMessage: string; }; +export type GetPromptModelsQueryVariables = Exact<{ + promptName: Scalars['String']['input']; +}>; + +export type GetPromptModelsQuery = { + __typename?: 'Query'; + currentUser: { + __typename?: 'UserType'; + copilot: { + __typename?: 'Copilot'; + models: { + __typename?: 'CopilotModelsType'; + defaultModel: string; + optionalModels: Array<{ + __typename?: 'CopilotModelType'; + id: string; + name: string; + }>; + proModels: Array<{ + __typename?: 'CopilotModelType'; + id: string; + name: string; + }>; + }; + }; + } | null; +}; + export type CopilotQuotaQueryVariables = Exact<{ [key: string]: never }>; export type CopilotQuotaQuery = { @@ -6380,6 +6427,11 @@ export type Queries = variables: GetAudioTranscriptionQueryVariables; response: GetAudioTranscriptionQuery; } + | { + name: 'getPromptModelsQuery'; + variables: GetPromptModelsQueryVariables; + response: GetPromptModelsQuery; + } | { name: 'copilotQuotaQuery'; variables: CopilotQuotaQueryVariables;