1+ import { AnthropicProvider } from '@ai-sdk/anthropic'
2+ import { GoogleGenerativeAIProvider } from '@ai-sdk/google'
13import { OpenAIProvider } from '@ai-sdk/openai'
24import { categoryScoresSchema } from '@peace-net/shared/schemas/guardian'
3- import type { CategoryScores } from '@peace-net/shared/types/guardian'
5+ import type { CategoryScores , Models } from '@peace-net/shared/types/guardian'
46import { generateObject } from 'ai'
57import { z } from 'zod'
68
@@ -55,7 +57,7 @@ const systemPrompt = `
5557 * @returns 分析結果を含むResultオブジェクト。成功時はGuardianResultを、失敗時はエラーを含みます。
5658 */
5759export interface IGuardianService {
58- guardianText ( text : string ) : Promise < CategoryScores >
60+ guardianText ( text : string , selectedModel : Models ) : Promise < CategoryScores >
5961}
6062
6163/**
@@ -71,11 +73,34 @@ export interface IGuardianService {
7173 * @returns 分析結果を含むResultオブジェクト。成功時はGuardianResultを、失敗時はエラーを含みます。
7274 */
7375export class GuardianService implements IGuardianService {
74- constructor ( private openai : OpenAIProvider ) { }
76+ constructor (
77+ private openai : OpenAIProvider ,
78+ private anthropic : AnthropicProvider ,
79+ private google : GoogleGenerativeAIProvider ,
80+ ) { }
81+
82+ async guardianText (
83+ text : string ,
84+ selectedModel : Models ,
85+ ) : Promise < CategoryScores > {
86+ let model
87+ switch ( selectedModel ) {
88+ case 'gpt-4o-mini' :
89+ model = this . openai ( 'gpt-4o-mini' )
90+ break
91+ case 'claude-3-haiku' :
92+ model = this . anthropic ( 'claude-3-haiku-20240307' )
93+ break
94+ case 'gemini-1.5-flash' :
95+ model = this . google ( 'models/gemini-1.5-flash' )
96+ break
97+ default :
98+ model = this . openai ( 'gpt-4o-mini' )
99+ break
100+ }
75101
76- async guardianText ( text : string ) : Promise < CategoryScores > {
77102 const { object } = await generateObject ( {
78- model : this . openai ( 'gpt-4o-mini' ) ,
103+ model,
79104 schema : z . object ( { category_scores : categoryScoresSchema } ) ,
80105 messages : [
81106 { role : 'system' , content : systemPrompt } ,
0 commit comments