Spaces:
Sleeping
Sleeping
import { randomUUID } from 'crypto'; | |
// 输入模型 (OpenAI-like) | |
export class ChatMessage { | |
constructor({ | |
id = generateCustomId(), | |
role, | |
content, | |
userId = null, | |
createdAt = null, | |
traceId = null | |
}) { | |
this.id = id; | |
this.role = role; // "system", "user", "assistant" | |
this.content = content; | |
this.userId = userId; | |
this.createdAt = createdAt; | |
this.traceId = traceId; | |
} | |
} | |
export class ChatCompletionRequest { | |
constructor({ | |
messages, | |
model = "notion-proxy", | |
stream = false, | |
notion_model = "anthropic-opus-4" | |
}) { | |
this.messages = messages; | |
this.model = model; | |
this.stream = stream; | |
this.notion_model = notion_model; | |
} | |
} | |
// Notion 模型 | |
export class NotionTranscriptConfigValue { | |
constructor({ | |
type = "markdown-chat", | |
model | |
}) { | |
this.type = type; | |
this.model = model; | |
} | |
} | |
export class NotionTranscriptContextValue { | |
constructor({ | |
userId, | |
spaceId, | |
surface = "home_module", | |
timezone = "America/Los_Angeles", | |
userName, | |
spaceName, | |
spaceViewId, | |
currentDatetime | |
}) { | |
this.userId = userId; | |
this.spaceId = spaceId; | |
this.surface = surface; | |
this.timezone = timezone; | |
this.userName = userName; | |
this.spaceName = spaceName; | |
this.spaceViewId = spaceViewId; | |
this.currentDatetime = currentDatetime; | |
} | |
} | |
export class NotionTranscriptItem { | |
constructor({ | |
id = generateCustomId(), | |
type, | |
value = null, | |
}) { | |
this.id = id; | |
this.type = type; // "markdown-chat", "agent-integration", "context" | |
this.value = value; | |
} | |
} | |
export class NotionTranscriptItemByuser { | |
constructor({ | |
id = generateCustomId(), | |
type, | |
value = null, | |
userId, | |
createdAt | |
}) { | |
this.id = id; | |
this.type = type; // "config", "user" | |
this.value = value; | |
this.userId = userId; | |
this.createdAt = createdAt; | |
} | |
} | |
export class NotionDebugOverrides { | |
constructor({ | |
cachedInferences = {}, | |
annotationInferences = {}, | |
emitInferences = false | |
}) { | |
this.cachedInferences = cachedInferences; | |
this.annotationInferences = annotationInferences; | |
this.emitInferences = emitInferences; | |
} | |
} | |
export function generateCustomId() { | |
// 创建固定部分 | |
const prefix1 = '2036702a'; | |
const prefix2 = '4d19'; | |
const prefix5 = '00aa'; | |
// 生成随机十六进制字符 | |
function randomHex(length) { | |
return Array(length).fill(0).map(() => | |
Math.floor(Math.random() * 16).toString(16) | |
).join(''); | |
} | |
// 组合所有部分 | |
const part3 = '80' + randomHex(2); // 8xxx | |
const part4 = randomHex(4); // xxxx | |
const part5 = prefix5 + randomHex(8); // 00aaxxxxxxxx | |
return `${prefix1}-${prefix2}-${part3}-${part4}-${part5}`; | |
} | |
export class NotionRequestBody { | |
constructor({ | |
traceId = randomUUID(), | |
spaceId, | |
transcript, | |
createThread = false, | |
debugOverrides = new NotionDebugOverrides({}), | |
generateTitle = true, | |
saveAllThreadOperations = true, | |
}) { | |
this.traceId = traceId; | |
this.spaceId = spaceId; | |
this.transcript = transcript; | |
this.createThread = createThread; | |
this.debugOverrides = debugOverrides; | |
this.generateTitle = generateTitle; | |
this.saveAllThreadOperations = saveAllThreadOperations; | |
} | |
} | |
// 输出模型 (OpenAI SSE) | |
export class ChoiceDelta { | |
constructor({ | |
content = null | |
}) { | |
this.content = content; | |
} | |
} | |
export class Choice { | |
constructor({ | |
index = 0, | |
delta, | |
finish_reason = null | |
}) { | |
this.index = index; | |
this.delta = delta; | |
this.finish_reason = finish_reason; | |
} | |
} | |
export class ChatCompletionChunk { | |
constructor({ | |
id = `chatcmpl-${randomUUID()}`, | |
object = "chat.completion.chunk", | |
created = Math.floor(Date.now() / 1000), | |
model = "notion-proxy", | |
choices | |
}) { | |
this.id = id; | |
this.object = object; | |
this.created = created; | |
this.model = model; | |
this.choices = choices; | |
} | |
} | |
// 模型列表端点 /v1/models | |
export class Model { | |
constructor({ | |
id, | |
object = "model", | |
created = Math.floor(Date.now() / 1000), | |
owned_by = "notion" | |
}) { | |
this.id = id; | |
this.object = object; | |
this.created = created; | |
this.owned_by = owned_by; | |
} | |
} | |
export class ModelList { | |
constructor({ | |
object = "list", | |
data | |
}) { | |
this.object = object; | |
this.data = data; | |
} | |
} |