UNPKG

@aj-archipelago/cortex

Version:

Cortex is a GraphQL API for AI. It provides a simple, extensible interface for using AI services from OpenAI, Azure and others.

49 lines (36 loc) 1.94 kB
import OpenAIVisionPlugin from './openAiVisionPlugin.js'; class OpenAIReasoningVisionPlugin extends OpenAIVisionPlugin { async tryParseMessages(messages) { const parsedMessages = await super.tryParseMessages(messages); let newMessages = []; // System messages to developer: https://platform.openai.com/docs/guides/text-generation#messages-and-roles newMessages = parsedMessages.map(message => ({ ...message, role: message.role === 'system' ? 'developer' : message.role })).filter(message => ['user', 'assistant', 'developer', 'tool'].includes(message.role)); return newMessages; } async getRequestParameters(text, parameters, prompt) { const requestParameters = await super.getRequestParameters(text, parameters, prompt); const modelMaxReturnTokens = this.getModelMaxReturnTokens(); const maxTokensPrompt = this.promptParameters.max_tokens; const maxTokensModel = this.getModelMaxTokenLength() * (1 - this.getPromptTokenRatio()); const maxTokens = maxTokensPrompt || maxTokensModel; delete requestParameters.max_tokens; requestParameters.max_completion_tokens = maxTokens ? Math.min(maxTokens, modelMaxReturnTokens) : modelMaxReturnTokens; requestParameters.temperature = 1; if (this.promptParameters.reasoningEffort) { const effort = this.promptParameters.reasoningEffort.toLowerCase(); if (['high', 'medium', 'low'].includes(effort)) { requestParameters.reasoning_effort = effort; } else { requestParameters.reasoning_effort = 'low'; } } if (this.promptParameters.responseFormat) { requestParameters.response_format = this.promptParameters.responseFormat; } return requestParameters; } } export default OpenAIReasoningVisionPlugin;