diff --git a/src/agent/llm/LLMProvider.ts b/src/agent/llm/LLMProvider.ts index bca9437..adb6c91 100644 --- a/src/agent/llm/LLMProvider.ts +++ b/src/agent/llm/LLMProvider.ts @@ -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(); + 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 = { diff --git a/src/agent/tools/UpdateTrackTool.ts b/src/agent/tools/UpdateTrackTool.ts index bf91611..cea35e4 100644 --- a/src/agent/tools/UpdateTrackTool.ts +++ b/src/agent/tools/UpdateTrackTool.ts @@ -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(); diff --git a/src/util/abcNotationUtil.ts b/src/util/abcNotationUtil.ts index 8979964..08ee9f0 100644 --- a/src/util/abcNotationUtil.ts +++ b/src/util/abcNotationUtil.ts @@ -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 }; diff --git a/vite.config.ts b/vite.config.ts index 492a9cd..5802a65 100644 --- a/vite.config.ts +++ b/vite.config.ts @@ -16,6 +16,12 @@ export default defineConfig({ define: { __APP_VERSION__: JSON.stringify(version), }, + esbuild: { + keepNames: true, + }, + build: { + sourcemap: true, + }, server: { host: true, headers: {