feat(server): scenario mapping (#13404)

fix AI-404

<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->
## Summary by CodeRabbit

* **New Features**
* Introduced scenario-based configuration for copilot, allowing default
model assignments for various AI use cases.
  * Added a new image generation model to the available options.

* **Improvements**
* Refined copilot provider settings by removing deprecated fallback
options and standardizing base URL configuration.
* Enhanced prompt management to support scenario-driven updates and
improved configuration handling.
* Updated admin and settings interfaces to support new scenario
configurations.

* **Bug Fixes**
* Removed deprecated or unused prompts and related references across
platforms for consistency.

* **Other**
* Improved test coverage and updated test assets to reflect prompt and
scenario changes.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
This commit is contained in:
DarkSky
2025-08-04 17:50:38 +08:00
committed by GitHub
parent 7a93db4d12
commit 0fcb4cb0fe
23 changed files with 386 additions and 514 deletions

View File

@@ -2,6 +2,7 @@ import { Logger } from '@nestjs/common';
import type { ModuleRef } from '@nestjs/core';
import {
Config,
CopilotPromptNotFound,
CopilotProviderNotSupported,
} from '../../../base';
@@ -28,6 +29,7 @@ class ProductionEmbeddingClient extends EmbeddingClient {
private readonly logger = new Logger(ProductionEmbeddingClient.name);
constructor(
private readonly config: Config,
private readonly providerFactory: CopilotProviderFactory,
private readonly prompt: PromptService
) {
@@ -36,7 +38,9 @@ class ProductionEmbeddingClient extends EmbeddingClient {
override async configured(): Promise<boolean> {
const embedding = await this.providerFactory.getProvider({
modelId: EMBEDDING_MODEL,
modelId: this.config.copilot?.scenarios?.enabled
? this.config.copilot.scenarios.scenarios?.embedding || EMBEDDING_MODEL
: EMBEDDING_MODEL,
outputType: ModelOutputType.Embedding,
});
const result = Boolean(embedding);
@@ -209,12 +213,13 @@ export async function getEmbeddingClient(
if (EMBEDDING_CLIENT) {
return EMBEDDING_CLIENT;
}
const config = moduleRef.get(Config, { strict: false });
const providerFactory = moduleRef.get(CopilotProviderFactory, {
strict: false,
});
const prompt = moduleRef.get(PromptService, { strict: false });
const client = new ProductionEmbeddingClient(providerFactory, prompt);
const client = new ProductionEmbeddingClient(config, providerFactory, prompt);
if (await client.configured()) {
EMBEDDING_CLIENT = client;
}