Merge pull request #51 from KGAudioLab/feat/2026-06-01-enhance-ai-agent
Feat/2026 06 01 enhance ai agent
This commit is contained in:
@@ -165,8 +165,9 @@ export class OpenAICompatibleLLMProvider implements LLMProvider {
|
|||||||
requestParams.tool_choice = 'auto';
|
requestParams.tool_choice = 'auto';
|
||||||
}
|
}
|
||||||
|
|
||||||
const stream = this.client.chat.completions.stream(requestParams);
|
const stream = await this.client.chat.completions.create(requestParams);
|
||||||
const toolCallAccumulator = new Map<number, { id: string; name: string; arguments: string }>();
|
const toolCallAccumulator = new Map<number, { id: string; name: string; arguments: string }>();
|
||||||
|
let finishReason = 'stop';
|
||||||
|
|
||||||
for await (const chunk of stream) {
|
for await (const chunk of stream) {
|
||||||
// Do not delete: leave this commented out for future debugging purpose.
|
// Do not delete: leave this commented out for future debugging purpose.
|
||||||
@@ -174,6 +175,10 @@ export class OpenAICompatibleLLMProvider implements LLMProvider {
|
|||||||
const choice = chunk.choices[0];
|
const choice = chunk.choices[0];
|
||||||
if (!choice) continue;
|
if (!choice) continue;
|
||||||
|
|
||||||
|
if (choice.finish_reason) {
|
||||||
|
finishReason = choice.finish_reason;
|
||||||
|
}
|
||||||
|
|
||||||
const delta = choice.delta;
|
const delta = choice.delta;
|
||||||
if (delta.content) {
|
if (delta.content) {
|
||||||
yield { type: 'text', content: delta.content };
|
yield { type: 'text', content: delta.content };
|
||||||
@@ -197,9 +202,6 @@ export class OpenAICompatibleLLMProvider implements LLMProvider {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
const finalCompletion = await stream.finalChatCompletion();
|
|
||||||
const finishReason = finalCompletion.choices[0]?.finish_reason ?? 'stop';
|
|
||||||
|
|
||||||
if (toolCallAccumulator.size > 0) {
|
if (toolCallAccumulator.size > 0) {
|
||||||
for (const [, tc] of toolCallAccumulator) {
|
for (const [, tc] of toolCallAccumulator) {
|
||||||
const toolCall: ToolCall = {
|
const toolCall: ToolCall = {
|
||||||
|
|||||||
@@ -137,10 +137,11 @@ export class UpdateTrackTool extends BaseTool {
|
|||||||
|
|
||||||
let instrumentKey: InstrumentType | undefined;
|
let instrumentKey: InstrumentType | undefined;
|
||||||
if (instrumentName !== undefined) {
|
if (instrumentName !== undefined) {
|
||||||
instrumentKey = resolveInstrumentKeyByEnglishName(instrumentName);
|
const resolvedInstrumentKey = resolveInstrumentKeyByEnglishName(instrumentName);
|
||||||
if (!instrumentKey) {
|
if (resolvedInstrumentKey === null) {
|
||||||
return this.createErrorResult(`Invalid instrument "${instrumentName}". Use the exact English name from list_all_available_instruments.`);
|
return this.createErrorResult(`Invalid instrument "${instrumentName}". Use the exact English name from list_all_available_instruments.`);
|
||||||
}
|
}
|
||||||
|
instrumentKey = resolvedInstrumentKey;
|
||||||
}
|
}
|
||||||
|
|
||||||
const trackNameChanged = newTrackName !== undefined && newTrackName !== resolvedTrack.getName();
|
const trackNameChanged = newTrackName !== undefined && newTrackName !== resolvedTrack.getName();
|
||||||
|
|||||||
@@ -8,6 +8,7 @@ import { KGMidiNote } from '../core/midi/KGMidiNote';
|
|||||||
import { KGCore } from '../core/KGCore';
|
import { KGCore } from '../core/KGCore';
|
||||||
import { KGProject } from '../core/KGProject';
|
import { KGProject } from '../core/KGProject';
|
||||||
import { KGChordRegion } from '../core/region/KGChordRegion';
|
import { KGChordRegion } from '../core/region/KGChordRegion';
|
||||||
|
import { KGMidiTrack } from '../core/track/KGMidiTrack';
|
||||||
import { FLUIDR3_INSTRUMENT_MAP } from '../constants/generalMidiConstants';
|
import { FLUIDR3_INSTRUMENT_MAP } from '../constants/generalMidiConstants';
|
||||||
import { pitchToNoteName } from './midiUtil';
|
import { pitchToNoteName } from './midiUtil';
|
||||||
import { beatsToTicks, getTicksPerBar, reduceFraction } from './mathUtil';
|
import { beatsToTicks, getTicksPerBar, reduceFraction } from './mathUtil';
|
||||||
@@ -174,14 +175,15 @@ function resolveRegionTrackMetadata(region: KGMidiRegion, project: KGProject): {
|
|||||||
trackName: string;
|
trackName: string;
|
||||||
instrumentName: string;
|
instrumentName: string;
|
||||||
} {
|
} {
|
||||||
const trackId = region.getTrackId();
|
const trackId = String(region.getTrackId());
|
||||||
const track = project.getTracks().find(candidate => candidate.getId().toString() === trackId);
|
const track = project.getTracks().find(candidate => candidate.getId().toString() === trackId);
|
||||||
const trackName = track?.getName() || 'Unnamed Track';
|
const midiTrack = track?.getCurrentType() === 'KGMidiTrack'
|
||||||
const instrumentKey = 'getInstrument' in (track ?? {}) && typeof track.getInstrument === 'function'
|
? track as KGMidiTrack
|
||||||
? track.getInstrument()
|
|
||||||
: null;
|
: null;
|
||||||
|
const trackName = track?.getName() || 'Unnamed Track';
|
||||||
|
const instrumentKey = midiTrack?.getInstrument() ?? null;
|
||||||
const instrumentName = instrumentKey
|
const instrumentName = instrumentKey
|
||||||
? FLUIDR3_INSTRUMENT_MAP[instrumentKey]?.displayName || instrumentKey
|
? FLUIDR3_INSTRUMENT_MAP[instrumentKey]?.displayName || String(instrumentKey)
|
||||||
: 'Unknown Instrument';
|
: 'Unknown Instrument';
|
||||||
|
|
||||||
return { trackId, trackName, instrumentName };
|
return { trackId, trackName, instrumentName };
|
||||||
|
|||||||
@@ -16,6 +16,12 @@ export default defineConfig({
|
|||||||
define: {
|
define: {
|
||||||
__APP_VERSION__: JSON.stringify(version),
|
__APP_VERSION__: JSON.stringify(version),
|
||||||
},
|
},
|
||||||
|
esbuild: {
|
||||||
|
keepNames: true,
|
||||||
|
},
|
||||||
|
build: {
|
||||||
|
sourcemap: true,
|
||||||
|
},
|
||||||
server: {
|
server: {
|
||||||
host: true,
|
host: true,
|
||||||
headers: {
|
headers: {
|
||||||
|
|||||||
Reference in New Issue
Block a user