markdown-ai-rewriter 0.4.0 → 0.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cli.js +135 -0
- package/dist/cli.js.map +1 -1
- package/dist/core/providers/anthropic.d.ts.map +1 -1
- package/dist/core/providers/anthropic.js +3 -2
- package/dist/core/providers/anthropic.js.map +1 -1
- package/dist/core/providers/azure-openai.d.ts.map +1 -1
- package/dist/core/providers/azure-openai.js +4 -3
- package/dist/core/providers/azure-openai.js.map +1 -1
- package/dist/core/providers/base.d.ts +2 -2
- package/dist/core/providers/base.d.ts.map +1 -1
- package/dist/core/providers/base.js +19 -4
- package/dist/core/providers/base.js.map +1 -1
- package/dist/core/providers/minimax.d.ts.map +1 -1
- package/dist/core/providers/minimax.js +4 -3
- package/dist/core/providers/minimax.js.map +1 -1
- package/dist/core/providers/openai-compatible.d.ts.map +1 -1
- package/dist/core/providers/openai-compatible.js +3 -2
- package/dist/core/providers/openai-compatible.js.map +1 -1
- package/dist/core/providers/openai.d.ts.map +1 -1
- package/dist/core/providers/openai.js +4 -3
- package/dist/core/providers/openai.js.map +1 -1
- package/dist/core/rewriter.d.ts +9 -0
- package/dist/core/rewriter.d.ts.map +1 -1
- package/dist/core/rewriter.js +116 -11
- package/dist/core/rewriter.js.map +1 -1
- package/dist/core/text-providers/anthropic.d.ts +12 -0
- package/dist/core/text-providers/anthropic.d.ts.map +1 -0
- package/dist/core/text-providers/anthropic.js +78 -0
- package/dist/core/text-providers/anthropic.js.map +1 -0
- package/dist/core/text-providers/azure-openai.d.ts +15 -0
- package/dist/core/text-providers/azure-openai.d.ts.map +1 -0
- package/dist/core/text-providers/azure-openai.js +87 -0
- package/dist/core/text-providers/azure-openai.js.map +1 -0
- package/dist/core/text-providers/base.d.ts +12 -0
- package/dist/core/text-providers/base.d.ts.map +1 -0
- package/dist/core/text-providers/base.js +66 -0
- package/dist/core/text-providers/base.js.map +1 -0
- package/dist/core/text-providers/deepseek.d.ts +6 -0
- package/dist/core/text-providers/deepseek.d.ts.map +1 -0
- package/dist/core/text-providers/deepseek.js +12 -0
- package/dist/core/text-providers/deepseek.js.map +1 -0
- package/dist/core/text-providers/doubao.d.ts +6 -0
- package/dist/core/text-providers/doubao.d.ts.map +1 -0
- package/dist/core/text-providers/doubao.js +12 -0
- package/dist/core/text-providers/doubao.js.map +1 -0
- package/dist/core/text-providers/gemini.d.ts +6 -0
- package/dist/core/text-providers/gemini.d.ts.map +1 -0
- package/dist/core/text-providers/gemini.js +12 -0
- package/dist/core/text-providers/gemini.js.map +1 -0
- package/dist/core/text-providers/glm.d.ts +6 -0
- package/dist/core/text-providers/glm.d.ts.map +1 -0
- package/dist/core/text-providers/glm.js +12 -0
- package/dist/core/text-providers/glm.js.map +1 -0
- package/dist/core/text-providers/minimax.d.ts +20 -0
- package/dist/core/text-providers/minimax.d.ts.map +1 -0
- package/dist/core/text-providers/minimax.js +88 -0
- package/dist/core/text-providers/minimax.js.map +1 -0
- package/dist/core/text-providers/openai-compatible.d.ts +14 -0
- package/dist/core/text-providers/openai-compatible.d.ts.map +1 -0
- package/dist/core/text-providers/openai-compatible.js +82 -0
- package/dist/core/text-providers/openai-compatible.js.map +1 -0
- package/dist/core/text-providers/openai.d.ts +12 -0
- package/dist/core/text-providers/openai.d.ts.map +1 -0
- package/dist/core/text-providers/openai.js +77 -0
- package/dist/core/text-providers/openai.js.map +1 -0
- package/dist/core/text-providers/openrouter.d.ts +6 -0
- package/dist/core/text-providers/openrouter.d.ts.map +1 -0
- package/dist/core/text-providers/openrouter.js +12 -0
- package/dist/core/text-providers/openrouter.js.map +1 -0
- package/dist/core/text-providers/qwen.d.ts +6 -0
- package/dist/core/text-providers/qwen.d.ts.map +1 -0
- package/dist/core/text-providers/qwen.js +12 -0
- package/dist/core/text-providers/qwen.js.map +1 -0
- package/dist/core/text-providers/wenxin.d.ts +6 -0
- package/dist/core/text-providers/wenxin.d.ts.map +1 -0
- package/dist/core/text-providers/wenxin.js +12 -0
- package/dist/core/text-providers/wenxin.js.map +1 -0
- package/dist/core/video-generator.d.ts +65 -0
- package/dist/core/video-generator.d.ts.map +1 -0
- package/dist/core/video-generator.js +140 -0
- package/dist/core/video-generator.js.map +1 -0
- package/dist/core/video-providers/doubao.d.ts +52 -0
- package/dist/core/video-providers/doubao.d.ts.map +1 -0
- package/dist/core/video-providers/doubao.js +148 -0
- package/dist/core/video-providers/doubao.js.map +1 -0
- package/dist/core/video-providers/index.d.ts +6 -0
- package/dist/core/video-providers/index.d.ts.map +1 -0
- package/dist/core/video-providers/index.js +16 -0
- package/dist/core/video-providers/index.js.map +1 -0
- package/dist/core/video-providers/kling.d.ts +27 -0
- package/dist/core/video-providers/kling.d.ts.map +1 -0
- package/dist/core/video-providers/kling.js +113 -0
- package/dist/core/video-providers/kling.js.map +1 -0
- package/dist/core/video-providers/minimax.d.ts +30 -0
- package/dist/core/video-providers/minimax.d.ts.map +1 -0
- package/dist/core/video-providers/minimax.js +133 -0
- package/dist/core/video-providers/minimax.js.map +1 -0
- package/dist/core/video-providers/runway.d.ts +22 -0
- package/dist/core/video-providers/runway.d.ts.map +1 -0
- package/dist/core/video-providers/runway.js +121 -0
- package/dist/core/video-providers/runway.js.map +1 -0
- package/dist/core/video-providers/types.d.ts +41 -0
- package/dist/core/video-providers/types.d.ts.map +1 -0
- package/dist/core/video-providers/types.js +3 -0
- package/dist/core/video-providers/types.js.map +1 -0
- package/dist/index.d.ts +21 -13
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +29 -14
- package/dist/index.js.map +1 -1
- package/dist/types/index.d.ts +36 -0
- package/dist/types/index.d.ts.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"minimax.d.ts","sourceRoot":"","sources":["../../../src/core/text-providers/minimax.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AACtC,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAI7C,8GAA8G;AAC9G,eAAO,MAAM,wBAAwB,gCAAgC,CAAC;AAEtE,qBAAa,eAAgB,SAAQ,YAAY;IAC/C,IAAI,SAAa;IACjB,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,KAAK,CAAS;IACtB,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,MAAM,CAA6B;IAE3C;;;;OAIG;gBAED,MAAM,EAAE,MAAM,EACd,KAAK,GAAE,MAAuB,EAC9B,OAAO,CAAC,EAAE,MAAM;YAQJ,SAAS;IAWjB,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,MAAM,CAAC;CAyBtE"}
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.MinimaxProvider = exports.DEFAULT_MINIMAX_BASE_URL = void 0;
|
|
37
|
+
const base_1 = require("./base");
|
|
38
|
+
/** MiniMax OpenAI-compatible base URL (see https://platform.minimax.io/docs/api-reference/text-openai-api) */
|
|
39
|
+
exports.DEFAULT_MINIMAX_BASE_URL = 'https://api.minimaxi.com/v1';
|
|
40
|
+
class MinimaxProvider extends base_1.BaseProvider {
|
|
41
|
+
/**
|
|
42
|
+
* @param apiKey MiniMax API key from the console
|
|
43
|
+
* @param model e.g. MiniMax-M2.1, MiniMax-M2.7 (see MiniMax docs)
|
|
44
|
+
* @param baseURL Override API base; default MINIMAX_BASE_URL env or `https://api.minimaxi.com/v1`
|
|
45
|
+
*/
|
|
46
|
+
constructor(apiKey, model = 'MiniMax-M2.1', baseURL) {
|
|
47
|
+
super();
|
|
48
|
+
this.name = 'minimax';
|
|
49
|
+
this.client = null;
|
|
50
|
+
this.apiKey = apiKey;
|
|
51
|
+
this.model = model;
|
|
52
|
+
this.baseURL = baseURL || process.env.MINIMAX_BASE_URL || exports.DEFAULT_MINIMAX_BASE_URL;
|
|
53
|
+
}
|
|
54
|
+
async getClient() {
|
|
55
|
+
if (!this.client) {
|
|
56
|
+
const OpenAI = await Promise.resolve().then(() => __importStar(require('openai'))).then(m => m.default || m);
|
|
57
|
+
this.client = new OpenAI({
|
|
58
|
+
apiKey: this.apiKey,
|
|
59
|
+
baseURL: this.baseURL,
|
|
60
|
+
});
|
|
61
|
+
}
|
|
62
|
+
return this.client;
|
|
63
|
+
}
|
|
64
|
+
async rewrite(text, options) {
|
|
65
|
+
try {
|
|
66
|
+
const client = await this.getClient();
|
|
67
|
+
const originalLength = text.length;
|
|
68
|
+
const response = await client.chat.completions.create({
|
|
69
|
+
model: this.model,
|
|
70
|
+
messages: [
|
|
71
|
+
{ role: 'system', content: this.getSystemPrompt(options, originalLength) },
|
|
72
|
+
{ role: 'user', content: this.getUserPrompt(text, options.preserveLength) },
|
|
73
|
+
],
|
|
74
|
+
temperature: options.temperature ?? 0.7,
|
|
75
|
+
max_tokens: options.maxTokens ?? 2000,
|
|
76
|
+
});
|
|
77
|
+
return this.cleanupThinkingContent(response.choices[0]?.message?.content?.trim() || text);
|
|
78
|
+
}
|
|
79
|
+
catch (error) {
|
|
80
|
+
if (error.code === 'MODULE_NOT_FOUND') {
|
|
81
|
+
throw new Error('OpenAI SDK not installed. MiniMax uses the OpenAI-compatible API. Run: npm install openai');
|
|
82
|
+
}
|
|
83
|
+
throw new Error(`MiniMax API error: ${error.message}`);
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
exports.MinimaxProvider = MinimaxProvider;
|
|
88
|
+
//# sourceMappingURL=minimax.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"minimax.js","sourceRoot":"","sources":["../../../src/core/text-providers/minimax.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,iCAAsC;AAKtC,8GAA8G;AACjG,QAAA,wBAAwB,GAAG,6BAA6B,CAAC;AAEtE,MAAa,eAAgB,SAAQ,mBAAY;IAO/C;;;;OAIG;IACH,YACE,MAAc,EACd,QAAgB,cAAc,EAC9B,OAAgB;QAEhB,KAAK,EAAE,CAAC;QAhBV,SAAI,GAAG,SAAS,CAAC;QAIT,WAAM,GAAwB,IAAI,CAAC;QAazC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC,OAAO,GAAG,OAAO,IAAI,OAAO,CAAC,GAAG,CAAC,gBAAgB,IAAI,gCAAwB,CAAC;IACrF,CAAC;IAEO,KAAK,CAAC,SAAS;QACrB,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;YACjB,MAAM,MAAM,GAAG,MAAM,kDAAO,QAAQ,IAAE,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC,CAAC;YAChE,IAAI,CAAC,MAAM,GAAG,IAAI,MAAM,CAAC;gBACvB,MAAM,EAAE,IAAI,CAAC,MAAM;gBACnB,OAAO,EAAE,IAAI,CAAC,OAAO;aACtB,CAAiB,CAAC;QACrB,CAAC;QACD,OAAO,IAAI,CAAC,MAAM,CAAC;IACrB,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,IAAY,EAAE,OAAuB;QACjD,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,SAAS,EAAE,CAAC;YACtC,MAAM,cAAc,GAAG,IAAI,CAAC,MAAM,CAAC;YAEnC,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC;gBACpD,KAAK,EAAE,IAAI,CAAC,KAAK;gBACjB,QAAQ,EAAE;oBACR,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,CAAC,eAAe,CAAC,OAAO,EAAE,cAAc,CAAC,EAAE;oBAC1E,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,OAAO,CAAC,cAAc,CAAC,EAAE;iBAC5E;gBACD,WAAW,EAAE,OAAO,CAAC,WAAW,IAAI,GAAG;gBACvC,UAAU,EAAE,OAAO,CAAC,SAAS,IAAI,IAAI;aACtC,CAAC,CAAC;YAEH,OAAO,IAAI,CAAC,sBAAsB,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,IAAI,CAAC,CAAC;QAC5F,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACpB,IAAI,KAAK,CAAC,IAAI,KAAK,kBAAkB,EAAE,CAAC;gBACtC,MAAM,IAAI,KAAK,CACb,2FAA2F,CAC5F,CAAC;YACJ,CAAC;YACD,MAAM,IAAI,KAAK,CAAC,sBAAsB,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;QACzD,CAAC;IACH,CAAC;CACF;AA3DD,0CA2DC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { BaseProvider } from './base';
|
|
2
|
+
import { RewriteOptions } from '../../types';
|
|
3
|
+
export declare class OpenAICompatibleProvider extends BaseProvider {
|
|
4
|
+
name: string;
|
|
5
|
+
private apiKey;
|
|
6
|
+
private model;
|
|
7
|
+
private baseURL;
|
|
8
|
+
private sdkInstallHint;
|
|
9
|
+
private client;
|
|
10
|
+
constructor(providerName: string, apiKey: string, model: string, baseURL: string, sdkInstallHint?: string);
|
|
11
|
+
private getClient;
|
|
12
|
+
rewrite(text: string, options: RewriteOptions): Promise<string>;
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=openai-compatible.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"openai-compatible.d.ts","sourceRoot":"","sources":["../../../src/core/text-providers/openai-compatible.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AACtC,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAI7C,qBAAa,wBAAyB,SAAQ,YAAY;IACxD,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,KAAK,CAAS;IACtB,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,cAAc,CAAS;IAC/B,OAAO,CAAC,MAAM,CAA6B;gBAGzC,YAAY,EAAE,MAAM,EACpB,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,MAAM,EACf,cAAc,GAAE,MAAgC;YAUpC,SAAS;IAWjB,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,MAAM,CAAC;CAuBtE"}
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.OpenAICompatibleProvider = void 0;
|
|
37
|
+
const base_1 = require("./base");
|
|
38
|
+
class OpenAICompatibleProvider extends base_1.BaseProvider {
|
|
39
|
+
constructor(providerName, apiKey, model, baseURL, sdkInstallHint = 'OpenAI-compatible API') {
|
|
40
|
+
super();
|
|
41
|
+
this.client = null;
|
|
42
|
+
this.name = providerName;
|
|
43
|
+
this.apiKey = apiKey;
|
|
44
|
+
this.model = model;
|
|
45
|
+
this.baseURL = baseURL;
|
|
46
|
+
this.sdkInstallHint = sdkInstallHint;
|
|
47
|
+
}
|
|
48
|
+
async getClient() {
|
|
49
|
+
if (!this.client) {
|
|
50
|
+
const OpenAI = await Promise.resolve().then(() => __importStar(require('openai'))).then(m => m.default || m);
|
|
51
|
+
this.client = new OpenAI({
|
|
52
|
+
apiKey: this.apiKey,
|
|
53
|
+
baseURL: this.baseURL,
|
|
54
|
+
});
|
|
55
|
+
}
|
|
56
|
+
return this.client;
|
|
57
|
+
}
|
|
58
|
+
async rewrite(text, options) {
|
|
59
|
+
try {
|
|
60
|
+
const client = await this.getClient();
|
|
61
|
+
const originalLength = text.length;
|
|
62
|
+
const response = await client.chat.completions.create({
|
|
63
|
+
model: this.model,
|
|
64
|
+
messages: [
|
|
65
|
+
{ role: 'system', content: this.getSystemPrompt(options, originalLength) },
|
|
66
|
+
{ role: 'user', content: this.getUserPrompt(text, options.preserveLength) },
|
|
67
|
+
],
|
|
68
|
+
temperature: options.temperature ?? 0.7,
|
|
69
|
+
max_tokens: options.maxTokens ?? 2000,
|
|
70
|
+
});
|
|
71
|
+
return this.cleanupThinkingContent(response.choices[0]?.message?.content?.trim() || text);
|
|
72
|
+
}
|
|
73
|
+
catch (error) {
|
|
74
|
+
if (error.code === 'MODULE_NOT_FOUND') {
|
|
75
|
+
throw new Error(`OpenAI SDK not installed. ${this.sdkInstallHint}. Run: npm install openai`);
|
|
76
|
+
}
|
|
77
|
+
throw new Error(`${this.name} API error: ${error.message}`);
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
exports.OpenAICompatibleProvider = OpenAICompatibleProvider;
|
|
82
|
+
//# sourceMappingURL=openai-compatible.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"openai-compatible.js","sourceRoot":"","sources":["../../../src/core/text-providers/openai-compatible.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,iCAAsC;AAKtC,MAAa,wBAAyB,SAAQ,mBAAY;IAQxD,YACE,YAAoB,EACpB,MAAc,EACd,KAAa,EACb,OAAe,EACf,iBAAyB,uBAAuB;QAEhD,KAAK,EAAE,CAAC;QATF,WAAM,GAAwB,IAAI,CAAC;QAUzC,IAAI,CAAC,IAAI,GAAG,YAAY,CAAC;QACzB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,cAAc,GAAG,cAAc,CAAC;IACvC,CAAC;IAEO,KAAK,CAAC,SAAS;QACrB,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;YACjB,MAAM,MAAM,GAAG,MAAM,kDAAO,QAAQ,IAAE,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC,CAAC;YAChE,IAAI,CAAC,MAAM,GAAG,IAAI,MAAM,CAAC;gBACvB,MAAM,EAAE,IAAI,CAAC,MAAM;gBACnB,OAAO,EAAE,IAAI,CAAC,OAAO;aACtB,CAAiB,CAAC;QACrB,CAAC;QACD,OAAO,IAAI,CAAC,MAAM,CAAC;IACrB,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,IAAY,EAAE,OAAuB;QACjD,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,SAAS,EAAE,CAAC;YACtC,MAAM,cAAc,GAAG,IAAI,CAAC,MAAM,CAAC;YAEnC,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC;gBACpD,KAAK,EAAE,IAAI,CAAC,KAAK;gBACjB,QAAQ,EAAE;oBACR,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,CAAC,eAAe,CAAC,OAAO,EAAE,cAAc,CAAC,EAAE;oBAC1E,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,OAAO,CAAC,cAAc,CAAC,EAAE;iBAC5E;gBACD,WAAW,EAAE,OAAO,CAAC,WAAW,IAAI,GAAG;gBACvC,UAAU,EAAE,OAAO,CAAC,SAAS,IAAI,IAAI;aACtC,CAAC,CAAC;YAEH,OAAO,IAAI,CAAC,sBAAsB,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,IAAI,CAAC,CAAC;QAC5F,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACpB,IAAI,KAAK,CAAC,IAAI,KAAK,kBAAkB,EAAE,CAAC;gBACtC,MAAM,IAAI,KAAK,CAAC,6BAA6B,IAAI,CAAC,cAAc,2BAA2B,CAAC,CAAC;YAC/F,CAAC;YACD,MAAM,IAAI,KAAK,CAAC,GAAG,IAAI,CAAC,IAAI,eAAe,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;QAC9D,CAAC;IACH,CAAC;CACF;AAzDD,4DAyDC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { BaseProvider } from './base';
|
|
2
|
+
import { RewriteOptions } from '../../types';
|
|
3
|
+
export declare class OpenAIProvider extends BaseProvider {
|
|
4
|
+
name: string;
|
|
5
|
+
private apiKey;
|
|
6
|
+
private model;
|
|
7
|
+
private client;
|
|
8
|
+
constructor(apiKey: string, model?: string);
|
|
9
|
+
private getClient;
|
|
10
|
+
rewrite(text: string, options: RewriteOptions): Promise<string>;
|
|
11
|
+
}
|
|
12
|
+
//# sourceMappingURL=openai.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"openai.d.ts","sourceRoot":"","sources":["../../../src/core/text-providers/openai.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AACtC,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAI7C,qBAAa,cAAe,SAAQ,YAAY;IAC9C,IAAI,SAAY;IAChB,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,KAAK,CAAS;IACtB,OAAO,CAAC,MAAM,CAA6B;gBAE/B,MAAM,EAAE,MAAM,EAAE,KAAK,GAAE,MAAsB;YAM3C,SAAS;IAQjB,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,MAAM,CAAC;CAuBtE"}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.OpenAIProvider = void 0;
|
|
37
|
+
const base_1 = require("./base");
|
|
38
|
+
class OpenAIProvider extends base_1.BaseProvider {
|
|
39
|
+
constructor(apiKey, model = 'gpt-4o-mini') {
|
|
40
|
+
super();
|
|
41
|
+
this.name = 'openai';
|
|
42
|
+
this.client = null;
|
|
43
|
+
this.apiKey = apiKey;
|
|
44
|
+
this.model = model;
|
|
45
|
+
}
|
|
46
|
+
async getClient() {
|
|
47
|
+
if (!this.client) {
|
|
48
|
+
const OpenAI = await Promise.resolve().then(() => __importStar(require('openai'))).then(m => m.default || m);
|
|
49
|
+
this.client = new OpenAI({ apiKey: this.apiKey });
|
|
50
|
+
}
|
|
51
|
+
return this.client;
|
|
52
|
+
}
|
|
53
|
+
async rewrite(text, options) {
|
|
54
|
+
try {
|
|
55
|
+
const client = await this.getClient();
|
|
56
|
+
const originalLength = text.length;
|
|
57
|
+
const response = await client.chat.completions.create({
|
|
58
|
+
model: this.model,
|
|
59
|
+
messages: [
|
|
60
|
+
{ role: 'system', content: this.getSystemPrompt(options, originalLength) },
|
|
61
|
+
{ role: 'user', content: this.getUserPrompt(text, options.preserveLength) },
|
|
62
|
+
],
|
|
63
|
+
temperature: options.temperature ?? 0.7,
|
|
64
|
+
max_tokens: options.maxTokens ?? 2000,
|
|
65
|
+
});
|
|
66
|
+
return this.cleanupThinkingContent(response.choices[0]?.message?.content?.trim() || text);
|
|
67
|
+
}
|
|
68
|
+
catch (error) {
|
|
69
|
+
if (error.code === 'MODULE_NOT_FOUND') {
|
|
70
|
+
throw new Error('OpenAI SDK not installed. Run: npm install openai');
|
|
71
|
+
}
|
|
72
|
+
throw new Error(`OpenAI API error: ${error.message}`);
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
exports.OpenAIProvider = OpenAIProvider;
|
|
77
|
+
//# sourceMappingURL=openai.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"openai.js","sourceRoot":"","sources":["../../../src/core/text-providers/openai.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,iCAAsC;AAKtC,MAAa,cAAe,SAAQ,mBAAY;IAM9C,YAAY,MAAc,EAAE,QAAgB,aAAa;QACvD,KAAK,EAAE,CAAC;QANV,SAAI,GAAG,QAAQ,CAAC;QAGR,WAAM,GAAwB,IAAI,CAAC;QAIzC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;IACrB,CAAC;IAEO,KAAK,CAAC,SAAS;QACrB,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;YACjB,MAAM,MAAM,GAAG,MAAM,kDAAO,QAAQ,IAAE,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC,CAAC;YAChE,IAAI,CAAC,MAAM,GAAG,IAAI,MAAM,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,CAAiB,CAAC;QACpE,CAAC;QACD,OAAO,IAAI,CAAC,MAAM,CAAC;IACrB,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,IAAY,EAAE,OAAuB;QACjD,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,SAAS,EAAE,CAAC;YACtC,MAAM,cAAc,GAAG,IAAI,CAAC,MAAM,CAAC;YAEnC,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC;gBACpD,KAAK,EAAE,IAAI,CAAC,KAAK;gBACjB,QAAQ,EAAE;oBACR,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,CAAC,eAAe,CAAC,OAAO,EAAE,cAAc,CAAC,EAAE;oBAC1E,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,OAAO,CAAC,cAAc,CAAC,EAAE;iBAC5E;gBACD,WAAW,EAAE,OAAO,CAAC,WAAW,IAAI,GAAG;gBACvC,UAAU,EAAE,OAAO,CAAC,SAAS,IAAI,IAAI;aACtC,CAAC,CAAC;YAEH,OAAO,IAAI,CAAC,sBAAsB,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,IAAI,CAAC,CAAC;QAC5F,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACpB,IAAI,KAAK,CAAC,IAAI,KAAK,kBAAkB,EAAE,CAAC;gBACtC,MAAM,IAAI,KAAK,CAAC,mDAAmD,CAAC,CAAC;YACvE,CAAC;YACD,MAAM,IAAI,KAAK,CAAC,qBAAqB,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;QACxD,CAAC;IACH,CAAC;CACF;AA3CD,wCA2CC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { OpenAICompatibleProvider } from './openai-compatible';
|
|
2
|
+
export declare const DEFAULT_OPENROUTER_BASE_URL = "https://openrouter.ai/api/v1";
|
|
3
|
+
export declare class OpenRouterProvider extends OpenAICompatibleProvider {
|
|
4
|
+
constructor(apiKey: string, model?: string, baseURL?: string);
|
|
5
|
+
}
|
|
6
|
+
//# sourceMappingURL=openrouter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"openrouter.d.ts","sourceRoot":"","sources":["../../../src/core/text-providers/openrouter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,wBAAwB,EAAE,MAAM,qBAAqB,CAAC;AAE/D,eAAO,MAAM,2BAA2B,iCAAiC,CAAC;AAE1E,qBAAa,kBAAmB,SAAQ,wBAAwB;gBAClD,MAAM,EAAE,MAAM,EAAE,KAAK,GAAE,MAA6B,EAAE,OAAO,CAAC,EAAE,MAAM;CASnF"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.OpenRouterProvider = exports.DEFAULT_OPENROUTER_BASE_URL = void 0;
|
|
4
|
+
const openai_compatible_1 = require("./openai-compatible");
|
|
5
|
+
exports.DEFAULT_OPENROUTER_BASE_URL = 'https://openrouter.ai/api/v1';
|
|
6
|
+
class OpenRouterProvider extends openai_compatible_1.OpenAICompatibleProvider {
|
|
7
|
+
constructor(apiKey, model = 'openai/gpt-4o-mini', baseURL) {
|
|
8
|
+
super('openrouter', apiKey, model, baseURL || process.env.OPENROUTER_BASE_URL || exports.DEFAULT_OPENROUTER_BASE_URL, 'OpenRouter uses an OpenAI-compatible endpoint');
|
|
9
|
+
}
|
|
10
|
+
}
|
|
11
|
+
exports.OpenRouterProvider = OpenRouterProvider;
|
|
12
|
+
//# sourceMappingURL=openrouter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"openrouter.js","sourceRoot":"","sources":["../../../src/core/text-providers/openrouter.ts"],"names":[],"mappings":";;;AAAA,2DAA+D;AAElD,QAAA,2BAA2B,GAAG,8BAA8B,CAAC;AAE1E,MAAa,kBAAmB,SAAQ,4CAAwB;IAC9D,YAAY,MAAc,EAAE,QAAgB,oBAAoB,EAAE,OAAgB;QAChF,KAAK,CACH,YAAY,EACZ,MAAM,EACN,KAAK,EACL,OAAO,IAAI,OAAO,CAAC,GAAG,CAAC,mBAAmB,IAAI,mCAA2B,EACzE,+CAA+C,CAChD,CAAC;IACJ,CAAC;CACF;AAVD,gDAUC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { OpenAICompatibleProvider } from './openai-compatible';
|
|
2
|
+
export declare const DEFAULT_QWEN_BASE_URL = "https://dashscope.aliyuncs.com/compatible-mode/v1";
|
|
3
|
+
export declare class QwenProvider extends OpenAICompatibleProvider {
|
|
4
|
+
constructor(apiKey: string, model?: string, baseURL?: string);
|
|
5
|
+
}
|
|
6
|
+
//# sourceMappingURL=qwen.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"qwen.d.ts","sourceRoot":"","sources":["../../../src/core/text-providers/qwen.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,wBAAwB,EAAE,MAAM,qBAAqB,CAAC;AAE/D,eAAO,MAAM,qBAAqB,sDAAsD,CAAC;AAEzF,qBAAa,YAAa,SAAQ,wBAAwB;gBAC5C,MAAM,EAAE,MAAM,EAAE,KAAK,GAAE,MAAoB,EAAE,OAAO,CAAC,EAAE,MAAM;CAS1E"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.QwenProvider = exports.DEFAULT_QWEN_BASE_URL = void 0;
|
|
4
|
+
const openai_compatible_1 = require("./openai-compatible");
|
|
5
|
+
exports.DEFAULT_QWEN_BASE_URL = 'https://dashscope.aliyuncs.com/compatible-mode/v1';
|
|
6
|
+
class QwenProvider extends openai_compatible_1.OpenAICompatibleProvider {
|
|
7
|
+
constructor(apiKey, model = 'qwen-plus', baseURL) {
|
|
8
|
+
super('qwen', apiKey, model, baseURL || process.env.QWEN_BASE_URL || exports.DEFAULT_QWEN_BASE_URL, 'Qwen (DashScope) uses an OpenAI-compatible endpoint');
|
|
9
|
+
}
|
|
10
|
+
}
|
|
11
|
+
exports.QwenProvider = QwenProvider;
|
|
12
|
+
//# sourceMappingURL=qwen.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"qwen.js","sourceRoot":"","sources":["../../../src/core/text-providers/qwen.ts"],"names":[],"mappings":";;;AAAA,2DAA+D;AAElD,QAAA,qBAAqB,GAAG,mDAAmD,CAAC;AAEzF,MAAa,YAAa,SAAQ,4CAAwB;IACxD,YAAY,MAAc,EAAE,QAAgB,WAAW,EAAE,OAAgB;QACvE,KAAK,CACH,MAAM,EACN,MAAM,EACN,KAAK,EACL,OAAO,IAAI,OAAO,CAAC,GAAG,CAAC,aAAa,IAAI,6BAAqB,EAC7D,qDAAqD,CACtD,CAAC;IACJ,CAAC;CACF;AAVD,oCAUC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { OpenAICompatibleProvider } from './openai-compatible';
|
|
2
|
+
export declare const DEFAULT_WENXIN_BASE_URL = "https://qianfan.baidubce.com/v2";
|
|
3
|
+
export declare class WenxinProvider extends OpenAICompatibleProvider {
|
|
4
|
+
constructor(apiKey: string, model?: string, baseURL?: string);
|
|
5
|
+
}
|
|
6
|
+
//# sourceMappingURL=wenxin.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wenxin.d.ts","sourceRoot":"","sources":["../../../src/core/text-providers/wenxin.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,wBAAwB,EAAE,MAAM,qBAAqB,CAAC;AAE/D,eAAO,MAAM,uBAAuB,oCAAoC,CAAC;AAEzE,qBAAa,cAAe,SAAQ,wBAAwB;gBAC9C,MAAM,EAAE,MAAM,EAAE,KAAK,GAAE,MAA8B,EAAE,OAAO,CAAC,EAAE,MAAM;CASpF"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.WenxinProvider = exports.DEFAULT_WENXIN_BASE_URL = void 0;
|
|
4
|
+
const openai_compatible_1 = require("./openai-compatible");
|
|
5
|
+
exports.DEFAULT_WENXIN_BASE_URL = 'https://qianfan.baidubce.com/v2';
|
|
6
|
+
class WenxinProvider extends openai_compatible_1.OpenAICompatibleProvider {
|
|
7
|
+
constructor(apiKey, model = 'ernie-4.0-8k-latest', baseURL) {
|
|
8
|
+
super('wenxin', apiKey, model, baseURL || process.env.WENXIN_BASE_URL || exports.DEFAULT_WENXIN_BASE_URL, 'Wenxin (Qianfan) uses an OpenAI-compatible endpoint');
|
|
9
|
+
}
|
|
10
|
+
}
|
|
11
|
+
exports.WenxinProvider = WenxinProvider;
|
|
12
|
+
//# sourceMappingURL=wenxin.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wenxin.js","sourceRoot":"","sources":["../../../src/core/text-providers/wenxin.ts"],"names":[],"mappings":";;;AAAA,2DAA+D;AAElD,QAAA,uBAAuB,GAAG,iCAAiC,CAAC;AAEzE,MAAa,cAAe,SAAQ,4CAAwB;IAC1D,YAAY,MAAc,EAAE,QAAgB,qBAAqB,EAAE,OAAgB;QACjF,KAAK,CACH,QAAQ,EACR,MAAM,EACN,KAAK,EACL,OAAO,IAAI,OAAO,CAAC,GAAG,CAAC,eAAe,IAAI,+BAAuB,EACjE,qDAAqD,CACtD,CAAC;IACJ,CAAC;CACF;AAVD,wCAUC"}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import { RewriteOptions } from '../types';
|
|
2
|
+
import { VideoGenerationResult } from './video-providers/types';
|
|
3
|
+
export { DEFAULT_MINIMAX_VIDEO_URL } from './video-providers/minimax';
|
|
4
|
+
export { DEFAULT_DOUBAO_VIDEO_URL } from './video-providers/doubao';
|
|
5
|
+
export { DEFAULT_KLING_VIDEO_URL } from './video-providers/kling';
|
|
6
|
+
export type { VideoGenerationResult } from './video-providers/types';
|
|
7
|
+
export interface VideoGenerationConfig {
|
|
8
|
+
/** 视频生成 Provider */
|
|
9
|
+
provider: 'minimax' | 'doubao' | 'kling' | 'runway';
|
|
10
|
+
/** API Key */
|
|
11
|
+
apiKey: string;
|
|
12
|
+
/** 视频模型 */
|
|
13
|
+
model?: string;
|
|
14
|
+
/** 视频时长(秒) */
|
|
15
|
+
duration?: number;
|
|
16
|
+
/** 视频分辨率 */
|
|
17
|
+
resolution?: string;
|
|
18
|
+
/** 宽高比 */
|
|
19
|
+
aspectRatio?: string;
|
|
20
|
+
/** 是否自动优化提示词,默认 true */
|
|
21
|
+
promptOptimizer?: boolean;
|
|
22
|
+
/** 轮询间隔(毫秒),默认 5000 */
|
|
23
|
+
pollInterval?: number;
|
|
24
|
+
/** 最大轮询次数,默认 120(10分钟) */
|
|
25
|
+
maxPollAttempts?: number;
|
|
26
|
+
/** 是否显示详细日志 */
|
|
27
|
+
verbose?: boolean;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* 视频生成器
|
|
31
|
+
*
|
|
32
|
+
* 支持的 Provider:
|
|
33
|
+
* - minimax: MiniMax Hailuo (默认)
|
|
34
|
+
* - doubao: 火山引擎豆包 Seedance
|
|
35
|
+
* - kling: 快手可灵
|
|
36
|
+
* - runway: Runway Gen-4.5
|
|
37
|
+
*/
|
|
38
|
+
export declare class VideoGenerator {
|
|
39
|
+
private config;
|
|
40
|
+
private provider;
|
|
41
|
+
constructor(config: VideoGenerationConfig);
|
|
42
|
+
/**
|
|
43
|
+
* 创建视频 Provider
|
|
44
|
+
*/
|
|
45
|
+
private createProvider;
|
|
46
|
+
/**
|
|
47
|
+
* 从 Markdown 生成视频
|
|
48
|
+
*/
|
|
49
|
+
generateFromMarkdown(markdown: string, summaryProvider?: {
|
|
50
|
+
rewrite: (text: string, options: RewriteOptions) => Promise<string>;
|
|
51
|
+
}): Promise<VideoGenerationResult>;
|
|
52
|
+
/**
|
|
53
|
+
* 使用 AI 生成视频脚本提示词
|
|
54
|
+
*/
|
|
55
|
+
private generateVideoPrompt;
|
|
56
|
+
/**
|
|
57
|
+
* 简单提取提示词(不使用 AI)
|
|
58
|
+
*/
|
|
59
|
+
private extractSimplePrompt;
|
|
60
|
+
/**
|
|
61
|
+
* 生成视频
|
|
62
|
+
*/
|
|
63
|
+
generateVideo(prompt: string): Promise<VideoGenerationResult>;
|
|
64
|
+
}
|
|
65
|
+
//# sourceMappingURL=video-generator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"video-generator.d.ts","sourceRoot":"","sources":["../../src/core/video-generator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAC1C,OAAO,EAAiB,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAM/E,OAAO,EAAE,yBAAyB,EAAE,MAAM,2BAA2B,CAAC;AACtE,OAAO,EAAE,wBAAwB,EAAE,MAAM,0BAA0B,CAAC;AACpE,OAAO,EAAE,uBAAuB,EAAE,MAAM,yBAAyB,CAAC;AAElE,YAAY,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAErE,MAAM,WAAW,qBAAqB;IACpC,oBAAoB;IACpB,QAAQ,EAAE,SAAS,GAAG,QAAQ,GAAG,OAAO,GAAG,QAAQ,CAAC;IACpD,cAAc;IACd,MAAM,EAAE,MAAM,CAAC;IACf,WAAW;IACX,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,cAAc;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY;IACZ,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU;IACV,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,wBAAwB;IACxB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,uBAAuB;IACvB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,0BAA0B;IAC1B,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,eAAe;IACf,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED;;;;;;;;GAQG;AACH,qBAAa,cAAc;IACzB,OAAO,CAAC,MAAM,CAAwB;IACtC,OAAO,CAAC,QAAQ,CAAgB;gBAEpB,MAAM,EAAE,qBAAqB;IAczC;;OAEG;IACH,OAAO,CAAC,cAAc;IAsBtB;;OAEG;IACG,oBAAoB,CACxB,QAAQ,EAAE,MAAM,EAChB,eAAe,CAAC,EAAE;QAAE,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,cAAc,KAAK,OAAO,CAAC,MAAM,CAAC,CAAA;KAAE,GACxF,OAAO,CAAC,qBAAqB,CAAC;IAyBjC;;OAEG;YACW,mBAAmB;IA2BjC;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAoB3B;;OAEG;IACG,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,qBAAqB,CAAC;CAWpE"}
|
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.VideoGenerator = exports.DEFAULT_KLING_VIDEO_URL = exports.DEFAULT_DOUBAO_VIDEO_URL = exports.DEFAULT_MINIMAX_VIDEO_URL = void 0;
|
|
4
|
+
const minimax_1 = require("./video-providers/minimax");
|
|
5
|
+
const doubao_1 = require("./video-providers/doubao");
|
|
6
|
+
const kling_1 = require("./video-providers/kling");
|
|
7
|
+
const runway_1 = require("./video-providers/runway");
|
|
8
|
+
var minimax_2 = require("./video-providers/minimax");
|
|
9
|
+
Object.defineProperty(exports, "DEFAULT_MINIMAX_VIDEO_URL", { enumerable: true, get: function () { return minimax_2.DEFAULT_MINIMAX_VIDEO_URL; } });
|
|
10
|
+
var doubao_2 = require("./video-providers/doubao");
|
|
11
|
+
Object.defineProperty(exports, "DEFAULT_DOUBAO_VIDEO_URL", { enumerable: true, get: function () { return doubao_2.DEFAULT_DOUBAO_VIDEO_URL; } });
|
|
12
|
+
var kling_2 = require("./video-providers/kling");
|
|
13
|
+
Object.defineProperty(exports, "DEFAULT_KLING_VIDEO_URL", { enumerable: true, get: function () { return kling_2.DEFAULT_KLING_VIDEO_URL; } });
|
|
14
|
+
/**
|
|
15
|
+
* 视频生成器
|
|
16
|
+
*
|
|
17
|
+
* 支持的 Provider:
|
|
18
|
+
* - minimax: MiniMax Hailuo (默认)
|
|
19
|
+
* - doubao: 火山引擎豆包 Seedance
|
|
20
|
+
* - kling: 快手可灵
|
|
21
|
+
* - runway: Runway Gen-4.5
|
|
22
|
+
*/
|
|
23
|
+
class VideoGenerator {
|
|
24
|
+
constructor(config) {
|
|
25
|
+
this.config = {
|
|
26
|
+
duration: 6,
|
|
27
|
+
resolution: '1080P',
|
|
28
|
+
aspectRatio: '16:9',
|
|
29
|
+
promptOptimizer: true,
|
|
30
|
+
pollInterval: 5000,
|
|
31
|
+
maxPollAttempts: 120,
|
|
32
|
+
...config,
|
|
33
|
+
};
|
|
34
|
+
this.provider = this.createProvider();
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* 创建视频 Provider
|
|
38
|
+
*/
|
|
39
|
+
createProvider() {
|
|
40
|
+
const { provider, apiKey, model, pollInterval, maxPollAttempts, verbose } = this.config;
|
|
41
|
+
const options = { pollInterval, maxPollAttempts, verbose };
|
|
42
|
+
switch (provider) {
|
|
43
|
+
case 'minimax':
|
|
44
|
+
return new minimax_1.MiniMaxVideoProvider(apiKey, model || 'MiniMax-Hailuo-2.3', options);
|
|
45
|
+
case 'doubao':
|
|
46
|
+
return new doubao_1.DoubaoVideoProvider(apiKey, model || 'seedance-2.0-lite-t2v-250428', options);
|
|
47
|
+
case 'kling':
|
|
48
|
+
return new kling_1.KlingVideoProvider(apiKey, model || 'kling-v1', options);
|
|
49
|
+
case 'runway':
|
|
50
|
+
return new runway_1.RunwayVideoProvider(apiKey, model || 'gen4.5', { verbose });
|
|
51
|
+
default:
|
|
52
|
+
throw new Error(`不支持的视频 Provider: ${provider}`);
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* 从 Markdown 生成视频
|
|
57
|
+
*/
|
|
58
|
+
async generateFromMarkdown(markdown, summaryProvider) {
|
|
59
|
+
try {
|
|
60
|
+
// 1. 生成视频脚本提示词
|
|
61
|
+
let videoPrompt;
|
|
62
|
+
if (summaryProvider) {
|
|
63
|
+
videoPrompt = await this.generateVideoPrompt(markdown, summaryProvider);
|
|
64
|
+
}
|
|
65
|
+
else {
|
|
66
|
+
videoPrompt = this.extractSimplePrompt(markdown);
|
|
67
|
+
}
|
|
68
|
+
if (this.config.verbose) {
|
|
69
|
+
console.log(`🎬 视频脚本提示词:\n${videoPrompt}\n`);
|
|
70
|
+
}
|
|
71
|
+
// 2. 调用 Provider 生成视频
|
|
72
|
+
return await this.generateVideo(videoPrompt);
|
|
73
|
+
}
|
|
74
|
+
catch (error) {
|
|
75
|
+
return {
|
|
76
|
+
success: false,
|
|
77
|
+
error: error.message,
|
|
78
|
+
};
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* 使用 AI 生成视频脚本提示词
|
|
83
|
+
*/
|
|
84
|
+
async generateVideoPrompt(markdown, provider) {
|
|
85
|
+
const duration = this.config.duration || 6;
|
|
86
|
+
const prompt = `请将以下文章内容转换为一个 ${duration} 秒短视频的脚本提示词。
|
|
87
|
+
|
|
88
|
+
要求:
|
|
89
|
+
1. 提取文章的核心主题和关键信息
|
|
90
|
+
2. 用生动、视觉化的语言描述场景
|
|
91
|
+
3. 适合 AI 视频生成,包含具体的画面描述
|
|
92
|
+
4. 可以添加镜头指令如 [Zoom in]、[Pan left]、[Static shot] 等
|
|
93
|
+
5. 输出长度控制在 200-500 字之间
|
|
94
|
+
6. 只输出视频脚本,不要其他解释
|
|
95
|
+
|
|
96
|
+
文章内容:
|
|
97
|
+
${markdown.slice(0, 3000)}`;
|
|
98
|
+
const result = await provider.rewrite(prompt, {
|
|
99
|
+
style: 'creative',
|
|
100
|
+
temperature: 0.8,
|
|
101
|
+
maxTokens: 1000,
|
|
102
|
+
});
|
|
103
|
+
return result;
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* 简单提取提示词(不使用 AI)
|
|
107
|
+
*/
|
|
108
|
+
extractSimplePrompt(markdown) {
|
|
109
|
+
let text = markdown
|
|
110
|
+
.replace(/^#+\s+/gm, '')
|
|
111
|
+
.replace(/!\[.*?\]\(.*?\)/g, '')
|
|
112
|
+
.replace(/\[([^\]]+)\]\([^)]+\)/g, '$1')
|
|
113
|
+
.replace(/```[\s\S]*?```/g, '')
|
|
114
|
+
.replace(/`[^`]+`/g, '')
|
|
115
|
+
.replace(/[*_~]+/g, '')
|
|
116
|
+
.replace(/>\s+/g, '')
|
|
117
|
+
.replace(/[-*+]\s+/g, '')
|
|
118
|
+
.replace(/\n{2,}/g, '\n')
|
|
119
|
+
.trim();
|
|
120
|
+
if (text.length > 500) {
|
|
121
|
+
text = text.slice(0, 500) + '...';
|
|
122
|
+
}
|
|
123
|
+
return `基于以下内容生成一个视觉化的场景 [Static shot]:\n${text}`;
|
|
124
|
+
}
|
|
125
|
+
/**
|
|
126
|
+
* 生成视频
|
|
127
|
+
*/
|
|
128
|
+
async generateVideo(prompt) {
|
|
129
|
+
const { duration, resolution, aspectRatio, promptOptimizer } = this.config;
|
|
130
|
+
return this.provider.generateVideo({
|
|
131
|
+
prompt,
|
|
132
|
+
duration,
|
|
133
|
+
resolution,
|
|
134
|
+
aspectRatio,
|
|
135
|
+
promptOptimizer,
|
|
136
|
+
});
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
exports.VideoGenerator = VideoGenerator;
|
|
140
|
+
//# sourceMappingURL=video-generator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"video-generator.js","sourceRoot":"","sources":["../../src/core/video-generator.ts"],"names":[],"mappings":"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"}
|