Skip to content
This repository was archived by the owner on Jul 4, 2025. It is now read-only.
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 0 additions & 1 deletion cortex-js/src/domain/abstracts/oai.abstract.ts
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,6 @@ export abstract class OAIEngineExtension extends EngineExtension {
}),
);


if (!response) {
throw new Error('No response');
}
Expand Down
75 changes: 39 additions & 36 deletions cortex-js/src/extensions/cohere.engine.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8,16 +8,16 @@ import { EngineStatus } from '@/domain/abstracts/engine.abstract';
import { ChatCompletionMessage } from '@/infrastructure/dtos/chat/chat-completion-message.dto';

enum RoleType {
user = 'USER',
chatbot = 'CHATBOT',
system = 'SYSTEM',
}
type CoherePayloadType = {
chat_history?: Array<{ role: RoleType; message: string }>
message?: string
preamble?: string
}
user = 'USER',
chatbot = 'CHATBOT',
system = 'SYSTEM',
}

type CoherePayloadType = {
chat_history?: Array<{ role: RoleType; message: string }>;
message?: string;
preamble?: string;
};

/**
* A class that implements the InferenceExtension interface from the @janhq/core package.
Expand Down Expand Up @@ -62,9 +62,9 @@ export default class CoHereEngineExtension extends OAIEngineExtension {
}

transformPayload = (payload: any): CoherePayloadType => {
console.log('payload', payload)
console.log('payload', payload);
if (payload.messages.length === 0) {
return {}
return {};
}

const { messages, ...params } = payload;
Expand All @@ -73,31 +73,34 @@ export default class CoHereEngineExtension extends OAIEngineExtension {
chat_history: [],
message: '',
};
(messages as ChatCompletionMessage[]).forEach((item: ChatCompletionMessage, index: number) => {
// Assign the message of the last item to the `message` property
if (index === messages.length - 1) {
convertedData.message = item.content as string
return
}
if (item.role === 'user') {
convertedData.chat_history!!.push({
role: 'USER' as RoleType,
message: item.content as string,
})
} else if (item.role === 'assistant') {
convertedData.chat_history!!.push({
role: 'CHATBOT' as RoleType,
message: item.content as string,
})
} else if (item.role === 'system') {
convertedData.preamble = item.content as string
}
})
return convertedData
}
(messages as ChatCompletionMessage[]).forEach(
(item: ChatCompletionMessage, index: number) => {
// Assign the message of the last item to the `message` property
if (index === messages.length - 1) {
convertedData.message = item.content as string;
return;
}
if (item.role === 'user') {
convertedData.chat_history!.push({
role: 'USER' as RoleType,
message: item.content as string,
});
} else if (item.role === 'assistant') {
convertedData.chat_history!.push({
role: 'CHATBOT' as RoleType,
message: item.content as string,
});
} else if (item.role === 'system') {
convertedData.preamble = item.content as string;
}
},
);
return convertedData;
};

transformResponse = (data: any) => {
const text = typeof data === 'object' ? data.text : JSON.parse(data).text ?? ''
const text =
typeof data === 'object' ? data.text : (JSON.parse(data).text ?? '');
return JSON.stringify({
choices: [
{
Expand All @@ -107,5 +110,5 @@ export default class CoHereEngineExtension extends OAIEngineExtension {
},
],
});
}
};
}
7 changes: 3 additions & 4 deletions cortex-js/src/extensions/openrouter.engine.ts
Original file line number Diff line number Diff line change
Expand Up @@ -50,9 +50,8 @@ export default class OpenRouterEngineExtension extends OAIEngineExtension {

transformPayload = (data: any): any => {
return {
...data,
model:"openrouter/auto",
}
...data,
model: 'openrouter/auto',
};
};

}
52 changes: 47 additions & 5 deletions cortex-js/src/infrastructure/controllers/chat.controller.ts
Original file line number Diff line number Diff line change
Expand Up @@ -33,8 +33,9 @@ export class ChatController {
@Body() createChatDto: CreateChatCompletionDto,
@Res() res: Response,
) {
const { stream } = createChatDto;

let { stream } = createChatDto;
stream = false;
createChatDto.stream = stream;
this.chatService
.inference(createChatDto, extractCommonHeaders(headers))
.then((response) => {
Expand All @@ -46,9 +47,50 @@ export class ChatController {
res.json(response);
}
})
.catch((error) =>
res.status(error.statusCode ?? 400).send(error.message),
);
.catch((error) => {
const statusCode = error.response?.status ?? 400;
let errorMessage;
if (!stream) {
const data = error.response?.data;
return res
.status(statusCode)
.send(
data.error?.message ||
data.message ||
error.message ||
'An error occurred',
);
}
const streamResponse = error.response?.data;
let data = '';

streamResponse.on('data', (chunk: any) => {
data += chunk;
});

streamResponse.on('end', () => {
try {
const jsonResponse = JSON.parse(data);
errorMessage =
jsonResponse.error?.message ||
jsonResponse.message ||
error.message ||
'An error occurred';
} catch (err) {
errorMessage = 'An error occurred while processing the response';
}
return res
.status(error.statusCode ?? 400)
.send(errorMessage || error.message || 'An error occurred');
});

streamResponse.on('error', (streamError: any) => {
errorMessage = streamError.message ?? 'An error occurred';
return res
.status(error.statusCode ?? 400)
.send(errorMessage || error.message || 'An error occurred');
});
});

this.telemetryUsecases.addEventToQueue({
name: EventName.CHAT,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -112,7 +112,7 @@ export class EnginesController {
})
@Patch(':name(*)')
update(@Param('name') name: string, @Body() configs?: any | undefined) {
console.log('configs', configs)
console.log('configs', configs);
return this.enginesUsecases.updateConfigs(
configs.config,
configs.value,
Expand Down