kopia lustrzana https://github.com/transitive-bullshit/chatgpt-api
feat: remove logging.ts and uuid
rodzic
311db19f02
commit
d1838c734e
|
@ -65,7 +65,6 @@
|
||||||
"quick-lru": "^6.1.1",
|
"quick-lru": "^6.1.1",
|
||||||
"replicate": "^0.12.3",
|
"replicate": "^0.12.3",
|
||||||
"ts-dedent": "^2.2.0",
|
"ts-dedent": "^2.2.0",
|
||||||
"uuid": "^9.0.0",
|
|
||||||
"zod": "^3.21.4",
|
"zod": "^3.21.4",
|
||||||
"zod-to-json-schema": "^3.21.2",
|
"zod-to-json-schema": "^3.21.2",
|
||||||
"zod-validation-error": "^1.3.1"
|
"zod-validation-error": "^1.3.1"
|
||||||
|
@ -76,7 +75,6 @@
|
||||||
"@types/debug": "^4.1.8",
|
"@types/debug": "^4.1.8",
|
||||||
"@types/node": "^20.3.2",
|
"@types/node": "^20.3.2",
|
||||||
"@types/sinon": "^10.0.15",
|
"@types/sinon": "^10.0.15",
|
||||||
"@types/uuid": "^9.0.2",
|
|
||||||
"@typescript-eslint/eslint-plugin": "^5.60.1",
|
"@typescript-eslint/eslint-plugin": "^5.60.1",
|
||||||
"@typescript-eslint/parser": "^5.60.1",
|
"@typescript-eslint/parser": "^5.60.1",
|
||||||
"ava": "^5.3.1",
|
"ava": "^5.3.1",
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
lockfileVersion: '6.1'
|
lockfileVersion: '6.0'
|
||||||
|
|
||||||
settings:
|
settings:
|
||||||
autoInstallPeers: true
|
autoInstallPeers: true
|
||||||
|
@ -83,9 +83,6 @@ dependencies:
|
||||||
ts-dedent:
|
ts-dedent:
|
||||||
specifier: ^2.2.0
|
specifier: ^2.2.0
|
||||||
version: 2.2.0
|
version: 2.2.0
|
||||||
uuid:
|
|
||||||
specifier: ^9.0.0
|
|
||||||
version: 9.0.0
|
|
||||||
zod:
|
zod:
|
||||||
specifier: ^3.21.4
|
specifier: ^3.21.4
|
||||||
version: 3.21.4
|
version: 3.21.4
|
||||||
|
@ -112,9 +109,6 @@ devDependencies:
|
||||||
'@types/sinon':
|
'@types/sinon':
|
||||||
specifier: ^10.0.15
|
specifier: ^10.0.15
|
||||||
version: 10.0.15
|
version: 10.0.15
|
||||||
'@types/uuid':
|
|
||||||
specifier: ^9.0.2
|
|
||||||
version: 9.0.2
|
|
||||||
'@typescript-eslint/eslint-plugin':
|
'@typescript-eslint/eslint-plugin':
|
||||||
specifier: ^5.60.1
|
specifier: ^5.60.1
|
||||||
version: 5.60.1(@typescript-eslint/parser@5.60.1)(eslint@8.43.0)(typescript@5.1.3)
|
version: 5.60.1(@typescript-eslint/parser@5.60.1)(eslint@8.43.0)(typescript@5.1.3)
|
||||||
|
@ -1058,10 +1052,6 @@ packages:
|
||||||
resolution: {integrity: sha512-9GcLXF0/v3t80caGs5p2rRfkB+a8VBGLJZVih6CNFkx8IZ994wiKKLSRs9nuFwk1HevWs/1mnUmkApGrSGsShA==}
|
resolution: {integrity: sha512-9GcLXF0/v3t80caGs5p2rRfkB+a8VBGLJZVih6CNFkx8IZ994wiKKLSRs9nuFwk1HevWs/1mnUmkApGrSGsShA==}
|
||||||
dev: true
|
dev: true
|
||||||
|
|
||||||
/@types/uuid@9.0.2:
|
|
||||||
resolution: {integrity: sha512-kNnC1GFBLuhImSnV7w4njQkUiJi0ZXUycu1rUaouPqiKlXkh77JKgdRnTAp1x5eBwcIwbtI+3otwzuIDEuDoxQ==}
|
|
||||||
dev: true
|
|
||||||
|
|
||||||
/@typescript-eslint/eslint-plugin@5.60.1(@typescript-eslint/parser@5.60.1)(eslint@8.43.0)(typescript@5.1.3):
|
/@typescript-eslint/eslint-plugin@5.60.1(@typescript-eslint/parser@5.60.1)(eslint@8.43.0)(typescript@5.1.3):
|
||||||
resolution: {integrity: sha512-KSWsVvsJsLJv3c4e73y/Bzt7OpqMCADUO846bHcuWYSYM19bldbAeDv7dYyV0jwkbMfJ2XdlzwjhXtuD7OY6bw==}
|
resolution: {integrity: sha512-KSWsVvsJsLJv3c4e73y/Bzt7OpqMCADUO846bHcuWYSYM19bldbAeDv7dYyV0jwkbMfJ2XdlzwjhXtuD7OY6bw==}
|
||||||
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
|
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
|
||||||
|
@ -4457,11 +4447,6 @@ packages:
|
||||||
punycode: 2.3.0
|
punycode: 2.3.0
|
||||||
dev: true
|
dev: true
|
||||||
|
|
||||||
/uuid@9.0.0:
|
|
||||||
resolution: {integrity: sha512-MXcSTerfPa4uqyzStbRoTgt5XIe3x5+42+q1sDuy3R5MDk66URdLMOZe5aPX/SQd+kuYAh0FdP/pO28IkQyTeg==}
|
|
||||||
hasBin: true
|
|
||||||
dev: false
|
|
||||||
|
|
||||||
/v8-to-istanbul@9.1.0:
|
/v8-to-istanbul@9.1.0:
|
||||||
resolution: {integrity: sha512-6z3GW9x8G1gd+JIIgQQQxXuiJtCXeAjp6RaPEPLv62mH3iPHPxV6W3robxtCzNErRo6ZwTmzWhsbNvjyEBKzKA==}
|
resolution: {integrity: sha512-6z3GW9x8G1gd+JIIgQQQxXuiJtCXeAjp6RaPEPLv62mH3iPHPxV6W3robxtCzNErRo6ZwTmzWhsbNvjyEBKzKA==}
|
||||||
engines: {node: '>=10.12.0'}
|
engines: {node: '>=10.12.0'}
|
||||||
|
|
142
src/logging.ts
142
src/logging.ts
|
@ -1,142 +0,0 @@
|
||||||
import logger from 'debug'
|
|
||||||
import { v4 as uuidv4 } from 'uuid'
|
|
||||||
|
|
||||||
import { getEnv } from './env'
|
|
||||||
|
|
||||||
/**
|
|
||||||
* List of events that can occur within the library.
|
|
||||||
*/
|
|
||||||
export const Events = {
|
|
||||||
LLM_CALL: 'LLM_CALL',
|
|
||||||
LLM_COMPLETION: 'LLM_COMPLETION'
|
|
||||||
} as const
|
|
||||||
export type EventType = (typeof Events)[keyof typeof Events]
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Severity levels of an event.
|
|
||||||
*/
|
|
||||||
export const Severity = {
|
|
||||||
DEBUG: 0,
|
|
||||||
INFO: 1,
|
|
||||||
WARNING: 2,
|
|
||||||
ERROR: 3,
|
|
||||||
CRITICAL: 4
|
|
||||||
} as const
|
|
||||||
type SeverityType = (typeof Severity)[keyof typeof Severity]
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Define minimum LOG_LEVEL, defaulting to Severity.INFO if not provided or if an invalid value is provided. Any events below that level won't be logged to the console.
|
|
||||||
*/
|
|
||||||
let LOG_LEVEL: SeverityType = Severity.INFO
|
|
||||||
const logLevelEnv = getEnv('DEBUG_LOG_LEVEL')
|
|
||||||
|
|
||||||
if (logLevelEnv && Severity[logLevelEnv.toUpperCase()] !== undefined) {
|
|
||||||
LOG_LEVEL = Severity[logLevelEnv.toUpperCase()]
|
|
||||||
} else if (logLevelEnv) {
|
|
||||||
throw new Error(`Invalid value for LOG_LEVEL: ${logLevelEnv}`)
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Define loggers for each severity level such that logs can be filtered by severity.
|
|
||||||
*/
|
|
||||||
const LOGGERS: Record<SeverityType, ReturnType<typeof logger>> = {
|
|
||||||
[Severity.CRITICAL]: logger('agentic:events:critical'),
|
|
||||||
[Severity.ERROR]: logger('agentic:events:error'),
|
|
||||||
[Severity.WARNING]: logger('agentic:events:warning'),
|
|
||||||
[Severity.INFO]: logger('agentic:events:info'),
|
|
||||||
[Severity.DEBUG]: logger('agentic:events:debug')
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Payload of an event.
|
|
||||||
*/
|
|
||||||
interface EventPayload {
|
|
||||||
[key: string]: unknown
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Data required to create a new Event object.
|
|
||||||
*/
|
|
||||||
interface EventData {
|
|
||||||
parentId?: string
|
|
||||||
id?: string
|
|
||||||
timestamp?: Date
|
|
||||||
payload?: EventPayload
|
|
||||||
severity?: SeverityType
|
|
||||||
version?: number
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Events that occur within the library (should be treated as immutable).
|
|
||||||
*/
|
|
||||||
export class Event {
|
|
||||||
public readonly type: EventType
|
|
||||||
public readonly parentId?: string
|
|
||||||
public readonly id: string
|
|
||||||
public readonly timestamp: Date
|
|
||||||
public readonly payload?: EventPayload
|
|
||||||
public readonly severity: SeverityType
|
|
||||||
public readonly version: number
|
|
||||||
|
|
||||||
constructor(type: EventType, data: EventData = {}) {
|
|
||||||
this.type = type
|
|
||||||
this.parentId = data.parentId
|
|
||||||
this.id = data.id ?? uuidv4()
|
|
||||||
this.timestamp = data.timestamp ?? new Date()
|
|
||||||
this.payload = data.payload ? { ...data.payload } : {} // Only doing a shallow instead of a deep copy for performance reasons..
|
|
||||||
this.severity = data.severity ?? Severity.INFO
|
|
||||||
this.version = data.version ?? 1 // Default to version 1 if not provided...
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Converts a JSON string representation of an event back into an Event object.
|
|
||||||
*/
|
|
||||||
static fromJSON(json: string): Event {
|
|
||||||
const { type, ...data } = JSON.parse(json)
|
|
||||||
|
|
||||||
// Convert the timestamp back into a Date object, since `JSON.parse()` will have turned it into a string:
|
|
||||||
data.timestamp = new Date(data.timestamp)
|
|
||||||
const event = new Event(type, data)
|
|
||||||
return event
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Converts the event to a JSON string representation.
|
|
||||||
*
|
|
||||||
* @returns JSON representation
|
|
||||||
*/
|
|
||||||
toJSON(): string {
|
|
||||||
return JSON.stringify({
|
|
||||||
type: this.type,
|
|
||||||
parentId: this.parentId,
|
|
||||||
id: this.id,
|
|
||||||
timestamp: this.timestamp.toISOString(),
|
|
||||||
payload: this.payload,
|
|
||||||
severity: this.severity,
|
|
||||||
version: this.version
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Converts the event to a human-readable string representation suitable for logging.
|
|
||||||
*
|
|
||||||
* @returns string representation
|
|
||||||
*/
|
|
||||||
toString(): string {
|
|
||||||
return `Event { type: ${this.type}, parentId: ${this.parentId}, id: ${
|
|
||||||
this.id
|
|
||||||
}, timestamp: ${this.timestamp.toISOString()}, payload: ${JSON.stringify(
|
|
||||||
this.payload
|
|
||||||
)}, severity: ${this.severity} }`
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Logs the event to the console.
|
|
||||||
*/
|
|
||||||
log(): void {
|
|
||||||
if (this.severity >= LOG_LEVEL) {
|
|
||||||
const logger = LOGGERS[this.severity]
|
|
||||||
logger(this.toString())
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
Ładowanie…
Reference in New Issue