Files
Kokorone/apps/api/src/llm/llm.module.ts
T

45 lines
2.1 KiB
TypeScript
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.
import { Module } from "@nestjs/common";
import { log } from "@kokorone/shared";
import { PrismaModule } from "../prisma/prisma.module.js";
import { EmotionModule } from "../emotion/emotion.module.js";
import { RelationshipModule } from "../relationship/relationship.module.js";
import { MemoryModule } from "../memory/memory.module.js";
import { ScheduleModule } from "../schedule/schedule.module.js";
import { MockProvider } from "./mock-provider.service.js";
import { ClaudeProvider } from "./claude-provider.service.js";
import { LLM_PROVIDER } from "./llm-provider.js";
import { OutputFilterService } from "./output-filter.service.js";
import { FastChannelDetector } from "./fast-channel.service.js";
import { BehaviorReinforcementService } from "./behavior-reinforcement.service.js";
import { ContextAssemblerService } from "./context-assembler.service.js";
import { DialogueService } from "./dialogue.service.js";
import { DialogueController } from "./dialogue.controller.js";
// F-2 Provider 切換:LLM_PROVIDER=mock|claude 決定注入哪個實作,切換不動引擎任何一行。
// R-3:ClaudeProvider 已接上真實 API,這裡不再需要特別的「尚未實作」警告。
function llmProviderFactory(mock: MockProvider, claude: ClaudeProvider) {
const providerName = process.env.LLM_PROVIDER ?? "mock";
if (providerName === "claude") {
log("啟動", "INF", `LLM_PROVIDER=claude,對話生成將呼叫真實 API(CLAUDE_BASE_URL=${process.env.CLAUDE_BASE_URL ?? "http://localhost:3000/api/v1"})`);
return claude;
}
return mock;
}
@Module({
imports: [PrismaModule, EmotionModule, RelationshipModule, MemoryModule, ScheduleModule],
controllers: [DialogueController],
providers: [
MockProvider,
ClaudeProvider,
{ provide: LLM_PROVIDER, useFactory: llmProviderFactory, inject: [MockProvider, ClaudeProvider] },
OutputFilterService,
FastChannelDetector,
BehaviorReinforcementService,
ContextAssemblerService,
DialogueService,
],
exports: [DialogueService, BehaviorReinforcementService, LLM_PROVIDER],
})
export class LlmModule {}