fix: use configured AI provider for piano roll prompt, not hardcoded

Piano roll AI prompt now selects provider via same logic as main AI
handler (aiProviders, selectedProviderId, baseUrl, apiKey, model).
No longer hardcodes provider:'openai', model:'gpt-4o'.
This commit is contained in:
2026-07-25 16:26:47 +07:00
parent 7dd6300500
commit a59a36ec90
2 changed files with 22 additions and 4 deletions
+21 -3
View File
@@ -12242,10 +12242,28 @@ const App = () => {
setAiProcessing(true);
setAiActionLog(prev => [...prev, { type: 'status', text: ` ⏳ Đang gửi prompt đến AI cho Piano Roll...`, time: Date.now() }]);
try {
if (aiProviders.length === 0 || !selectedProviderId) {
try {
const data = await window.SonicAPI.getAIConfigs();
if (data && data.providers && data.providers.length > 0) {
setAiProviders(data.providers);
const active = data.providers.find(p => p.is_active) || data.providers[0];
if (active) setSelectedProviderId(active.id);
}
} catch (e) { }
}
const prv = aiProviders.find(p => p.id === selectedProviderId) || (aiProviders.length > 0 ? aiProviders[0] : null);
const provider = prv || aiConfig;
const baseUrl = provider.api_base_url || provider.baseUrl || `${API_BASE_URL}`;
const apiKey = provider.api_key || provider.apiKey || '';
const model = provider.model_name || provider.model || 'deepseek-chat';
setAiActionLog(prev => [...prev, { type: 'info', text: ` Provider: ${provider.name || 'default'} | Model: ${model}`, time: Date.now() }]);
const result = await window.AIGateway.executeAIPrompt({
prompt: 'Generate MIDI notes for a piano roll. Return ONLY a JSON array: [{pitch(0-127), start_beat, duration_beats, velocity(0.0-1.0)}]. ' + prompt,
provider: 'openai',
model: 'gpt-4o',
provider: provider.name || 'default',
model: model,
apiKey: apiKey,
baseUrl: baseUrl.replace(/\/chat\/completions$/, '').replace(/\/$/, ''),
systemInstruction: 'You are a MIDI composer. Output ONLY valid JSON array of notes. No markdown, no explanation. Use 4/4 time. pitch=C4=60, D4=62, E4=64, F4=65, G4=67, A4=69, B4=71, C5=72.'
});
if (!result) throw new Error('AI không phản hồi');
@@ -12255,7 +12273,7 @@ const App = () => {
try {
const cleaned = textResp.replace(/```json?\s*/g, '').replace(/```/g, '').trim();
notesData = JSON.parse(cleaned);
} catch (e1) {}
} catch (e1) { console.error('Parse notes error:', e1); }
}
if (!notesData && result.functionCalls) {
for (const fc of result.functionCalls) {
File diff suppressed because one or more lines are too long