@llumiverse/core 0.15.0 → 0.16.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.
Files changed (113) hide show
  1. package/README.md +3 -3
  2. package/lib/cjs/CompletionStream.js +31 -10
  3. package/lib/cjs/CompletionStream.js.map +1 -1
  4. package/lib/cjs/Driver.js +19 -21
  5. package/lib/cjs/Driver.js.map +1 -1
  6. package/lib/cjs/async.js +3 -2
  7. package/lib/cjs/async.js.map +1 -1
  8. package/lib/cjs/formatters/index.js +1 -3
  9. package/lib/cjs/formatters/index.js.map +1 -1
  10. package/lib/cjs/formatters/{claude.js → nova.js} +33 -37
  11. package/lib/cjs/formatters/nova.js.map +1 -0
  12. package/lib/cjs/formatters/openai.js +36 -6
  13. package/lib/cjs/formatters/openai.js.map +1 -1
  14. package/lib/cjs/index.js +1 -0
  15. package/lib/cjs/index.js.map +1 -1
  16. package/lib/cjs/options/bedrock.js +343 -0
  17. package/lib/cjs/options/bedrock.js.map +1 -0
  18. package/lib/cjs/options/groq.js +37 -0
  19. package/lib/cjs/options/groq.js.map +1 -0
  20. package/lib/cjs/options/openai.js +123 -0
  21. package/lib/cjs/options/openai.js.map +1 -0
  22. package/lib/cjs/options/vertexai.js +257 -0
  23. package/lib/cjs/options/vertexai.js.map +1 -0
  24. package/lib/cjs/options.js +54 -0
  25. package/lib/cjs/options.js.map +1 -0
  26. package/lib/cjs/types.js +34 -1
  27. package/lib/cjs/types.js.map +1 -1
  28. package/lib/esm/CompletionStream.js +31 -10
  29. package/lib/esm/CompletionStream.js.map +1 -1
  30. package/lib/esm/Driver.js +20 -22
  31. package/lib/esm/Driver.js.map +1 -1
  32. package/lib/esm/async.js +3 -2
  33. package/lib/esm/async.js.map +1 -1
  34. package/lib/esm/formatters/index.js +1 -3
  35. package/lib/esm/formatters/index.js.map +1 -1
  36. package/lib/esm/formatters/{claude.js → nova.js} +32 -36
  37. package/lib/esm/formatters/nova.js.map +1 -0
  38. package/lib/esm/formatters/openai.js +36 -6
  39. package/lib/esm/formatters/openai.js.map +1 -1
  40. package/lib/esm/index.js +1 -0
  41. package/lib/esm/index.js.map +1 -1
  42. package/lib/esm/options/bedrock.js +340 -0
  43. package/lib/esm/options/bedrock.js.map +1 -0
  44. package/lib/esm/options/groq.js +34 -0
  45. package/lib/esm/options/groq.js.map +1 -0
  46. package/lib/esm/options/openai.js +120 -0
  47. package/lib/esm/options/openai.js.map +1 -0
  48. package/lib/esm/options/vertexai.js +253 -0
  49. package/lib/esm/options/vertexai.js.map +1 -0
  50. package/lib/esm/options.js +50 -0
  51. package/lib/esm/options.js.map +1 -0
  52. package/lib/esm/types.js +33 -0
  53. package/lib/esm/types.js.map +1 -1
  54. package/lib/types/CompletionStream.d.ts +1 -1
  55. package/lib/types/CompletionStream.d.ts.map +1 -1
  56. package/lib/types/Driver.d.ts +5 -4
  57. package/lib/types/Driver.d.ts.map +1 -1
  58. package/lib/types/async.d.ts +3 -2
  59. package/lib/types/async.d.ts.map +1 -1
  60. package/lib/types/formatters/generic.d.ts.map +1 -1
  61. package/lib/types/formatters/index.d.ts +1 -3
  62. package/lib/types/formatters/index.d.ts.map +1 -1
  63. package/lib/types/formatters/nova.d.ts +40 -0
  64. package/lib/types/formatters/nova.d.ts.map +1 -0
  65. package/lib/types/formatters/openai.d.ts +13 -1
  66. package/lib/types/formatters/openai.d.ts.map +1 -1
  67. package/lib/types/index.d.ts +1 -0
  68. package/lib/types/index.d.ts.map +1 -1
  69. package/lib/types/options/bedrock.d.ts +32 -0
  70. package/lib/types/options/bedrock.d.ts.map +1 -0
  71. package/lib/types/options/groq.d.ts +12 -0
  72. package/lib/types/options/groq.d.ts.map +1 -0
  73. package/lib/types/options/openai.d.ts +21 -0
  74. package/lib/types/options/openai.d.ts.map +1 -0
  75. package/lib/types/options/vertexai.d.ts +52 -0
  76. package/lib/types/options/vertexai.d.ts.map +1 -0
  77. package/lib/types/options.d.ts +14 -0
  78. package/lib/types/options.d.ts.map +1 -0
  79. package/lib/types/types.d.ts +133 -49
  80. package/lib/types/types.d.ts.map +1 -1
  81. package/package.json +6 -6
  82. package/src/CompletionStream.ts +31 -11
  83. package/src/Driver.ts +29 -25
  84. package/src/async.ts +7 -5
  85. package/src/formatters/index.ts +1 -3
  86. package/src/formatters/nova.ts +141 -0
  87. package/src/formatters/openai.ts +52 -12
  88. package/src/index.ts +2 -1
  89. package/src/options/bedrock.ts +388 -0
  90. package/src/options/groq.ts +47 -0
  91. package/src/options/openai.ts +148 -0
  92. package/src/options/vertexai.ts +312 -0
  93. package/src/options.ts +62 -0
  94. package/src/types.ts +167 -52
  95. package/lib/cjs/formatters/claude.js.map +0 -1
  96. package/lib/cjs/formatters/llama2.js +0 -48
  97. package/lib/cjs/formatters/llama2.js.map +0 -1
  98. package/lib/cjs/formatters/llama3.js +0 -42
  99. package/lib/cjs/formatters/llama3.js.map +0 -1
  100. package/lib/esm/formatters/claude.js.map +0 -1
  101. package/lib/esm/formatters/llama2.js +0 -45
  102. package/lib/esm/formatters/llama2.js.map +0 -1
  103. package/lib/esm/formatters/llama3.js +0 -39
  104. package/lib/esm/formatters/llama3.js.map +0 -1
  105. package/lib/types/formatters/claude.d.ts +0 -25
  106. package/lib/types/formatters/claude.d.ts.map +0 -1
  107. package/lib/types/formatters/llama2.d.ts +0 -4
  108. package/lib/types/formatters/llama2.d.ts.map +0 -1
  109. package/lib/types/formatters/llama3.d.ts +0 -7
  110. package/lib/types/formatters/llama3.d.ts.map +0 -1
  111. package/src/formatters/claude.ts +0 -131
  112. package/src/formatters/llama2.ts +0 -58
  113. package/src/formatters/llama3.ts +0 -55
@@ -1 +0,0 @@
1
- {"version":3,"file":"claude.js","sourceRoot":"","sources":["../../../src/formatters/claude.ts"],"names":[],"mappings":"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"}
@@ -1,48 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.formatLlama2Prompt = formatLlama2Prompt;
4
- const index_js_1 = require("../index.js");
5
- function formatLlama2Prompt(messages, schema) {
6
- const BOS = "<s>";
7
- const EOS = "</s>";
8
- const INST = "[INST]";
9
- const INST_END = "[/INST]";
10
- const SYS = "<<SYS>>\n";
11
- const SYS_END = "\n<</SYS>>";
12
- const promptMessages = [BOS];
13
- const specialTokens = [BOS, EOS, INST, INST_END, SYS, SYS_END];
14
- for (const m of messages) {
15
- if (m.role === index_js_1.PromptRole.user) {
16
- if (specialTokens.includes(m.content)) {
17
- throw new Error(`Cannot use special token ${m.content.trim()} in user message`);
18
- }
19
- promptMessages.push(`${INST} ${m.content.trim()} ${INST_END}`);
20
- }
21
- if (m.role === index_js_1.PromptRole.assistant) {
22
- promptMessages.push(`${m.content.trim()}`);
23
- }
24
- if (m.role === index_js_1.PromptRole.system) {
25
- promptMessages.push(`${SYS}${m.content.trim()}${SYS_END}`);
26
- }
27
- }
28
- for (const m of messages ?? []) {
29
- if (m.role === index_js_1.PromptRole.safety) {
30
- promptMessages.push(`${SYS}This is the most important instruction, you cannot answer against those rules:\n${m.content.trim()}${SYS_END}}`);
31
- }
32
- }
33
- if (schema) {
34
- promptMessages.push(formatSchemaInstruction(schema));
35
- }
36
- promptMessages.push(EOS);
37
- return promptMessages.join("\n\n");
38
- }
39
- function formatSchemaInstruction(schema) {
40
- const schema_instruction = `<<SYS>>You must answer using the following JSONSchema.
41
- Do not write anything other than a JSON object corresponding to the schema.
42
- <schema>
43
- ${JSON.stringify(schema)}
44
- </schema>
45
- <</SYS>>`;
46
- return schema_instruction;
47
- }
48
- //# sourceMappingURL=llama2.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"llama2.js","sourceRoot":"","sources":["../../../src/formatters/llama2.ts"],"names":[],"mappings":";;AAGA,gDA2CC;AA7CD,0CAAwD;AAExD,SAAgB,kBAAkB,CAAC,QAAyB,EAAE,MAAoB;IAC9E,MAAM,GAAG,GAAG,KAAK,CAAC;IAClB,MAAM,GAAG,GAAG,MAAM,CAAC;IACnB,MAAM,IAAI,GAAG,QAAQ,CAAC;IACtB,MAAM,QAAQ,GAAG,SAAS,CAAC;IAC3B,MAAM,GAAG,GAAG,WAAW,CAAC;IACxB,MAAM,OAAO,GAAG,YAAY,CAAC;IAE7B,MAAM,cAAc,GAAG,CAAC,GAAG,CAAC,CAAC;IAC7B,MAAM,aAAa,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,EAAE,OAAO,CAAC,CAAC;IAE/D,KAAK,MAAM,CAAC,IAAI,QAAQ,EAAE,CAAC;QACvB,IAAI,CAAC,CAAC,IAAI,KAAK,qBAAU,CAAC,IAAI,EAAE,CAAC;YAC7B,IAAI,aAAa,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC;gBACpC,MAAM,IAAI,KAAK,CACX,4BAA4B,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,kBAAkB,CACjE,CAAC;YACN,CAAC;YACD,cAAc,CAAC,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,QAAQ,EAAE,CAAC,CAAC;QACnE,CAAC;QACD,IAAI,CAAC,CAAC,IAAI,KAAK,qBAAU,CAAC,SAAS,EAAE,CAAC;YAClC,cAAc,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;QAC/C,CAAC;QACD,IAAI,CAAC,CAAC,IAAI,KAAK,qBAAU,CAAC,MAAM,EAAE,CAAC;YAC/B,cAAc,CAAC,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,OAAO,EAAE,CAAC,CAAC;QAC/D,CAAC;IACL,CAAC;IAED,KAAK,MAAM,CAAC,IAAI,QAAQ,IAAI,EAAE,EAAE,CAAC;QAC7B,IAAI,CAAC,CAAC,IAAI,KAAK,qBAAU,CAAC,MAAM,EAAE,CAAC;YAC/B,cAAc,CAAC,IAAI,CACf,GAAG,GAAG,mFAAmF,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,OAAO,GAAG,CACzH,CAAC;QACN,CAAC;IACL,CAAC;IAED,IAAI,MAAM,EAAE,CAAC;QACT,cAAc,CAAC,IAAI,CAAC,uBAAuB,CAAC,MAAM,CAAC,CAAC,CAAC;IACzD,CAAC;IAED,cAAc,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAEzB,OAAO,cAAc,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AACvC,CAAC;AAED,SAAS,uBAAuB,CAAC,MAAmB;IAChD,MAAM,kBAAkB,GAAG;;;EAG7B,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC;;SAEf,CAAC;IAEN,OAAO,kBAAkB,CAAC;AAC9B,CAAC"}
@@ -1,42 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.formatLlama3Prompt = formatLlama3Prompt;
4
- const index_js_1 = require("../index.js");
5
- /**
6
- * A formatter user by Bedrock to format prompts for claude related models
7
- */
8
- async function formatLlama3Prompt(segments, schema) {
9
- let messages = [];
10
- segments.filter(s => s.role !== index_js_1.PromptRole.safety).forEach(s => {
11
- messages.push(formatLlama3Message(s.role, s.content));
12
- });
13
- if (schema) {
14
- messages.push(formatLlama3Message("user", formatSchemaInstruction(schema)));
15
- }
16
- //add safety
17
- let safetyMsg = `
18
- IMPORTANT: This is the most important instruction, you cannot answer against the following rules:
19
- `;
20
- const safety = segments.filter(s => s.role === index_js_1.PromptRole.safety);
21
- safety.forEach(s => {
22
- messages.push(formatLlama3Message("system", safetyMsg + s.content));
23
- });
24
- let prompt = "<|begin_of_text|>";
25
- prompt += messages.join("\n\n");
26
- return prompt;
27
- }
28
- function formatLlama3Message(role, content) {
29
- let message = `<|start_header_id|>${role}<|end_header_id|>\n`;
30
- message += content;
31
- message += `\n<|eot_id|>`;
32
- return message;
33
- }
34
- function formatSchemaInstruction(schema) {
35
- return `You must answer using the following JSONSchema.
36
- Do not write anything other than a JSON object corresponding to the schema:
37
- <schema>
38
- ${JSON.stringify(schema, undefined, 2)}
39
- </schema>
40
- `;
41
- }
42
- //# sourceMappingURL=llama3.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"llama3.js","sourceRoot":"","sources":["../../../src/formatters/llama3.ts"],"names":[],"mappings":";;AAOA,gDAyBC;AA/BD,0CAAwD;AAExD;;GAEG;AAEI,KAAK,UAAU,kBAAkB,CAAC,QAAyB,EAAE,MAAoB;IAEpF,IAAI,QAAQ,GAAa,EAAE,CAAA;IAC3B,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,qBAAU,CAAC,MAAM,CAAE,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE;QAC5D,QAAQ,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAA;IACzD,CAAC,CAAC,CAAA;IAEF,IAAI,MAAM,EAAE,CAAC;QACT,QAAQ,CAAC,IAAI,CAAC,mBAAmB,CAAC,MAAM,EAAE,uBAAuB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;IAChF,CAAC;IAED,YAAY;IACZ,IAAI,SAAS,GAAG;;KAEf,CAAA;IACD,MAAM,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,qBAAU,CAAC,MAAM,CAAC,CAAC;IAClE,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE;QACf,QAAQ,CAAC,IAAI,CAAC,mBAAmB,CAAC,QAAQ,EAAE,SAAS,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAA;IACvE,CAAC,CAAC,CAAA;IAEF,IAAI,MAAM,GAAG,mBAAmB,CAAA;IAChC,MAAM,IAAI,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;IAE/B,OAAO,MAAM,CAAA;AAEjB,CAAC;AAGD,SAAS,mBAAmB,CAAC,IAAY,EAAE,OAAe;IAEtD,IAAI,OAAO,GAAG,sBAAsB,IAAI,qBAAqB,CAAA;IAC7D,OAAO,IAAI,OAAO,CAAA;IAClB,OAAO,IAAI,cAAc,CAAA;IAEzB,OAAO,OAAO,CAAA;AAElB,CAAC;AAED,SAAS,uBAAuB,CAAC,MAAc;IAE3C,OAAO;;;MAGL,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,SAAS,EAAE,CAAC,CAAC;;KAErC,CAAA;AAEL,CAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"claude.js","sourceRoot":"","sources":["../../../src/formatters/claude.ts"],"names":[],"mappings":"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"}
@@ -1,45 +0,0 @@
1
- import { PromptRole } from "../index.js";
2
- export function formatLlama2Prompt(messages, schema) {
3
- const BOS = "<s>";
4
- const EOS = "</s>";
5
- const INST = "[INST]";
6
- const INST_END = "[/INST]";
7
- const SYS = "<<SYS>>\n";
8
- const SYS_END = "\n<</SYS>>";
9
- const promptMessages = [BOS];
10
- const specialTokens = [BOS, EOS, INST, INST_END, SYS, SYS_END];
11
- for (const m of messages) {
12
- if (m.role === PromptRole.user) {
13
- if (specialTokens.includes(m.content)) {
14
- throw new Error(`Cannot use special token ${m.content.trim()} in user message`);
15
- }
16
- promptMessages.push(`${INST} ${m.content.trim()} ${INST_END}`);
17
- }
18
- if (m.role === PromptRole.assistant) {
19
- promptMessages.push(`${m.content.trim()}`);
20
- }
21
- if (m.role === PromptRole.system) {
22
- promptMessages.push(`${SYS}${m.content.trim()}${SYS_END}`);
23
- }
24
- }
25
- for (const m of messages ?? []) {
26
- if (m.role === PromptRole.safety) {
27
- promptMessages.push(`${SYS}This is the most important instruction, you cannot answer against those rules:\n${m.content.trim()}${SYS_END}}`);
28
- }
29
- }
30
- if (schema) {
31
- promptMessages.push(formatSchemaInstruction(schema));
32
- }
33
- promptMessages.push(EOS);
34
- return promptMessages.join("\n\n");
35
- }
36
- function formatSchemaInstruction(schema) {
37
- const schema_instruction = `<<SYS>>You must answer using the following JSONSchema.
38
- Do not write anything other than a JSON object corresponding to the schema.
39
- <schema>
40
- ${JSON.stringify(schema)}
41
- </schema>
42
- <</SYS>>`;
43
- return schema_instruction;
44
- }
45
- //# sourceMappingURL=llama2.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"llama2.js","sourceRoot":"","sources":["../../../src/formatters/llama2.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAiB,MAAM,aAAa,CAAC;AAExD,MAAM,UAAU,kBAAkB,CAAC,QAAyB,EAAE,MAAoB;IAC9E,MAAM,GAAG,GAAG,KAAK,CAAC;IAClB,MAAM,GAAG,GAAG,MAAM,CAAC;IACnB,MAAM,IAAI,GAAG,QAAQ,CAAC;IACtB,MAAM,QAAQ,GAAG,SAAS,CAAC;IAC3B,MAAM,GAAG,GAAG,WAAW,CAAC;IACxB,MAAM,OAAO,GAAG,YAAY,CAAC;IAE7B,MAAM,cAAc,GAAG,CAAC,GAAG,CAAC,CAAC;IAC7B,MAAM,aAAa,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,EAAE,OAAO,CAAC,CAAC;IAE/D,KAAK,MAAM,CAAC,IAAI,QAAQ,EAAE,CAAC;QACvB,IAAI,CAAC,CAAC,IAAI,KAAK,UAAU,CAAC,IAAI,EAAE,CAAC;YAC7B,IAAI,aAAa,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC;gBACpC,MAAM,IAAI,KAAK,CACX,4BAA4B,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,kBAAkB,CACjE,CAAC;YACN,CAAC;YACD,cAAc,CAAC,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,QAAQ,EAAE,CAAC,CAAC;QACnE,CAAC;QACD,IAAI,CAAC,CAAC,IAAI,KAAK,UAAU,CAAC,SAAS,EAAE,CAAC;YAClC,cAAc,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;QAC/C,CAAC;QACD,IAAI,CAAC,CAAC,IAAI,KAAK,UAAU,CAAC,MAAM,EAAE,CAAC;YAC/B,cAAc,CAAC,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,OAAO,EAAE,CAAC,CAAC;QAC/D,CAAC;IACL,CAAC;IAED,KAAK,MAAM,CAAC,IAAI,QAAQ,IAAI,EAAE,EAAE,CAAC;QAC7B,IAAI,CAAC,CAAC,IAAI,KAAK,UAAU,CAAC,MAAM,EAAE,CAAC;YAC/B,cAAc,CAAC,IAAI,CACf,GAAG,GAAG,mFAAmF,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,OAAO,GAAG,CACzH,CAAC;QACN,CAAC;IACL,CAAC;IAED,IAAI,MAAM,EAAE,CAAC;QACT,cAAc,CAAC,IAAI,CAAC,uBAAuB,CAAC,MAAM,CAAC,CAAC,CAAC;IACzD,CAAC;IAED,cAAc,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAEzB,OAAO,cAAc,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AACvC,CAAC;AAED,SAAS,uBAAuB,CAAC,MAAmB;IAChD,MAAM,kBAAkB,GAAG;;;EAG7B,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC;;SAEf,CAAC;IAEN,OAAO,kBAAkB,CAAC;AAC9B,CAAC"}
@@ -1,39 +0,0 @@
1
- import { PromptRole } from "../index.js";
2
- /**
3
- * A formatter user by Bedrock to format prompts for claude related models
4
- */
5
- export async function formatLlama3Prompt(segments, schema) {
6
- let messages = [];
7
- segments.filter(s => s.role !== PromptRole.safety).forEach(s => {
8
- messages.push(formatLlama3Message(s.role, s.content));
9
- });
10
- if (schema) {
11
- messages.push(formatLlama3Message("user", formatSchemaInstruction(schema)));
12
- }
13
- //add safety
14
- let safetyMsg = `
15
- IMPORTANT: This is the most important instruction, you cannot answer against the following rules:
16
- `;
17
- const safety = segments.filter(s => s.role === PromptRole.safety);
18
- safety.forEach(s => {
19
- messages.push(formatLlama3Message("system", safetyMsg + s.content));
20
- });
21
- let prompt = "<|begin_of_text|>";
22
- prompt += messages.join("\n\n");
23
- return prompt;
24
- }
25
- function formatLlama3Message(role, content) {
26
- let message = `<|start_header_id|>${role}<|end_header_id|>\n`;
27
- message += content;
28
- message += `\n<|eot_id|>`;
29
- return message;
30
- }
31
- function formatSchemaInstruction(schema) {
32
- return `You must answer using the following JSONSchema.
33
- Do not write anything other than a JSON object corresponding to the schema:
34
- <schema>
35
- ${JSON.stringify(schema, undefined, 2)}
36
- </schema>
37
- `;
38
- }
39
- //# sourceMappingURL=llama3.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"llama3.js","sourceRoot":"","sources":["../../../src/formatters/llama3.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAiB,MAAM,aAAa,CAAC;AAExD;;GAEG;AAEH,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAAC,QAAyB,EAAE,MAAoB;IAEpF,IAAI,QAAQ,GAAa,EAAE,CAAA;IAC3B,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,UAAU,CAAC,MAAM,CAAE,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE;QAC5D,QAAQ,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAA;IACzD,CAAC,CAAC,CAAA;IAEF,IAAI,MAAM,EAAE,CAAC;QACT,QAAQ,CAAC,IAAI,CAAC,mBAAmB,CAAC,MAAM,EAAE,uBAAuB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;IAChF,CAAC;IAED,YAAY;IACZ,IAAI,SAAS,GAAG;;KAEf,CAAA;IACD,MAAM,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,UAAU,CAAC,MAAM,CAAC,CAAC;IAClE,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE;QACf,QAAQ,CAAC,IAAI,CAAC,mBAAmB,CAAC,QAAQ,EAAE,SAAS,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAA;IACvE,CAAC,CAAC,CAAA;IAEF,IAAI,MAAM,GAAG,mBAAmB,CAAA;IAChC,MAAM,IAAI,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;IAE/B,OAAO,MAAM,CAAA;AAEjB,CAAC;AAGD,SAAS,mBAAmB,CAAC,IAAY,EAAE,OAAe;IAEtD,IAAI,OAAO,GAAG,sBAAsB,IAAI,qBAAqB,CAAA;IAC7D,OAAO,IAAI,OAAO,CAAA;IAClB,OAAO,IAAI,cAAc,CAAA;IAEzB,OAAO,OAAO,CAAA;AAElB,CAAC;AAED,SAAS,uBAAuB,CAAC,MAAc;IAE3C,OAAO;;;MAGL,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,SAAS,EAAE,CAAC,CAAC;;KAErC,CAAA;AAEL,CAAC"}
@@ -1,25 +0,0 @@
1
- import { JSONSchema4 } from "json-schema";
2
- import { PromptSegment } from "../index.js";
3
- export interface ClaudeMessage {
4
- role: 'user' | 'assistant';
5
- content: ClaudeMessagePart[];
6
- }
7
- interface ClaudeMessagePart {
8
- type: "image" | "text";
9
- source?: {
10
- type: "base64";
11
- media_type: string;
12
- data: string;
13
- };
14
- text?: string;
15
- }
16
- export interface ClaudeMessagesPrompt {
17
- system?: string;
18
- messages: ClaudeMessage[];
19
- }
20
- /**
21
- * A formatter user by Bedrock to format prompts for claude related models
22
- */
23
- export declare function formatClaudePrompt(segments: PromptSegment[], schema?: JSONSchema4): Promise<ClaudeMessagesPrompt>;
24
- export {};
25
- //# sourceMappingURL=claude.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"claude.d.ts","sourceRoot":"","sources":["../../../src/formatters/claude.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAc,aAAa,EAAE,MAAM,aAAa,CAAC;AAIxD,MAAM,WAAW,aAAa;IAC1B,IAAI,EAAE,MAAM,GAAG,WAAW,CAAC;IAC3B,OAAO,EAAE,iBAAiB,EAAE,CAAA;CAC/B;AAED,UAAU,iBAAiB;IACvB,IAAI,EAAE,OAAO,GAAG,MAAM,CAAC;IACvB,MAAM,CAAC,EAAE;QACL,IAAI,EAAE,QAAQ,CAAC;QACf,UAAU,EAAE,MAAM,CAAC;QACnB,IAAI,EAAE,MAAM,CAAC;KAChB,CAAC;IACF,IAAI,CAAC,EAAE,MAAM,CAAA;CAChB;AAED,MAAM,WAAW,oBAAoB;IACjC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,aAAa,EAAE,CAAA;CAC5B;AAED;;GAEG;AAEH,wBAAsB,kBAAkB,CAAC,QAAQ,EAAE,aAAa,EAAE,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,oBAAoB,CAAC,CA2FvH"}
@@ -1,4 +0,0 @@
1
- import { JSONSchema4 } from "json-schema";
2
- import { PromptSegment } from "../index.js";
3
- export declare function formatLlama2Prompt(messages: PromptSegment[], schema?: JSONSchema4): string;
4
- //# sourceMappingURL=llama2.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"llama2.d.ts","sourceRoot":"","sources":["../../../src/formatters/llama2.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAc,aAAa,EAAE,MAAM,aAAa,CAAC;AAExD,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,aAAa,EAAE,EAAE,MAAM,CAAC,EAAE,WAAW,UA2CjF"}
@@ -1,7 +0,0 @@
1
- import { JSONSchema4 } from "json-schema";
2
- import { PromptSegment } from "../index.js";
3
- /**
4
- * A formatter user by Bedrock to format prompts for claude related models
5
- */
6
- export declare function formatLlama3Prompt(segments: PromptSegment[], schema?: JSONSchema4): Promise<string>;
7
- //# sourceMappingURL=llama3.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"llama3.d.ts","sourceRoot":"","sources":["../../../src/formatters/llama3.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAc,aAAa,EAAE,MAAM,aAAa,CAAC;AAExD;;GAEG;AAEH,wBAAsB,kBAAkB,CAAC,QAAQ,EAAE,aAAa,EAAE,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,MAAM,CAAC,CAyBzG"}
@@ -1,131 +0,0 @@
1
- import { JSONSchema4 } from "json-schema";
2
- import { PromptRole, PromptSegment } from "../index.js";
3
- import { readStreamAsBase64 } from "../stream.js";
4
- import { getJSONSafetyNotice } from "./commons.js";
5
-
6
- export interface ClaudeMessage {
7
- role: 'user' | 'assistant',
8
- content: ClaudeMessagePart[]
9
- }
10
-
11
- interface ClaudeMessagePart {
12
- type: "image" | "text",
13
- source?: {
14
- type: "base64",
15
- media_type: string,
16
- data: string,
17
- }, // only set for images
18
- text?: string // only set for text messages
19
- }
20
-
21
- export interface ClaudeMessagesPrompt {
22
- system?: string;
23
- messages: ClaudeMessage[]
24
- }
25
-
26
- /**
27
- * A formatter user by Bedrock to format prompts for claude related models
28
- */
29
-
30
- export async function formatClaudePrompt(segments: PromptSegment[], schema?: JSONSchema4): Promise<ClaudeMessagesPrompt> {
31
- const system: string[] = [];
32
- const safety: string[] = [];
33
- const messages: ClaudeMessage[] = [];
34
-
35
- //TODO type: 'image' -> detect from f.mime_type
36
- for (const segment of segments) {
37
-
38
- const parts: ClaudeMessagePart[] = [];
39
- if (segment.files) for (const f of segment.files) {
40
- const source = await f.getStream();
41
- const data = await readStreamAsBase64(source);
42
- parts.push({
43
- type: 'image',
44
- source: {
45
- type: "base64",
46
- media_type: f.mime_type || 'image/png',
47
- data
48
- }
49
- })
50
- }
51
-
52
- if (segment.content) {
53
- parts.push({
54
- type: "text",
55
- text: segment.content
56
- })
57
- }
58
-
59
- if (segment.role === PromptRole.system) {
60
- system.push(segment.content);
61
- } else if (segment.role === PromptRole.safety) {
62
- safety.push(segment.content);
63
- } else if (messages.length > 0 && messages[messages.length - 1].role === segment.role) {
64
- //concatenate messages of the same role (Claude requires alternative user and assistant roles)
65
- messages[messages.length - 1].content.push(...parts);
66
- } else {
67
- messages.push({
68
- role: segment.role,
69
- content: parts
70
- });
71
- }
72
-
73
-
74
- }
75
-
76
- if (schema) {
77
- safety.push("IMPORTANT: " + getJSONSafetyNotice(schema));
78
- }
79
-
80
- // messages must contains at least 1 item. If the prompt doesn;t contains a user message (but only system messages)
81
- // we need to put the system messages in the messages array
82
-
83
- let systemMessage = system.join('\n').trim();
84
- if (messages.length === 0) {
85
- if (!systemMessage) {
86
- throw new Error('Prompt must contain at least one message');
87
- }
88
- messages.push({ content: [{ type: "text", text: systemMessage }], role: 'user' });
89
- systemMessage = safety.join('\n');
90
- } else if (safety.length > 0) {
91
- systemMessage = systemMessage + '\n\nIMPORTANT: ' + safety.join('\n');
92
- }
93
-
94
-
95
- /*if (schema) {
96
- messages.push({
97
- role: "user",
98
- content: [{
99
- type: "text",
100
- text: getJSONSafetyNotice(schema)
101
- }]
102
- });
103
- }*/
104
-
105
- /*start Claude's message to amke sure it answers properly in JSON
106
- if enabled, this requires to add the { to Claude's response*/
107
- if (schema) {
108
- messages.push({
109
- role: "assistant",
110
- content: [{
111
- type: "text",
112
- text: "{"
113
- }]
114
- });
115
- }
116
- // put system mesages first and safety last
117
- return {
118
- system: systemMessage,
119
- messages
120
- }
121
- }
122
-
123
- // export function claude(messages: PromptSegment[], schema?: JSONSchema4) {
124
- // const prompt = genericColonSeparator(messages, schema, {
125
- // user: "\nHuman",
126
- // assistant: "\nAssistant",
127
- // system: "\nHuman",
128
- // });
129
-
130
- // return "\n\n" + prompt + "\n\nAssistant:";
131
- // }
@@ -1,58 +0,0 @@
1
- import { JSONSchema4 } from "json-schema";
2
- import { PromptRole, PromptSegment } from "../index.js";
3
-
4
- export function formatLlama2Prompt(messages: PromptSegment[], schema?: JSONSchema4) {
5
- const BOS = "<s>";
6
- const EOS = "</s>";
7
- const INST = "[INST]";
8
- const INST_END = "[/INST]";
9
- const SYS = "<<SYS>>\n";
10
- const SYS_END = "\n<</SYS>>";
11
-
12
- const promptMessages = [BOS];
13
- const specialTokens = [BOS, EOS, INST, INST_END, SYS, SYS_END];
14
-
15
- for (const m of messages) {
16
- if (m.role === PromptRole.user) {
17
- if (specialTokens.includes(m.content)) {
18
- throw new Error(
19
- `Cannot use special token ${m.content.trim()} in user message`
20
- );
21
- }
22
- promptMessages.push(`${INST} ${m.content.trim()} ${INST_END}`);
23
- }
24
- if (m.role === PromptRole.assistant) {
25
- promptMessages.push(`${m.content.trim()}`);
26
- }
27
- if (m.role === PromptRole.system) {
28
- promptMessages.push(`${SYS}${m.content.trim()}${SYS_END}`);
29
- }
30
- }
31
-
32
- for (const m of messages ?? []) {
33
- if (m.role === PromptRole.safety) {
34
- promptMessages.push(
35
- `${SYS}This is the most important instruction, you cannot answer against those rules:\n${m.content.trim()}${SYS_END}}`
36
- );
37
- }
38
- }
39
-
40
- if (schema) {
41
- promptMessages.push(formatSchemaInstruction(schema));
42
- }
43
-
44
- promptMessages.push(EOS);
45
-
46
- return promptMessages.join("\n\n");
47
- }
48
-
49
- function formatSchemaInstruction(schema: JSONSchema4) {
50
- const schema_instruction = `<<SYS>>You must answer using the following JSONSchema.
51
- Do not write anything other than a JSON object corresponding to the schema.
52
- <schema>
53
- ${JSON.stringify(schema)}
54
- </schema>
55
- <</SYS>>`;
56
-
57
- return schema_instruction;
58
- }
@@ -1,55 +0,0 @@
1
- import { JSONSchema4 } from "json-schema";
2
- import { PromptRole, PromptSegment } from "../index.js";
3
-
4
- /**
5
- * A formatter user by Bedrock to format prompts for claude related models
6
- */
7
-
8
- export async function formatLlama3Prompt(segments: PromptSegment[], schema?: JSONSchema4): Promise<string> {
9
-
10
- let messages: string[] = []
11
- segments.filter(s => s.role !== PromptRole.safety ).forEach(s => {
12
- messages.push(formatLlama3Message(s.role, s.content))
13
- })
14
-
15
- if (schema) {
16
- messages.push(formatLlama3Message("user", formatSchemaInstruction(schema)));
17
- }
18
-
19
- //add safety
20
- let safetyMsg = `
21
- IMPORTANT: This is the most important instruction, you cannot answer against the following rules:
22
- `
23
- const safety = segments.filter(s => s.role === PromptRole.safety);
24
- safety.forEach(s => {
25
- messages.push(formatLlama3Message("system", safetyMsg + s.content))
26
- })
27
-
28
- let prompt = "<|begin_of_text|>"
29
- prompt += messages.join("\n\n")
30
-
31
- return prompt
32
-
33
- }
34
-
35
-
36
- function formatLlama3Message(role: string, content: string) {
37
-
38
- let message = `<|start_header_id|>${role}<|end_header_id|>\n`
39
- message += content
40
- message += `\n<|eot_id|>`
41
-
42
- return message
43
-
44
- }
45
-
46
- function formatSchemaInstruction(schema: object) {
47
-
48
- return `You must answer using the following JSONSchema.
49
- Do not write anything other than a JSON object corresponding to the schema:
50
- <schema>
51
- ${JSON.stringify(schema, undefined, 2)}
52
- </schema>
53
- `
54
-
55
- }