28 lines
1.9 KiB
JavaScript
28 lines
1.9 KiB
JavaScript
'use strict';
|
|||
|
|
// 모델 참조(ref)에 따라 실행 엔진을 고른다: anthropic → Claude Code CLI, 그 외 → OpenAI 호환 에이전트.
|
||
|
|
const { runClaude } = require('./claude');
|
||
|
|
const { runAgent } = require('./engine-openai');
|
||
|
|
const { runCodex } = require('./engine-codex');
|
||
|
|
const providers = require('./providers');
|
||
|
|
|
||
|
|
const CLAUDE_TOOLSETS = { files: 'Write,Edit,MultiEdit,Read,Glob,Grep', read: 'Read,Glob,Grep,WebFetch', none: 'Read' };
|
||
|
|
|
||
|
|
/**
|
||
|
|
* @param {object} o ref(모델 참조), userId, siteDir, prompt, systemPrompt, toolset('files'|'read'|'none'), sessionId, resume, noPersist, onEvent, onStart
|
||
|
|
* @returns runClaude 와 동일한 결과 형태 + {ref, provider, source}
|
||
|
|
*/
|
||
|
|
async function runModel(o) {
|
||
|
|
const m = providers.resolveModel(o.ref, o.userId);
|
||
|
|
let r;
|
||
|
|
if (m.kind === 'claude-cli') {
|
||
|
|
r = await runClaude({ siteDir: o.siteDir, prompt: o.prompt, systemPrompt: o.systemPrompt, tools: CLAUDE_TOOLSETS[o.toolset || 'files'], sessionId: o.sessionId, resume: o.resume, noPersist: o.noPersist, model: m.model, authEnv: m.source === 'user' ? (m.apiKey ? { ANTHROPIC_API_KEY: m.apiKey } : { CLAUDE_CODE_OAUTH_TOKEN: m.oauthToken }) : null, onEvent: o.onEvent, onStart: o.onStart });
|
||
|
|
} else if (m.kind === 'codex-cli') {
|
||
|
|
r = await runCodex({ siteDir: o.siteDir, prompt: o.prompt, systemPrompt: o.systemPrompt, toolset: o.toolset || 'files', model: m.model, price: m.price, onEvent: o.onEvent, onStart: o.onStart });
|
||
|
|
} else {
|
||
|
|
r = await runAgent({ siteDir: o.siteDir, prompt: o.prompt, systemPrompt: o.systemPrompt, toolset: o.toolset || 'files', model: m.model, provider: m.provider, apiKey: m.apiKey, baseUrl: m.baseUrl, price: m.price, onEvent: o.onEvent, onStart: o.onStart });
|
||
|
|
}
|
||
|
|
if (m.source === 'user' && m.connId) { try { providers.updateUserConn(o.userId, m.connId, { lastUsedAt: new Date().toISOString() }); } catch (_) {} }
|
||
|
|
return { ...r, ref: m.ref, provider: m.provider, source: m.source, model: m.ref };
|
||
|
|
}
|
||
|
|
module.exports = { runModel };
|