This repository has been archived by the owner on Feb 10, 2024. It is now read-only.
/
OpenAiCompletionResponseUsage.ts
119 lines (108 loc) · 4.13 KB
/
OpenAiCompletionResponseUsage.ts
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
// Copyright (c) 2023. Heusala Group Oy <info@heusalagroup.fi>. All rights reserved.
import { explainRegularObject, isRegularObject } from "../../types/RegularObject";
import { explainNoOtherKeysInDevelopment, hasNoOtherKeysInDevelopment } from "../../types/OtherKeys";
import { explainNumber, isNumber } from "../../types/Number";
import { isString } from "../../types/String";
import { explain, explainProperty } from "../../types/explain";
import { startsWith } from "../../functions/startsWith";
import { parseJson } from "../../Json";
/**
* @typedef {Object} OpenAiCompletionResponseUsage
*
* Property "usage" from the completion response item returned by the OpenAI API.
*/
export interface OpenAiCompletionResponseUsage {
/**
*/
readonly prompt_tokens: number;
/**
*/
readonly completion_tokens: number;
/**
*/
readonly total_tokens: number;
}
/**
* Creates an `OpenAiCompletionResponseUsage` object.
*
* @param {number} prompt_tokens -
* @param {number} completion_tokens -
* @param {number} total_tokens -
* @returns {OpenAiCompletionResponseUsage} The created `OpenAiCompletionResponseUsage` object.
*/
export function createOpenAiCompletionResponseUsage (
prompt_tokens: number,
completion_tokens: number,
total_tokens: number
) : OpenAiCompletionResponseUsage {
return {
prompt_tokens,
completion_tokens,
total_tokens
};
}
/**
* Check if the given value is a valid `OpenAiCompletionResponseUsage` object.
*
* @param {unknown} value - The value to check.
* @returns {value is OpenAiCompletionResponseUsage} `true` if the value is a valid `OpenAiCompletionResponseUsage` object, `false` otherwise.
*/
export function isOpenAiCompletionResponseUsage (value: unknown) : value is OpenAiCompletionResponseUsage {
return (
isRegularObject(value)
&& hasNoOtherKeysInDevelopment(value, [
'prompt_tokens',
'completion_tokens',
'total_tokens'
])
&& isNumber(value?.prompt_tokens)
&& isNumber(value?.completion_tokens)
&& isNumber(value?.total_tokens)
);
}
/**
* Attempts to explain why the given value is not a valid OpenAiCompletionResponseUsage object.
*
* @param {unknown} value - The value to explain.
* @returns {string} A human-readable string explaining why the value is not a valid OpenAiCompletionResponseUsage object.
*/
export function explainOpenAiCompletionResponseUsage (value: any) : string {
return explain(
[
explainRegularObject(value),
explainNoOtherKeysInDevelopment(value, [
'prompt_tokens',
'completion_tokens',
'total_tokens'
])
, explainProperty("prompt_tokens", explainNumber(value?.prompt_tokens))
, explainProperty("completion_tokens", explainNumber(value?.completion_tokens))
, explainProperty("total_tokens", explainNumber(value?.total_tokens))
]
);
}
/**
* Convert the given `OpenAiCompletionResponseUsage` object to a string.
*
* @param {OpenAiCompletionResponseUsage} value - The value to convert.
* @returns {string} A string representation of the `OpenAiCompletionResponseUsage` object.
*/
export function stringifyOpenAiCompletionResponseUsage (value : OpenAiCompletionResponseUsage) : string {
return `OpenAiCompletionResponseUsage(${JSON.stringify(value)})`;
}
/**
* Attempt to parse the given value as an `OpenAiCompletionResponseUsage` object.
*
* @param {unknown} value - The value to parse.
* @returns {OpenAiCompletionResponseUsage|undefined} The parsed `OpenAiCompletionResponseUsage` object, or `undefined` if the value is not a valid `OpenAiCompletionResponseUsage` object.
*/
export function parseOpenAiCompletionResponseUsage (value: unknown) : OpenAiCompletionResponseUsage | undefined {
if (isString(value)) {
if (startsWith(value, "OpenAiCompletionResponseUsage(")) {
value = value.substring("OpenAiCompletionResponseUsage(".length, value.length -1 );
}
value = parseJson(value);
}
if (isOpenAiCompletionResponseUsage(value)) return value;
return undefined;
}