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';
|
||||
}
|
||||
|
||||
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 }>();
|
||||
let finishReason = 'stop';
|
||||
|
||||
for await (const chunk of stream) {
|
||||
// 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];
|
||||
if (!choice) continue;
|
||||
|
||||
if (choice.finish_reason) {
|
||||
finishReason = choice.finish_reason;
|
||||
}
|
||||
|
||||
const delta = choice.delta;
|
||||
if (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) {
|
||||
for (const [, tc] of toolCallAccumulator) {
|
||||
const toolCall: ToolCall = {
|
||||
|
||||
@@ -137,10 +137,11 @@ export class UpdateTrackTool extends BaseTool {
|
||||
|
||||
let instrumentKey: InstrumentType | undefined;
|
||||
if (instrumentName !== undefined) {
|
||||
instrumentKey = resolveInstrumentKeyByEnglishName(instrumentName);
|
||||
if (!instrumentKey) {
|
||||
const resolvedInstrumentKey = resolveInstrumentKeyByEnglishName(instrumentName);
|
||||
if (resolvedInstrumentKey === null) {
|
||||
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();
|
||||
|
||||
@@ -8,6 +8,7 @@ import { KGMidiNote } from '../core/midi/KGMidiNote';
|
||||
import { KGCore } from '../core/KGCore';
|
||||
import { KGProject } from '../core/KGProject';
|
||||
import { KGChordRegion } from '../core/region/KGChordRegion';
|
||||
import { KGMidiTrack } from '../core/track/KGMidiTrack';
|
||||
import { FLUIDR3_INSTRUMENT_MAP } from '../constants/generalMidiConstants';
|
||||
import { pitchToNoteName } from './midiUtil';
|
||||
import { beatsToTicks, getTicksPerBar, reduceFraction } from './mathUtil';
|
||||
@@ -174,14 +175,15 @@ function resolveRegionTrackMetadata(region: KGMidiRegion, project: KGProject): {
|
||||
trackName: string;
|
||||
instrumentName: string;
|
||||
} {
|
||||
const trackId = region.getTrackId();
|
||||
const trackId = String(region.getTrackId());
|
||||
const track = project.getTracks().find(candidate => candidate.getId().toString() === trackId);
|
||||
const trackName = track?.getName() || 'Unnamed Track';
|
||||
const instrumentKey = 'getInstrument' in (track ?? {}) && typeof track.getInstrument === 'function'
|
||||
? track.getInstrument()
|
||||
const midiTrack = track?.getCurrentType() === 'KGMidiTrack'
|
||||
? track as KGMidiTrack
|
||||
: null;
|
||||
const trackName = track?.getName() || 'Unnamed Track';
|
||||
const instrumentKey = midiTrack?.getInstrument() ?? null;
|
||||
const instrumentName = instrumentKey
|
||||
? FLUIDR3_INSTRUMENT_MAP[instrumentKey]?.displayName || instrumentKey
|
||||
? FLUIDR3_INSTRUMENT_MAP[instrumentKey]?.displayName || String(instrumentKey)
|
||||
: 'Unknown Instrument';
|
||||
|
||||
return { trackId, trackName, instrumentName };
|
||||
|
||||
@@ -16,6 +16,12 @@ export default defineConfig({
|
||||
define: {
|
||||
__APP_VERSION__: JSON.stringify(version),
|
||||
},
|
||||
esbuild: {
|
||||
keepNames: true,
|
||||
},
|
||||
build: {
|
||||
sourcemap: true,
|
||||
},
|
||||
server: {
|
||||
host: true,
|
||||
headers: {
|
||||
|
||||
Reference in New Issue
Block a user