forked from pollinations/pollinations
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathgenerateTextPortkey.ts
More file actions
69 lines (61 loc) · 2.33 KB
/
generateTextPortkey.ts
File metadata and controls
69 lines (61 loc) · 2.33 KB
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
import debug from "debug";
import { findModelByName } from "./availableModels.js";
import { genericOpenAIClient } from "./genericOpenAIClient.js";
import { generateHeaders } from "./transforms/headerGenerator.js";
import { createImageUrlToBase64Transform } from "./transforms/imageUrlToBase64Transform.js";
import { sanitizeMessages } from "./transforms/messageSanitizer.js";
import { processParameters } from "./transforms/parameterProcessor.js";
import type {
ChatCompletion,
ChatMessage,
TransformOptions,
TransformResult,
} from "./types.js";
import { resolveModelConfig } from "./utils/modelResolver.js";
export const log = debug("pollinations:portkey");
const clientConfig = {
endpoint: () =>
`${process.env.PORTKEY_GATEWAY_URL || "https://portkey.pollinations.ai"}/v1/chat/completions`,
authHeaderName: "Authorization",
authHeaderValue: () => `Bearer ${process.env.PORTKEY_API_KEY}`,
additionalHeaders: {},
defaultOptions: {
model: "openai-fast",
jsonMode: false,
},
};
export async function generateTextPortkey(
messages: ChatMessage[],
options: TransformOptions = {},
): Promise<ChatCompletion> {
let state: TransformResult = { messages, options: { ...options } };
if (state.options.model) {
const modelDef = findModelByName(state.options.model);
if (modelDef?.transform) {
const result = await modelDef.transform(messages, state.options);
state = {
messages: result.messages,
options: { ...state.options, ...result.options },
};
}
}
if (state.options.model) {
state = await resolveModelConfig(state.messages, state.options);
state = await generateHeaders(state.messages, state.options);
state = await createImageUrlToBase64Transform()(
state.messages,
state.options,
);
state = await sanitizeMessages(state.messages, state.options);
state = await processParameters(state.messages, state.options);
}
const requestConfig = {
...clientConfig,
additionalHeaders: (state.options.additionalHeaders || {}) as Record<
string,
string
>,
};
delete state.options.additionalHeaders;
return genericOpenAIClient(state.messages, state.options, requestConfig);
}