fix: đã sửa lỗi các tools của AI
This commit is contained in:
@@ -7021,6 +7021,11 @@ const App = () => {
|
|||||||
if (!hasText && !hasCalls) {
|
if (!hasText && !hasCalls) {
|
||||||
setAiActionLog(prev => [...prev, { type: 'error', text: ` AI không trả về lệnh hoặc text. Kiểm tra provider/model có hỗ trợ function calling.`, time: Date.now() }]);
|
setAiActionLog(prev => [...prev, { type: 'error', text: ` AI không trả về lệnh hoặc text. Kiểm tra provider/model có hỗ trợ function calling.`, time: Date.now() }]);
|
||||||
}
|
}
|
||||||
|
if (prompt) {
|
||||||
|
promptHistRef.current = [...promptHistRef.current.slice(-49), prompt];
|
||||||
|
setPromptHistory(promptHistRef.current);
|
||||||
|
}
|
||||||
|
setPromptHistIdx(-1);
|
||||||
setAiActionLog(prev => [...prev, { type: 'status', text: ` Hoàn tất.`, time: Date.now() }]);
|
setAiActionLog(prev => [...prev, { type: 'status', text: ` Hoàn tất.`, time: Date.now() }]);
|
||||||
setAiPrompt('');
|
setAiPrompt('');
|
||||||
setTimeout(() => lucide.createIcons(), 200);
|
setTimeout(() => lucide.createIcons(), 200);
|
||||||
@@ -7352,6 +7357,9 @@ const App = () => {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
detectedBPM = Math.round(Math.min(300, Math.max(30, detectedBPM)));
|
detectedBPM = Math.round(Math.min(300, Math.max(30, detectedBPM)));
|
||||||
|
if (args.set_tempo !== false && detectedBPM > 0) {
|
||||||
|
setBpm(String(detectedBPM));
|
||||||
|
}
|
||||||
const bitDepth = 16;
|
const bitDepth = 16;
|
||||||
const bitrate = Math.round(sr * channels * bitDepth / 1000);
|
const bitrate = Math.round(sr * channels * bitDepth / 1000);
|
||||||
return {
|
return {
|
||||||
@@ -8306,6 +8314,22 @@ const App = () => {
|
|||||||
if (e.key === 'Enter' && !e.shiftKey) {
|
if (e.key === 'Enter' && !e.shiftKey) {
|
||||||
e.preventDefault();
|
e.preventDefault();
|
||||||
handleAISend();
|
handleAISend();
|
||||||
|
} else if (e.key === 'ArrowUp' && promptHistRef.current.length > 0) {
|
||||||
|
e.preventDefault();
|
||||||
|
const idx = promptHistIdx === -1 ? promptHistRef.current.length - 1 : Math.max(0, promptHistIdx - 1);
|
||||||
|
setPromptHistIdx(idx);
|
||||||
|
setAiPrompt(promptHistRef.current[idx]);
|
||||||
|
} else if (e.key === 'ArrowDown') {
|
||||||
|
e.preventDefault();
|
||||||
|
if (promptHistIdx === -1) return;
|
||||||
|
const idx = promptHistIdx + 1;
|
||||||
|
if (idx >= promptHistRef.current.length) {
|
||||||
|
setPromptHistIdx(-1);
|
||||||
|
setAiPrompt('');
|
||||||
|
} else {
|
||||||
|
setPromptHistIdx(idx);
|
||||||
|
setAiPrompt(promptHistRef.current[idx]);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}), /*#__PURE__*/React.createElement("div", {
|
}), /*#__PURE__*/React.createElement("div", {
|
||||||
|
|||||||
@@ -3056,6 +3056,9 @@ const App = () => {
|
|||||||
isRunning: false
|
isRunning: false
|
||||||
});
|
});
|
||||||
const [aiPrompt, setAiPrompt] = useState('');
|
const [aiPrompt, setAiPrompt] = useState('');
|
||||||
|
const [promptHistory, setPromptHistory] = useState([]);
|
||||||
|
const [promptHistIdx, setPromptHistIdx] = useState(-1);
|
||||||
|
const promptHistRef = useRef([]);
|
||||||
const [aiProvider, setAiProvider] = useState('OpenAI');
|
const [aiProvider, setAiProvider] = useState('OpenAI');
|
||||||
const [aiModel, setAiModel] = useState('GPT-4o');
|
const [aiModel, setAiModel] = useState('GPT-4o');
|
||||||
const [aiActionLog, setAiActionLog] = useState([]);
|
const [aiActionLog, setAiActionLog] = useState([]);
|
||||||
@@ -7057,6 +7060,11 @@ const App = () => {
|
|||||||
time: Date.now()
|
time: Date.now()
|
||||||
}]);
|
}]);
|
||||||
}
|
}
|
||||||
|
if (prompt) {
|
||||||
|
promptHistRef.current = [...promptHistRef.current.slice(-49), prompt];
|
||||||
|
setPromptHistory(promptHistRef.current);
|
||||||
|
}
|
||||||
|
setPromptHistIdx(-1);
|
||||||
setAiActionLog(prev => [...prev, {
|
setAiActionLog(prev => [...prev, {
|
||||||
type: 'status',
|
type: 'status',
|
||||||
text: ` Hoàn tất.`,
|
text: ` Hoàn tất.`,
|
||||||
@@ -7485,6 +7493,9 @@ const App = () => {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
detectedBPM = Math.round(Math.min(300, Math.max(30, detectedBPM)));
|
detectedBPM = Math.round(Math.min(300, Math.max(30, detectedBPM)));
|
||||||
|
if (args.set_tempo !== false && detectedBPM > 0) {
|
||||||
|
setBpm(String(detectedBPM));
|
||||||
|
}
|
||||||
const bitDepth = 16;
|
const bitDepth = 16;
|
||||||
const bitrate = Math.round(sr * channels * bitDepth / 1000);
|
const bitrate = Math.round(sr * channels * bitDepth / 1000);
|
||||||
return {
|
return {
|
||||||
@@ -8451,6 +8462,22 @@ const App = () => {
|
|||||||
if (e.key === 'Enter' && !e.shiftKey) {
|
if (e.key === 'Enter' && !e.shiftKey) {
|
||||||
e.preventDefault();
|
e.preventDefault();
|
||||||
handleAISend();
|
handleAISend();
|
||||||
|
} else if (e.key === 'ArrowUp' && promptHistRef.current.length > 0) {
|
||||||
|
e.preventDefault();
|
||||||
|
const idx = promptHistIdx === -1 ? promptHistRef.current.length - 1 : Math.max(0, promptHistIdx - 1);
|
||||||
|
setPromptHistIdx(idx);
|
||||||
|
setAiPrompt(promptHistRef.current[idx]);
|
||||||
|
} else if (e.key === 'ArrowDown') {
|
||||||
|
e.preventDefault();
|
||||||
|
if (promptHistIdx === -1) return;
|
||||||
|
const idx = promptHistIdx + 1;
|
||||||
|
if (idx >= promptHistRef.current.length) {
|
||||||
|
setPromptHistIdx(-1);
|
||||||
|
setAiPrompt('');
|
||||||
|
} else {
|
||||||
|
setPromptHistIdx(idx);
|
||||||
|
setAiPrompt(promptHistRef.current[idx]);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}), /*#__PURE__*/React.createElement("div", {
|
}), /*#__PURE__*/React.createElement("div", {
|
||||||
|
|||||||
@@ -168,11 +168,12 @@ const AIGateway = (function() {
|
|||||||
}
|
}
|
||||||
}, {
|
}, {
|
||||||
name: 'scan_track',
|
name: 'scan_track',
|
||||||
description: 'Quét và phân tích track âm thanh: phát hiện BPM (tempo), sample rate, số kênh (mono/stereo), bit depth, duration',
|
description: 'Quét và phân tích track âm thanh: phát hiện BPM (tempo) và tự động cập nhật tempo hệ thống, sample rate, số kênh (mono/stereo), duration',
|
||||||
parameters: {
|
parameters: {
|
||||||
type: 'object',
|
type: 'object',
|
||||||
properties: {
|
properties: {
|
||||||
track_id: { type: 'string', description: 'ID của track cần quét. Nếu không có thì quét track đang chọn.' }
|
track_id: { type: 'string', description: 'ID của track cần quét' },
|
||||||
|
set_tempo: { type: 'boolean', description: 'Tự động cập nhật tempo hệ thống (mặc định: true)' }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}, {
|
}, {
|
||||||
|
|||||||
Binary file not shown.
Reference in New Issue
Block a user