Press n or j to go to the next uncovered block, b, p or k for the previous block.
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 | 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x | import { generateInvalidProviderResponseError } from '@api/utils/ai-provider';
import type {
AIProviderFunctionConfig,
ResponseTransformFunction,
} from '@shared/types/ai-providers/config';
import {
type CompletionChoice,
CompletionFinishReason,
type CompletionRequestBody,
type CompletionResponseBody,
} from '@shared/types/api/routes/completions-api';
import { AIProvider } from '@shared/types/constants';
import { aI21ErrorResponseTransform } from './chat-complete';
export const aI21CompleteConfig: AIProviderFunctionConfig = {
prompt: {
param: 'prompt',
required: true,
},
n: {
param: 'numResults',
default: 1,
},
max_tokens: {
param: 'maxTokens',
default: 16,
},
minTokens: {
param: 'minTokens',
default: 0,
},
temperature: {
param: 'temperature',
default: 0.7,
min: 0,
max: 1,
},
top_p: {
param: 'topP',
default: 1,
},
top_k: {
param: 'topKReturn',
default: 0,
},
stop: {
param: 'stopSequences',
},
presence_penalty: {
param: 'presencePenalty',
transform: (saRequestBody: CompletionRequestBody) => {
return {
scale: saRequestBody.presence_penalty,
};
},
},
frequency_penalty: {
param: 'frequencyPenalty',
transform: (saRequestBody: CompletionRequestBody) => {
return {
scale: saRequestBody.frequency_penalty,
};
},
},
countPenalty: {
param: 'countPenalty',
},
frequencyPenalty: {
param: 'frequencyPenalty',
},
presencePenalty: {
param: 'presencePenalty',
},
};
export const aI21CompleteResponseTransform: ResponseTransformFunction = (
aiProviderResponseBody,
aiProviderResponseStatus,
_responseHeaders,
_strictOpenAiCompliance,
saRequestData,
) => {
if (aiProviderResponseStatus !== 200) {
const errorResponse = aI21ErrorResponseTransform(aiProviderResponseBody);
if (errorResponse) return errorResponse;
}
if ('completions' in aiProviderResponseBody) {
const prompt = aiProviderResponseBody.prompt as { tokens: string[] };
const completions = aiProviderResponseBody.completions as {
data: { tokens: string[]; text: string };
finishReason: { reason: string };
}[];
const inputTokens = prompt.tokens?.length || 0;
const outputTokens = completions
.map((c: { data: { tokens: string[] } }) => c.data?.tokens?.length || 0)
.reduce((partialSum, a) => partialSum + a, 0);
const completionResponseBody: CompletionResponseBody = {
id: aiProviderResponseBody.id as string,
object: 'text_completion',
created: Math.floor(Date.now() / 1000),
model: (saRequestData.requestBody as CompletionRequestBody).model,
choices: completions.map((completion, index) => {
const completionChoice: CompletionChoice = {
text: completion.data.text,
index: index,
logprobs: null,
finish_reason: completion.finishReason?.reason
? (completion.finishReason.reason as CompletionFinishReason)
: CompletionFinishReason.STOP,
};
return completionChoice;
}),
usage: {
prompt_tokens: inputTokens,
completion_tokens: outputTokens,
total_tokens: inputTokens + outputTokens,
},
};
return completionResponseBody;
}
return generateInvalidProviderResponseError(
aiProviderResponseBody,
AIProvider.AI21,
);
};
|