✅ Fix chat interface - restore continuous conversation flow
🎯 Major improvements to MissionControl component: - Always keep input field visible and functional after AI responses - Auto-clear input after submitting questions for better UX - Add dynamic visual indicators (first question vs follow-up) - Improve response layout with clear separation and hints - Enable proper chat-like experience for continuous learning 🌟 Additional enhancements: - Better language-specific messaging throughout interface - Clearer visual hierarchy between input and response areas - Intuitive flow that guides users to ask follow-up questions - Maintains responsive design and accessibility 🔧 Technical changes: - Enhanced MissionControl state management - Improved component layout and styling - Better TypeScript integration across components - Updated tsconfig for stricter type checking
This commit is contained in:
47
node_modules/openai/lib/AssistantStream.mjs
generated
vendored
47
node_modules/openai/lib/AssistantStream.mjs
generated
vendored
@@ -1,9 +1,19 @@
|
||||
var _AssistantStream_instances, _a, _AssistantStream_events, _AssistantStream_runStepSnapshots, _AssistantStream_messageSnapshots, _AssistantStream_messageSnapshot, _AssistantStream_finalRun, _AssistantStream_currentContentIndex, _AssistantStream_currentContent, _AssistantStream_currentToolCallIndex, _AssistantStream_currentToolCall, _AssistantStream_currentEvent, _AssistantStream_currentRunSnapshot, _AssistantStream_currentRunStepSnapshot, _AssistantStream_addEvent, _AssistantStream_endRequest, _AssistantStream_handleMessage, _AssistantStream_handleRunStep, _AssistantStream_handleEvent, _AssistantStream_accumulateRunStep, _AssistantStream_accumulateMessage, _AssistantStream_accumulateContent, _AssistantStream_handleRun;
|
||||
import { __classPrivateFieldGet, __classPrivateFieldSet } from "../internal/tslib.mjs";
|
||||
var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
|
||||
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
|
||||
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
|
||||
return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
|
||||
};
|
||||
var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {
|
||||
if (kind === "m") throw new TypeError("Private method is not writable");
|
||||
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter");
|
||||
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it");
|
||||
return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;
|
||||
};
|
||||
var _AssistantStream_instances, _AssistantStream_events, _AssistantStream_runStepSnapshots, _AssistantStream_messageSnapshots, _AssistantStream_messageSnapshot, _AssistantStream_finalRun, _AssistantStream_currentContentIndex, _AssistantStream_currentContent, _AssistantStream_currentToolCallIndex, _AssistantStream_currentToolCall, _AssistantStream_currentEvent, _AssistantStream_currentRunSnapshot, _AssistantStream_currentRunStepSnapshot, _AssistantStream_addEvent, _AssistantStream_endRequest, _AssistantStream_handleMessage, _AssistantStream_handleRunStep, _AssistantStream_handleEvent, _AssistantStream_accumulateRunStep, _AssistantStream_accumulateMessage, _AssistantStream_accumulateContent, _AssistantStream_handleRun;
|
||||
import * as Core from "../core.mjs";
|
||||
import { Stream } from "../streaming.mjs";
|
||||
import { APIUserAbortError, OpenAIError } from "../error.mjs";
|
||||
import { EventStream } from "./EventStream.mjs";
|
||||
import { isObj } from "../internal/utils.mjs";
|
||||
export class AssistantStream extends EventStream {
|
||||
constructor() {
|
||||
super(...arguments);
|
||||
@@ -78,7 +88,7 @@ export class AssistantStream extends EventStream {
|
||||
};
|
||||
}
|
||||
static fromReadableStream(stream) {
|
||||
const runner = new _a();
|
||||
const runner = new AssistantStream();
|
||||
runner._run(() => runner._fromReadableStream(stream));
|
||||
return runner;
|
||||
}
|
||||
@@ -103,15 +113,15 @@ export class AssistantStream extends EventStream {
|
||||
const stream = new Stream(this[Symbol.asyncIterator].bind(this), this.controller);
|
||||
return stream.toReadableStream();
|
||||
}
|
||||
static createToolAssistantStream(runId, runs, params, options) {
|
||||
const runner = new _a();
|
||||
runner._run(() => runner._runToolAssistantStream(runId, runs, params, {
|
||||
static createToolAssistantStream(threadId, runId, runs, params, options) {
|
||||
const runner = new AssistantStream();
|
||||
runner._run(() => runner._runToolAssistantStream(threadId, runId, runs, params, {
|
||||
...options,
|
||||
headers: { ...options?.headers, 'X-Stainless-Helper-Method': 'stream' },
|
||||
}));
|
||||
return runner;
|
||||
}
|
||||
async _createToolAssistantStream(run, runId, params, options) {
|
||||
async _createToolAssistantStream(run, threadId, runId, params, options) {
|
||||
const signal = options?.signal;
|
||||
if (signal) {
|
||||
if (signal.aborted)
|
||||
@@ -119,7 +129,7 @@ export class AssistantStream extends EventStream {
|
||||
signal.addEventListener('abort', () => this.controller.abort());
|
||||
}
|
||||
const body = { ...params, stream: true };
|
||||
const stream = await run.submitToolOutputs(runId, body, {
|
||||
const stream = await run.submitToolOutputs(threadId, runId, body, {
|
||||
...options,
|
||||
signal: this.controller.signal,
|
||||
});
|
||||
@@ -133,7 +143,7 @@ export class AssistantStream extends EventStream {
|
||||
return this._addRun(__classPrivateFieldGet(this, _AssistantStream_instances, "m", _AssistantStream_endRequest).call(this));
|
||||
}
|
||||
static createThreadAssistantStream(params, thread, options) {
|
||||
const runner = new _a();
|
||||
const runner = new AssistantStream();
|
||||
runner._run(() => runner._threadAssistantStream(params, thread, {
|
||||
...options,
|
||||
headers: { ...options?.headers, 'X-Stainless-Helper-Method': 'stream' },
|
||||
@@ -141,7 +151,7 @@ export class AssistantStream extends EventStream {
|
||||
return runner;
|
||||
}
|
||||
static createAssistantStream(threadId, runs, params, options) {
|
||||
const runner = new _a();
|
||||
const runner = new AssistantStream();
|
||||
runner._run(() => runner._runAssistantStream(threadId, runs, params, {
|
||||
...options,
|
||||
headers: { ...options?.headers, 'X-Stainless-Helper-Method': 'stream' },
|
||||
@@ -233,7 +243,7 @@ export class AssistantStream extends EventStream {
|
||||
else if (typeof accValue === 'number' && typeof deltaValue === 'number') {
|
||||
accValue += deltaValue;
|
||||
}
|
||||
else if (isObj(accValue) && isObj(deltaValue)) {
|
||||
else if (Core.isObj(accValue) && Core.isObj(deltaValue)) {
|
||||
accValue = this.accumulateDelta(accValue, deltaValue);
|
||||
}
|
||||
else if (Array.isArray(accValue) && Array.isArray(deltaValue)) {
|
||||
@@ -242,7 +252,7 @@ export class AssistantStream extends EventStream {
|
||||
continue;
|
||||
}
|
||||
for (const deltaEntry of deltaValue) {
|
||||
if (!isObj(deltaEntry)) {
|
||||
if (!Core.isObj(deltaEntry)) {
|
||||
throw new Error(`Expected array delta entry to be an object but got: ${deltaEntry}`);
|
||||
}
|
||||
const index = deltaEntry['index'];
|
||||
@@ -279,11 +289,11 @@ export class AssistantStream extends EventStream {
|
||||
async _runAssistantStream(threadId, runs, params, options) {
|
||||
return await this._createAssistantStream(runs, threadId, params, options);
|
||||
}
|
||||
async _runToolAssistantStream(runId, runs, params, options) {
|
||||
return await this._createToolAssistantStream(runs, runId, params, options);
|
||||
async _runToolAssistantStream(threadId, runId, runs, params, options) {
|
||||
return await this._createToolAssistantStream(runs, threadId, runId, params, options);
|
||||
}
|
||||
}
|
||||
_a = AssistantStream, _AssistantStream_addEvent = function _AssistantStream_addEvent(event) {
|
||||
_AssistantStream_addEvent = function _AssistantStream_addEvent(event) {
|
||||
if (this.ended)
|
||||
return;
|
||||
__classPrivateFieldSet(this, _AssistantStream_currentEvent, event, "f");
|
||||
@@ -465,7 +475,7 @@ _a = AssistantStream, _AssistantStream_addEvent = function _AssistantStream_addE
|
||||
}
|
||||
let data = event.data;
|
||||
if (data.delta) {
|
||||
const accumulated = _a.accumulateDelta(snapshot, data.delta);
|
||||
const accumulated = AssistantStream.accumulateDelta(snapshot, data.delta);
|
||||
__classPrivateFieldGet(this, _AssistantStream_runStepSnapshots, "f")[event.data.id] = accumulated;
|
||||
}
|
||||
return __classPrivateFieldGet(this, _AssistantStream_runStepSnapshots, "f")[event.data.id];
|
||||
@@ -519,7 +529,7 @@ _a = AssistantStream, _AssistantStream_addEvent = function _AssistantStream_addE
|
||||
}
|
||||
throw Error('Tried to accumulate a non-message event');
|
||||
}, _AssistantStream_accumulateContent = function _AssistantStream_accumulateContent(contentElement, currentContent) {
|
||||
return _a.accumulateDelta(currentContent, contentElement);
|
||||
return AssistantStream.accumulateDelta(currentContent, contentElement);
|
||||
}, _AssistantStream_handleRun = function _AssistantStream_handleRun(event) {
|
||||
__classPrivateFieldSet(this, _AssistantStream_currentRunSnapshot, event.data, "f");
|
||||
switch (event.event) {
|
||||
@@ -534,7 +544,6 @@ _a = AssistantStream, _AssistantStream_addEvent = function _AssistantStream_addE
|
||||
case 'thread.run.failed':
|
||||
case 'thread.run.completed':
|
||||
case 'thread.run.expired':
|
||||
case 'thread.run.incomplete':
|
||||
__classPrivateFieldSet(this, _AssistantStream_finalRun, event.data, "f");
|
||||
if (__classPrivateFieldGet(this, _AssistantStream_currentToolCall, "f")) {
|
||||
this._emit('toolCallDone', __classPrivateFieldGet(this, _AssistantStream_currentToolCall, "f"));
|
||||
|
||||
Reference in New Issue
Block a user