feat: enhance request handling and error management in chatCore and streamToJsonConverter
- Added detailed request logging and latency tracking in handleChatCore. - Improved error handling for SSE to JSON conversion and JSON parsing in streamToJsonConverter. - Introduced a safe JSON parsing utility to handle potential parsing errors gracefully in requestDetailsDb. Co-authored-by: zx <me@char.moe>
This commit is contained in:
@@ -298,7 +298,8 @@ function safeJsonStringify(obj, maxSize) {
|
||||
try {
|
||||
const str = JSON.stringify(obj);
|
||||
if (str.length > maxSize) {
|
||||
return str.substring(0, maxSize) + "... (truncated due to size limit)";
|
||||
// Return valid JSON instead of truncated invalid string
|
||||
return JSON.stringify({ _truncated: true, _originalSize: str.length, _preview: str.substring(0, 200) });
|
||||
}
|
||||
return str;
|
||||
} catch (error) {
|
||||
@@ -456,6 +457,12 @@ export async function getRequestDetails(filter = {}) {
|
||||
const stmt = db.prepare(query);
|
||||
const rows = stmt.all(...params);
|
||||
|
||||
// Safe JSON parse — returns fallback on corrupt/truncated data
|
||||
const safeJsonParse = (str, fallback = {}) => {
|
||||
try { return JSON.parse(str || '{}'); }
|
||||
catch { return fallback; }
|
||||
};
|
||||
|
||||
// Convert back to original format
|
||||
const details = rows.map(row => ({
|
||||
id: row.id,
|
||||
@@ -464,12 +471,12 @@ export async function getRequestDetails(filter = {}) {
|
||||
connectionId: row.connection_id,
|
||||
timestamp: new Date(row.timestamp).toISOString(),
|
||||
status: row.status,
|
||||
latency: JSON.parse(row.latency || '{}'),
|
||||
tokens: JSON.parse(row.tokens || '{}'),
|
||||
request: JSON.parse(row.request || '{}'),
|
||||
providerRequest: JSON.parse(row.provider_request || '{}'),
|
||||
providerResponse: JSON.parse(row.provider_response || '{}'),
|
||||
response: JSON.parse(row.response || '{}')
|
||||
latency: safeJsonParse(row.latency),
|
||||
tokens: safeJsonParse(row.tokens),
|
||||
request: safeJsonParse(row.request),
|
||||
providerRequest: safeJsonParse(row.provider_request),
|
||||
providerResponse: safeJsonParse(row.provider_response),
|
||||
response: safeJsonParse(row.response)
|
||||
}));
|
||||
|
||||
return {
|
||||
@@ -500,6 +507,11 @@ export async function getRequestDetailById(id) {
|
||||
|
||||
if (!row) return null;
|
||||
|
||||
const safeJsonParse = (str, fallback = {}) => {
|
||||
try { return JSON.parse(str || '{}'); }
|
||||
catch { return fallback; }
|
||||
};
|
||||
|
||||
return {
|
||||
id: row.id,
|
||||
provider: row.provider,
|
||||
@@ -507,11 +519,11 @@ export async function getRequestDetailById(id) {
|
||||
connectionId: row.connection_id,
|
||||
timestamp: new Date(row.timestamp).toISOString(),
|
||||
status: row.status,
|
||||
latency: JSON.parse(row.latency || '{}'),
|
||||
tokens: JSON.parse(row.tokens || '{}'),
|
||||
request: JSON.parse(row.request || '{}'),
|
||||
providerRequest: JSON.parse(row.provider_request || '{}'),
|
||||
providerResponse: JSON.parse(row.provider_response || '{}'),
|
||||
response: JSON.parse(row.response || '{}')
|
||||
latency: safeJsonParse(row.latency),
|
||||
tokens: safeJsonParse(row.tokens),
|
||||
request: safeJsonParse(row.request),
|
||||
providerRequest: safeJsonParse(row.provider_request),
|
||||
providerResponse: safeJsonParse(row.provider_response),
|
||||
response: safeJsonParse(row.response)
|
||||
};
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user