@riotprompt/riotprompt 0.0.1

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 (129) hide show
  1. package/.gitcarve/config.yaml +10 -0
  2. package/.gitcarve/context/content.md +11 -0
  3. package/.markdown-doctest-setup.mjs +23 -0
  4. package/.nvmrc +1 -0
  5. package/LICENSE +190 -0
  6. package/README.md +513 -0
  7. package/dist/builder.cjs +152 -0
  8. package/dist/builder.cjs.map +1 -0
  9. package/dist/builder.d.ts +37 -0
  10. package/dist/builder.js +148 -0
  11. package/dist/builder.js.map +1 -0
  12. package/dist/chat.cjs +26 -0
  13. package/dist/chat.cjs.map +1 -0
  14. package/dist/chat.d.ts +14 -0
  15. package/dist/chat.js +21 -0
  16. package/dist/chat.js.map +1 -0
  17. package/dist/constants.cjs +34 -0
  18. package/dist/constants.cjs.map +1 -0
  19. package/dist/constants.d.ts +13 -0
  20. package/dist/constants.js +23 -0
  21. package/dist/constants.js.map +1 -0
  22. package/dist/formatter.cjs +139 -0
  23. package/dist/formatter.cjs.map +1 -0
  24. package/dist/formatter.d.ts +88 -0
  25. package/dist/formatter.js +131 -0
  26. package/dist/formatter.js.map +1 -0
  27. package/dist/items/content.cjs +14 -0
  28. package/dist/items/content.cjs.map +1 -0
  29. package/dist/items/content.d.ts +3 -0
  30. package/dist/items/content.js +10 -0
  31. package/dist/items/content.js.map +1 -0
  32. package/dist/items/context.cjs +13 -0
  33. package/dist/items/context.cjs.map +1 -0
  34. package/dist/items/context.d.ts +3 -0
  35. package/dist/items/context.js +9 -0
  36. package/dist/items/context.js.map +1 -0
  37. package/dist/items/instruction.cjs +13 -0
  38. package/dist/items/instruction.cjs.map +1 -0
  39. package/dist/items/instruction.d.ts +3 -0
  40. package/dist/items/instruction.js +9 -0
  41. package/dist/items/instruction.js.map +1 -0
  42. package/dist/items/parameters.cjs +53 -0
  43. package/dist/items/parameters.cjs.map +1 -0
  44. package/dist/items/parameters.d.ts +5 -0
  45. package/dist/items/parameters.js +47 -0
  46. package/dist/items/parameters.js.map +1 -0
  47. package/dist/items/section.cjs +120 -0
  48. package/dist/items/section.cjs.map +1 -0
  49. package/dist/items/section.d.ts +33 -0
  50. package/dist/items/section.js +115 -0
  51. package/dist/items/section.js.map +1 -0
  52. package/dist/items/trait.cjs +13 -0
  53. package/dist/items/trait.cjs.map +1 -0
  54. package/dist/items/trait.d.ts +3 -0
  55. package/dist/items/trait.js +9 -0
  56. package/dist/items/trait.js.map +1 -0
  57. package/dist/items/weighted.cjs +27 -0
  58. package/dist/items/weighted.cjs.map +1 -0
  59. package/dist/items/weighted.d.ts +24 -0
  60. package/dist/items/weighted.js +22 -0
  61. package/dist/items/weighted.js.map +1 -0
  62. package/dist/loader.cjs +167 -0
  63. package/dist/loader.cjs.map +1 -0
  64. package/dist/loader.d.ts +35 -0
  65. package/dist/loader.js +161 -0
  66. package/dist/loader.js.map +1 -0
  67. package/dist/logger.cjs +51 -0
  68. package/dist/logger.cjs.map +1 -0
  69. package/dist/logger.d.ts +11 -0
  70. package/dist/logger.js +46 -0
  71. package/dist/logger.js.map +1 -0
  72. package/dist/override.cjs +109 -0
  73. package/dist/override.cjs.map +1 -0
  74. package/dist/override.d.ts +31 -0
  75. package/dist/override.js +105 -0
  76. package/dist/override.js.map +1 -0
  77. package/dist/parse/markdown.cjs +114 -0
  78. package/dist/parse/markdown.cjs.map +1 -0
  79. package/dist/parse/markdown.d.ts +3 -0
  80. package/dist/parse/markdown.js +110 -0
  81. package/dist/parse/markdown.js.map +1 -0
  82. package/dist/parse/text.cjs +33 -0
  83. package/dist/parse/text.cjs.map +1 -0
  84. package/dist/parse/text.d.ts +3 -0
  85. package/dist/parse/text.js +29 -0
  86. package/dist/parse/text.js.map +1 -0
  87. package/dist/parser.cjs +99 -0
  88. package/dist/parser.cjs.map +1 -0
  89. package/dist/parser.d.ts +21 -0
  90. package/dist/parser.js +75 -0
  91. package/dist/parser.js.map +1 -0
  92. package/dist/prompt.cjs +15 -0
  93. package/dist/prompt.cjs.map +1 -0
  94. package/dist/prompt.d.ts +16 -0
  95. package/dist/prompt.js +11 -0
  96. package/dist/prompt.js.map +1 -0
  97. package/dist/riotprompt.cjs +1359 -0
  98. package/dist/riotprompt.cjs.map +1 -0
  99. package/dist/riotprompt.d.ts +25 -0
  100. package/dist/riotprompt.js +21 -0
  101. package/dist/riotprompt.js.map +1 -0
  102. package/dist/util/general.cjs +52 -0
  103. package/dist/util/general.cjs.map +1 -0
  104. package/dist/util/general.d.ts +4 -0
  105. package/dist/util/general.js +47 -0
  106. package/dist/util/general.js.map +1 -0
  107. package/dist/util/markdown.cjs +115 -0
  108. package/dist/util/markdown.cjs.map +1 -0
  109. package/dist/util/markdown.d.ts +7 -0
  110. package/dist/util/markdown.js +111 -0
  111. package/dist/util/markdown.js.map +1 -0
  112. package/dist/util/storage.cjs +155 -0
  113. package/dist/util/storage.cjs.map +1 -0
  114. package/dist/util/storage.d.ts +32 -0
  115. package/dist/util/storage.js +132 -0
  116. package/dist/util/storage.js.map +1 -0
  117. package/dist/util/text.cjs +42 -0
  118. package/dist/util/text.cjs.map +1 -0
  119. package/dist/util/text.d.ts +1 -0
  120. package/dist/util/text.js +38 -0
  121. package/dist/util/text.js.map +1 -0
  122. package/docs/loader.md +237 -0
  123. package/docs/override.md +323 -0
  124. package/docs/parser.md +130 -0
  125. package/eslint.config.mjs +82 -0
  126. package/nodemon.json +14 -0
  127. package/package.json +72 -0
  128. package/vite.config.ts +114 -0
  129. package/vitest.config.ts +25 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"builder.cjs","sources":["../src/builder.ts"],"sourcesContent":["import path from \"path\";\nimport { z } from \"zod\";\nimport { ParametersSchema } from \"./items/parameters\";\nimport { SectionOptions, SectionOptionsSchema } from \"./items/section\";\nimport { DEFAULT_LOGGER, wrapLogger } from \"./logger\";\nimport { Content, Context, createPrompt, createSection, Instruction, Loader, Override, Parser, Prompt, Section, Weighted } from \"./riotprompt\";\n\nconst OptionSchema = z.object({\n logger: z.any().optional().default(DEFAULT_LOGGER),\n basePath: z.string(),\n overridePath: z.string().optional().default(\"./\"),\n overrides: z.boolean().optional().default(false),\n parameters: ParametersSchema.optional().default({}),\n});\n\nexport type Options = z.infer<typeof OptionSchema>;\n\nexport type OptionsParam = Required<Pick<Options, 'basePath'>> & Partial<Omit<Options, 'basePath'>>;\n\nexport interface Instance {\n addPersonaPath(contentPath: string, sectionOptions?: Partial<SectionOptions>): Promise<Instance>;\n addContextPath(contentPath: string, sectionOptions?: Partial<SectionOptions>): Promise<Instance>;\n addInstructionPath(contentPath: string, sectionOptions?: Partial<SectionOptions>): Promise<Instance>;\n addContentPath(contentPath: string, sectionOptions?: Partial<SectionOptions>): Promise<Instance>;\n addContent(content: string, sectionOptions?: Partial<SectionOptions>): Promise<Instance>;\n addContext(context: string, sectionOptions?: Partial<SectionOptions>): Promise<Instance>;\n loadContext(contextDirectories: string[], sectionOptions?: Partial<SectionOptions>): Promise<Instance>;\n loadContent(contentDirectories: string[], sectionOptions?: Partial<SectionOptions>): Promise<Instance>;\n build(): Promise<Prompt>;\n}\n\nexport const create = (builderOptions: OptionsParam): Instance => {\n const options: Required<Options> = OptionSchema.parse(builderOptions) as Required<Options>;\n\n const logger = wrapLogger(options.logger, 'Builder');\n const parser = Parser.create({ logger });\n const override = Override.create({\n logger, configDir: options.overridePath || \"./\",\n overrides: options.overrides || false\n });\n const loader = Loader.create({ logger });\n\n const personaSection: Section<Instruction> = createSection({ title: \"Persona\" });\n const contextSection: Section<Context> = createSection({ title: \"Context\" });\n const instructionSection: Section<Instruction> = createSection({ title: \"Instruction\" });\n const contentSection: Section<Content> = createSection({ title: \"Content\" });\n const parameters = options.parameters;\n\n\n const instance: Partial<Instance> = {}\n\n const loadOptions = (sectionOptions: Partial<SectionOptions> = {}): SectionOptions => {\n const currentOptions = SectionOptionsSchema.parse(sectionOptions);\n return {\n ...currentOptions,\n parameters: {\n ...parameters,\n ...currentOptions.parameters\n }\n }\n }\n\n const loadDirectories = async <T extends Weighted>(\n directories: string[],\n sectionOptions: Partial<SectionOptions> = {}\n ): Promise<Section<T>[]> => {\n const currentOptions = loadOptions(sectionOptions);\n logger.debug(\"Loading directories\", directories);\n const sections: Section<T>[] = await loader.load<T>(directories, currentOptions);\n return sections;\n }\n\n const loadContext = async (\n contextDirectories: string[],\n sectionOptions: Partial<SectionOptions> = {}\n ): Promise<Instance> => {\n const currentOptions = loadOptions(sectionOptions);\n logger.debug('Loading context', contextDirectories);\n const context: Section<Context>[] = await loadDirectories<Context>(contextDirectories, currentOptions);\n contextSection.add(context);\n return instance as Instance;\n }\n instance.loadContext = loadContext;\n\n const loadContent = async (\n contentDirectories: string[],\n sectionOptions: Partial<SectionOptions> = {}\n ): Promise<Instance> => {\n const currentOptions = loadOptions(sectionOptions);\n const content: Section<Content>[] = await loadDirectories<Content>(contentDirectories, currentOptions);\n contentSection.add(content);\n return instance as Instance;\n }\n instance.loadContent = loadContent;\n\n const loadPath = async <T extends Weighted>(\n contentPath: string,\n sectionOptions: Partial<SectionOptions> = {}\n ): Promise<Section<T>> => {\n const currentOptions = loadOptions(sectionOptions);\n const defaultPath = path.join(options.basePath as string, contentPath);\n const section: Section<T> = await parser.parseFile<T>(defaultPath, currentOptions);\n const overrideSection = await override.customize<T>(contentPath, section, currentOptions);\n return overrideSection;\n }\n\n const addPersonaPath = async (\n contentPath: string,\n sectionOptions: Partial<SectionOptions> = {}\n ): Promise<Instance> => {\n const currentOptions = loadOptions(sectionOptions);\n const persona: Section<Instruction> = await loadPath<Instruction>(contentPath, currentOptions);\n personaSection.add(persona);\n return instance as Instance;\n }\n instance.addPersonaPath = addPersonaPath;\n\n const addContextPath = async (\n contentPath: string,\n sectionOptions: Partial<SectionOptions> = {}\n ): Promise<Instance> => {\n logger.debug(\"Adding context path\", contentPath);\n const currentOptions = loadOptions(sectionOptions);\n const context: Section<Context> = await loadPath<Context>(contentPath, currentOptions);\n contextSection.add(context);\n return instance as Instance;\n }\n instance.addContextPath = addContextPath;\n\n const addInstructionPath = async (\n contentPath: string,\n sectionOptions: Partial<SectionOptions> = {}\n ): Promise<Instance> => {\n logger.debug(\"Adding instruction path\", contentPath);\n const currentOptions = loadOptions(sectionOptions);\n const instruction: Section<Instruction> = await loadPath<Instruction>(contentPath, currentOptions);\n instructionSection.add(instruction);\n return instance as Instance;\n }\n instance.addInstructionPath = addInstructionPath;\n\n const addContentPath = async (\n contentPath: string,\n sectionOptions: Partial<SectionOptions> = {}\n ): Promise<Instance> => {\n logger.debug(\"Adding content path\", contentPath);\n const currentOptions = loadOptions(sectionOptions);\n const content: Section<Content> = await loadPath<Content>(contentPath, currentOptions);\n contentSection.add(content);\n return instance as Instance;\n }\n instance.addContentPath = addContentPath;\n\n const addContent = async (\n content: string | Buffer,\n sectionOptions: Partial<SectionOptions> = {}\n ): Promise<Instance> => {\n logger.debug(\"Adding content\", typeof content);\n const currentOptions = loadOptions(sectionOptions);\n const parsedContentSection: Section<Content> = parser.parse<Content>(content, currentOptions);\n contentSection.add(parsedContentSection);\n return instance as Instance;\n }\n instance.addContent = addContent;\n\n const addContext = async (\n context: string | Buffer,\n sectionOptions: Partial<SectionOptions> = {}\n ): Promise<Instance> => {\n logger.debug(\"Adding context\", typeof context);\n const currentOptions = loadOptions(sectionOptions);\n const parsedContextSection: Section<Context> = parser.parse<Context>(context, currentOptions);\n contextSection.add(parsedContextSection);\n return instance as Instance;\n }\n instance.addContext = addContext;\n\n const build = async () => {\n logger.debug(\"Building prompt\", {});\n const prompt = createPrompt({ persona: personaSection, contexts: contextSection, instructions: instructionSection, contents: contentSection });\n return prompt;\n }\n instance.build = build;\n\n return instance as Instance;\n}\n"],"names":["OptionSchema","z","object","logger","any","optional","default","DEFAULT_LOGGER","basePath","string","overridePath","overrides","boolean","parameters","ParametersSchema","create","builderOptions","options","parse","wrapLogger","parser","Parser","override","Override","configDir","loader","Loader","personaSection","createSection","title","contextSection","instructionSection","contentSection","instance","loadOptions","sectionOptions","currentOptions","SectionOptionsSchema","loadDirectories","directories","debug","sections","load","loadContext","contextDirectories","context","add","loadContent","contentDirectories","content","loadPath","contentPath","defaultPath","path","join","section","parseFile","overrideSection","customize","addPersonaPath","persona","addContextPath","addInstructionPath","instruction","addContentPath","addContent","parsedContentSection","addContext","parsedContextSection","build","prompt","createPrompt","contexts","instructions","contents"],"mappings":"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"}
@@ -0,0 +1,37 @@
1
+ import { z } from 'zod';
2
+ import { SectionOptions } from './items/section';
3
+ import { Prompt } from './riotprompt';
4
+ declare const OptionSchema: z.ZodObject<{
5
+ logger: z.ZodDefault<z.ZodOptional<z.ZodAny>>;
6
+ basePath: z.ZodString;
7
+ overridePath: z.ZodDefault<z.ZodOptional<z.ZodString>>;
8
+ overrides: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
9
+ parameters: z.ZodDefault<z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnion<[z.ZodString, z.ZodNumber, z.ZodBoolean, z.ZodArray<z.ZodUnion<[z.ZodString, z.ZodNumber, z.ZodBoolean]>, "many">]>>>>;
10
+ }, "strip", z.ZodTypeAny, {
11
+ parameters: Record<string, string | number | boolean | (string | number | boolean)[]>;
12
+ overrides: boolean;
13
+ basePath: string;
14
+ overridePath: string;
15
+ logger?: any;
16
+ }, {
17
+ basePath: string;
18
+ parameters?: Record<string, string | number | boolean | (string | number | boolean)[]> | undefined;
19
+ logger?: any;
20
+ overrides?: boolean | undefined;
21
+ overridePath?: string | undefined;
22
+ }>;
23
+ export type Options = z.infer<typeof OptionSchema>;
24
+ export type OptionsParam = Required<Pick<Options, 'basePath'>> & Partial<Omit<Options, 'basePath'>>;
25
+ export interface Instance {
26
+ addPersonaPath(contentPath: string, sectionOptions?: Partial<SectionOptions>): Promise<Instance>;
27
+ addContextPath(contentPath: string, sectionOptions?: Partial<SectionOptions>): Promise<Instance>;
28
+ addInstructionPath(contentPath: string, sectionOptions?: Partial<SectionOptions>): Promise<Instance>;
29
+ addContentPath(contentPath: string, sectionOptions?: Partial<SectionOptions>): Promise<Instance>;
30
+ addContent(content: string, sectionOptions?: Partial<SectionOptions>): Promise<Instance>;
31
+ addContext(context: string, sectionOptions?: Partial<SectionOptions>): Promise<Instance>;
32
+ loadContext(contextDirectories: string[], sectionOptions?: Partial<SectionOptions>): Promise<Instance>;
33
+ loadContent(contentDirectories: string[], sectionOptions?: Partial<SectionOptions>): Promise<Instance>;
34
+ build(): Promise<Prompt>;
35
+ }
36
+ export declare const create: (builderOptions: OptionsParam) => Instance;
37
+ export {};
@@ -0,0 +1,148 @@
1
+ import path__default from 'path';
2
+ import { z } from 'zod';
3
+ import { ParametersSchema } from './items/parameters.js';
4
+ import { create as create$4, SectionOptionsSchema } from './items/section.js';
5
+ import { DEFAULT_LOGGER, wrapLogger } from './logger.js';
6
+ import './items/weighted.js';
7
+ import { create as create$5 } from './prompt.js';
8
+ import './formatter.js';
9
+ import { create as create$1 } from './parser.js';
10
+ import { create as create$3 } from './loader.js';
11
+ import { create as create$2 } from './override.js';
12
+
13
+ const OptionSchema = z.object({
14
+ logger: z.any().optional().default(DEFAULT_LOGGER),
15
+ basePath: z.string(),
16
+ overridePath: z.string().optional().default("./"),
17
+ overrides: z.boolean().optional().default(false),
18
+ parameters: ParametersSchema.optional().default({})
19
+ });
20
+ const create = (builderOptions)=>{
21
+ const options = OptionSchema.parse(builderOptions);
22
+ const logger = wrapLogger(options.logger, 'Builder');
23
+ const parser$1 = create$1({
24
+ logger
25
+ });
26
+ const override$1 = create$2({
27
+ logger,
28
+ configDir: options.overridePath || "./",
29
+ overrides: options.overrides || false
30
+ });
31
+ const loader$1 = create$3({
32
+ logger
33
+ });
34
+ const personaSection = create$4({
35
+ title: "Persona"
36
+ });
37
+ const contextSection = create$4({
38
+ title: "Context"
39
+ });
40
+ const instructionSection = create$4({
41
+ title: "Instruction"
42
+ });
43
+ const contentSection = create$4({
44
+ title: "Content"
45
+ });
46
+ const parameters = options.parameters;
47
+ const instance = {};
48
+ const loadOptions = (sectionOptions = {})=>{
49
+ const currentOptions = SectionOptionsSchema.parse(sectionOptions);
50
+ return {
51
+ ...currentOptions,
52
+ parameters: {
53
+ ...parameters,
54
+ ...currentOptions.parameters
55
+ }
56
+ };
57
+ };
58
+ const loadDirectories = async (directories, sectionOptions = {})=>{
59
+ const currentOptions = loadOptions(sectionOptions);
60
+ logger.debug("Loading directories", directories);
61
+ const sections = await loader$1.load(directories, currentOptions);
62
+ return sections;
63
+ };
64
+ const loadContext = async (contextDirectories, sectionOptions = {})=>{
65
+ const currentOptions = loadOptions(sectionOptions);
66
+ logger.debug('Loading context', contextDirectories);
67
+ const context = await loadDirectories(contextDirectories, currentOptions);
68
+ contextSection.add(context);
69
+ return instance;
70
+ };
71
+ instance.loadContext = loadContext;
72
+ const loadContent = async (contentDirectories, sectionOptions = {})=>{
73
+ const currentOptions = loadOptions(sectionOptions);
74
+ const content = await loadDirectories(contentDirectories, currentOptions);
75
+ contentSection.add(content);
76
+ return instance;
77
+ };
78
+ instance.loadContent = loadContent;
79
+ const loadPath = async (contentPath, sectionOptions = {})=>{
80
+ const currentOptions = loadOptions(sectionOptions);
81
+ const defaultPath = path__default.join(options.basePath, contentPath);
82
+ const section = await parser$1.parseFile(defaultPath, currentOptions);
83
+ const overrideSection = await override$1.customize(contentPath, section, currentOptions);
84
+ return overrideSection;
85
+ };
86
+ const addPersonaPath = async (contentPath, sectionOptions = {})=>{
87
+ const currentOptions = loadOptions(sectionOptions);
88
+ const persona = await loadPath(contentPath, currentOptions);
89
+ personaSection.add(persona);
90
+ return instance;
91
+ };
92
+ instance.addPersonaPath = addPersonaPath;
93
+ const addContextPath = async (contentPath, sectionOptions = {})=>{
94
+ logger.debug("Adding context path", contentPath);
95
+ const currentOptions = loadOptions(sectionOptions);
96
+ const context = await loadPath(contentPath, currentOptions);
97
+ contextSection.add(context);
98
+ return instance;
99
+ };
100
+ instance.addContextPath = addContextPath;
101
+ const addInstructionPath = async (contentPath, sectionOptions = {})=>{
102
+ logger.debug("Adding instruction path", contentPath);
103
+ const currentOptions = loadOptions(sectionOptions);
104
+ const instruction = await loadPath(contentPath, currentOptions);
105
+ instructionSection.add(instruction);
106
+ return instance;
107
+ };
108
+ instance.addInstructionPath = addInstructionPath;
109
+ const addContentPath = async (contentPath, sectionOptions = {})=>{
110
+ logger.debug("Adding content path", contentPath);
111
+ const currentOptions = loadOptions(sectionOptions);
112
+ const content = await loadPath(contentPath, currentOptions);
113
+ contentSection.add(content);
114
+ return instance;
115
+ };
116
+ instance.addContentPath = addContentPath;
117
+ const addContent = async (content, sectionOptions = {})=>{
118
+ logger.debug("Adding content", typeof content);
119
+ const currentOptions = loadOptions(sectionOptions);
120
+ const parsedContentSection = parser$1.parse(content, currentOptions);
121
+ contentSection.add(parsedContentSection);
122
+ return instance;
123
+ };
124
+ instance.addContent = addContent;
125
+ const addContext = async (context, sectionOptions = {})=>{
126
+ logger.debug("Adding context", typeof context);
127
+ const currentOptions = loadOptions(sectionOptions);
128
+ const parsedContextSection = parser$1.parse(context, currentOptions);
129
+ contextSection.add(parsedContextSection);
130
+ return instance;
131
+ };
132
+ instance.addContext = addContext;
133
+ const build = async ()=>{
134
+ logger.debug("Building prompt", {});
135
+ const prompt = create$5({
136
+ persona: personaSection,
137
+ contexts: contextSection,
138
+ instructions: instructionSection,
139
+ contents: contentSection
140
+ });
141
+ return prompt;
142
+ };
143
+ instance.build = build;
144
+ return instance;
145
+ };
146
+
147
+ export { create };
148
+ //# sourceMappingURL=builder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"builder.js","sources":["../src/builder.ts"],"sourcesContent":["import path from \"path\";\nimport { z } from \"zod\";\nimport { ParametersSchema } from \"./items/parameters\";\nimport { SectionOptions, SectionOptionsSchema } from \"./items/section\";\nimport { DEFAULT_LOGGER, wrapLogger } from \"./logger\";\nimport { Content, Context, createPrompt, createSection, Instruction, Loader, Override, Parser, Prompt, Section, Weighted } from \"./riotprompt\";\n\nconst OptionSchema = z.object({\n logger: z.any().optional().default(DEFAULT_LOGGER),\n basePath: z.string(),\n overridePath: z.string().optional().default(\"./\"),\n overrides: z.boolean().optional().default(false),\n parameters: ParametersSchema.optional().default({}),\n});\n\nexport type Options = z.infer<typeof OptionSchema>;\n\nexport type OptionsParam = Required<Pick<Options, 'basePath'>> & Partial<Omit<Options, 'basePath'>>;\n\nexport interface Instance {\n addPersonaPath(contentPath: string, sectionOptions?: Partial<SectionOptions>): Promise<Instance>;\n addContextPath(contentPath: string, sectionOptions?: Partial<SectionOptions>): Promise<Instance>;\n addInstructionPath(contentPath: string, sectionOptions?: Partial<SectionOptions>): Promise<Instance>;\n addContentPath(contentPath: string, sectionOptions?: Partial<SectionOptions>): Promise<Instance>;\n addContent(content: string, sectionOptions?: Partial<SectionOptions>): Promise<Instance>;\n addContext(context: string, sectionOptions?: Partial<SectionOptions>): Promise<Instance>;\n loadContext(contextDirectories: string[], sectionOptions?: Partial<SectionOptions>): Promise<Instance>;\n loadContent(contentDirectories: string[], sectionOptions?: Partial<SectionOptions>): Promise<Instance>;\n build(): Promise<Prompt>;\n}\n\nexport const create = (builderOptions: OptionsParam): Instance => {\n const options: Required<Options> = OptionSchema.parse(builderOptions) as Required<Options>;\n\n const logger = wrapLogger(options.logger, 'Builder');\n const parser = Parser.create({ logger });\n const override = Override.create({\n logger, configDir: options.overridePath || \"./\",\n overrides: options.overrides || false\n });\n const loader = Loader.create({ logger });\n\n const personaSection: Section<Instruction> = createSection({ title: \"Persona\" });\n const contextSection: Section<Context> = createSection({ title: \"Context\" });\n const instructionSection: Section<Instruction> = createSection({ title: \"Instruction\" });\n const contentSection: Section<Content> = createSection({ title: \"Content\" });\n const parameters = options.parameters;\n\n\n const instance: Partial<Instance> = {}\n\n const loadOptions = (sectionOptions: Partial<SectionOptions> = {}): SectionOptions => {\n const currentOptions = SectionOptionsSchema.parse(sectionOptions);\n return {\n ...currentOptions,\n parameters: {\n ...parameters,\n ...currentOptions.parameters\n }\n }\n }\n\n const loadDirectories = async <T extends Weighted>(\n directories: string[],\n sectionOptions: Partial<SectionOptions> = {}\n ): Promise<Section<T>[]> => {\n const currentOptions = loadOptions(sectionOptions);\n logger.debug(\"Loading directories\", directories);\n const sections: Section<T>[] = await loader.load<T>(directories, currentOptions);\n return sections;\n }\n\n const loadContext = async (\n contextDirectories: string[],\n sectionOptions: Partial<SectionOptions> = {}\n ): Promise<Instance> => {\n const currentOptions = loadOptions(sectionOptions);\n logger.debug('Loading context', contextDirectories);\n const context: Section<Context>[] = await loadDirectories<Context>(contextDirectories, currentOptions);\n contextSection.add(context);\n return instance as Instance;\n }\n instance.loadContext = loadContext;\n\n const loadContent = async (\n contentDirectories: string[],\n sectionOptions: Partial<SectionOptions> = {}\n ): Promise<Instance> => {\n const currentOptions = loadOptions(sectionOptions);\n const content: Section<Content>[] = await loadDirectories<Content>(contentDirectories, currentOptions);\n contentSection.add(content);\n return instance as Instance;\n }\n instance.loadContent = loadContent;\n\n const loadPath = async <T extends Weighted>(\n contentPath: string,\n sectionOptions: Partial<SectionOptions> = {}\n ): Promise<Section<T>> => {\n const currentOptions = loadOptions(sectionOptions);\n const defaultPath = path.join(options.basePath as string, contentPath);\n const section: Section<T> = await parser.parseFile<T>(defaultPath, currentOptions);\n const overrideSection = await override.customize<T>(contentPath, section, currentOptions);\n return overrideSection;\n }\n\n const addPersonaPath = async (\n contentPath: string,\n sectionOptions: Partial<SectionOptions> = {}\n ): Promise<Instance> => {\n const currentOptions = loadOptions(sectionOptions);\n const persona: Section<Instruction> = await loadPath<Instruction>(contentPath, currentOptions);\n personaSection.add(persona);\n return instance as Instance;\n }\n instance.addPersonaPath = addPersonaPath;\n\n const addContextPath = async (\n contentPath: string,\n sectionOptions: Partial<SectionOptions> = {}\n ): Promise<Instance> => {\n logger.debug(\"Adding context path\", contentPath);\n const currentOptions = loadOptions(sectionOptions);\n const context: Section<Context> = await loadPath<Context>(contentPath, currentOptions);\n contextSection.add(context);\n return instance as Instance;\n }\n instance.addContextPath = addContextPath;\n\n const addInstructionPath = async (\n contentPath: string,\n sectionOptions: Partial<SectionOptions> = {}\n ): Promise<Instance> => {\n logger.debug(\"Adding instruction path\", contentPath);\n const currentOptions = loadOptions(sectionOptions);\n const instruction: Section<Instruction> = await loadPath<Instruction>(contentPath, currentOptions);\n instructionSection.add(instruction);\n return instance as Instance;\n }\n instance.addInstructionPath = addInstructionPath;\n\n const addContentPath = async (\n contentPath: string,\n sectionOptions: Partial<SectionOptions> = {}\n ): Promise<Instance> => {\n logger.debug(\"Adding content path\", contentPath);\n const currentOptions = loadOptions(sectionOptions);\n const content: Section<Content> = await loadPath<Content>(contentPath, currentOptions);\n contentSection.add(content);\n return instance as Instance;\n }\n instance.addContentPath = addContentPath;\n\n const addContent = async (\n content: string | Buffer,\n sectionOptions: Partial<SectionOptions> = {}\n ): Promise<Instance> => {\n logger.debug(\"Adding content\", typeof content);\n const currentOptions = loadOptions(sectionOptions);\n const parsedContentSection: Section<Content> = parser.parse<Content>(content, currentOptions);\n contentSection.add(parsedContentSection);\n return instance as Instance;\n }\n instance.addContent = addContent;\n\n const addContext = async (\n context: string | Buffer,\n sectionOptions: Partial<SectionOptions> = {}\n ): Promise<Instance> => {\n logger.debug(\"Adding context\", typeof context);\n const currentOptions = loadOptions(sectionOptions);\n const parsedContextSection: Section<Context> = parser.parse<Context>(context, currentOptions);\n contextSection.add(parsedContextSection);\n return instance as Instance;\n }\n instance.addContext = addContext;\n\n const build = async () => {\n logger.debug(\"Building prompt\", {});\n const prompt = createPrompt({ persona: personaSection, contexts: contextSection, instructions: instructionSection, contents: contentSection });\n return prompt;\n }\n instance.build = build;\n\n return instance as Instance;\n}\n"],"names":["OptionSchema","z","object","logger","any","optional","default","DEFAULT_LOGGER","basePath","string","overridePath","overrides","boolean","parameters","ParametersSchema","create","builderOptions","options","parse","wrapLogger","parser","Parser","override","Override","configDir","loader","Loader","personaSection","createSection","title","contextSection","instructionSection","contentSection","instance","loadOptions","sectionOptions","currentOptions","SectionOptionsSchema","loadDirectories","directories","debug","sections","load","loadContext","contextDirectories","context","add","loadContent","contentDirectories","content","loadPath","contentPath","defaultPath","path","join","section","parseFile","overrideSection","customize","addPersonaPath","persona","addContextPath","addInstructionPath","instruction","addContentPath","addContent","parsedContentSection","addContext","parsedContextSection","build","prompt","createPrompt","contexts","instructions","contents"],"mappings":"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"}
package/dist/chat.cjs ADDED
@@ -0,0 +1,26 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
4
+
5
+ const constants = require('./constants.cjs');
6
+
7
+ const getPersonaRole = (model)=>{
8
+ if (model === "gpt-4o" || model === "gpt-4o-mini") {
9
+ return "system";
10
+ }
11
+ return constants.DEFAULT_PERSONA_ROLE;
12
+ };
13
+ const createRequest = (model)=>{
14
+ const messages = [];
15
+ return {
16
+ model,
17
+ messages,
18
+ addMessage: (message)=>{
19
+ messages.push(message);
20
+ }
21
+ };
22
+ };
23
+
24
+ exports.createRequest = createRequest;
25
+ exports.getPersonaRole = getPersonaRole;
26
+ //# sourceMappingURL=chat.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chat.cjs","sources":["../src/chat.ts"],"sourcesContent":["import { DEFAULT_PERSONA_ROLE } from \"./constants\";\n\nexport type Role = \"user\" | \"assistant\" | \"system\" | \"developer\";\n\nexport type Model = \"gpt-4o\" | \"gpt-4o-mini\" | \"o1-preview\" | \"o1-mini\" | \"o1\" | \"o3-mini\" | \"o1-pro\";\n\nexport interface Message {\n role: Role;\n content: string | string[];\n name?: string;\n}\n\nexport interface Request {\n messages: Message[];\n model: Model;\n\n addMessage(message: Message): void;\n}\n\nexport const getPersonaRole = (model: Model): Role => {\n if (model === \"gpt-4o\" || model === \"gpt-4o-mini\") {\n return \"system\";\n }\n return DEFAULT_PERSONA_ROLE;\n}\n\nexport const createRequest = (model: Model): Request => {\n const messages: Message[] = [];\n\n return {\n model,\n messages,\n addMessage: (message: Message) => {\n messages.push(message);\n }\n }\n}\n"],"names":["getPersonaRole","model","DEFAULT_PERSONA_ROLE","createRequest","messages","addMessage","message","push"],"mappings":";;;;;;AAmBO,MAAMA,iBAAiB,CAACC,KAAAA,GAAAA;IAC3B,IAAIA,KAAAA,KAAU,QAAYA,IAAAA,KAAAA,KAAU,aAAe,EAAA;QAC/C,OAAO,QAAA;AACX;IACA,OAAOC,8BAAAA;AACX;AAEO,MAAMC,gBAAgB,CAACF,KAAAA,GAAAA;AAC1B,IAAA,MAAMG,WAAsB,EAAE;IAE9B,OAAO;AACHH,QAAAA,KAAAA;AACAG,QAAAA,QAAAA;AACAC,QAAAA,UAAAA,EAAY,CAACC,OAAAA,GAAAA;AACTF,YAAAA,QAAAA,CAASG,IAAI,CAACD,OAAAA,CAAAA;AAClB;AACJ,KAAA;AACJ;;;;;"}
package/dist/chat.d.ts ADDED
@@ -0,0 +1,14 @@
1
+ export type Role = "user" | "assistant" | "system" | "developer";
2
+ export type Model = "gpt-4o" | "gpt-4o-mini" | "o1-preview" | "o1-mini" | "o1" | "o3-mini" | "o1-pro";
3
+ export interface Message {
4
+ role: Role;
5
+ content: string | string[];
6
+ name?: string;
7
+ }
8
+ export interface Request {
9
+ messages: Message[];
10
+ model: Model;
11
+ addMessage(message: Message): void;
12
+ }
13
+ export declare const getPersonaRole: (model: Model) => Role;
14
+ export declare const createRequest: (model: Model) => Request;
package/dist/chat.js ADDED
@@ -0,0 +1,21 @@
1
+ import { DEFAULT_PERSONA_ROLE } from './constants.js';
2
+
3
+ const getPersonaRole = (model)=>{
4
+ if (model === "gpt-4o" || model === "gpt-4o-mini") {
5
+ return "system";
6
+ }
7
+ return DEFAULT_PERSONA_ROLE;
8
+ };
9
+ const createRequest = (model)=>{
10
+ const messages = [];
11
+ return {
12
+ model,
13
+ messages,
14
+ addMessage: (message)=>{
15
+ messages.push(message);
16
+ }
17
+ };
18
+ };
19
+
20
+ export { createRequest, getPersonaRole };
21
+ //# sourceMappingURL=chat.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chat.js","sources":["../src/chat.ts"],"sourcesContent":["import { DEFAULT_PERSONA_ROLE } from \"./constants\";\n\nexport type Role = \"user\" | \"assistant\" | \"system\" | \"developer\";\n\nexport type Model = \"gpt-4o\" | \"gpt-4o-mini\" | \"o1-preview\" | \"o1-mini\" | \"o1\" | \"o3-mini\" | \"o1-pro\";\n\nexport interface Message {\n role: Role;\n content: string | string[];\n name?: string;\n}\n\nexport interface Request {\n messages: Message[];\n model: Model;\n\n addMessage(message: Message): void;\n}\n\nexport const getPersonaRole = (model: Model): Role => {\n if (model === \"gpt-4o\" || model === \"gpt-4o-mini\") {\n return \"system\";\n }\n return DEFAULT_PERSONA_ROLE;\n}\n\nexport const createRequest = (model: Model): Request => {\n const messages: Message[] = [];\n\n return {\n model,\n messages,\n addMessage: (message: Message) => {\n messages.push(message);\n }\n }\n}\n"],"names":["getPersonaRole","model","DEFAULT_PERSONA_ROLE","createRequest","messages","addMessage","message","push"],"mappings":";;AAmBO,MAAMA,iBAAiB,CAACC,KAAAA,GAAAA;IAC3B,IAAIA,KAAAA,KAAU,QAAYA,IAAAA,KAAAA,KAAU,aAAe,EAAA;QAC/C,OAAO,QAAA;AACX;IACA,OAAOC,oBAAAA;AACX;AAEO,MAAMC,gBAAgB,CAACF,KAAAA,GAAAA;AAC1B,IAAA,MAAMG,WAAsB,EAAE;IAE9B,OAAO;AACHH,QAAAA,KAAAA;AACAG,QAAAA,QAAAA;AACAC,QAAAA,UAAAA,EAAY,CAACC,OAAAA,GAAAA;AACTF,YAAAA,QAAAA,CAASG,IAAI,CAACD,OAAAA,CAAAA;AAClB;AACJ,KAAA;AACJ;;;;"}
@@ -0,0 +1,34 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
4
+
5
+ const DEFAULT_CHARACTER_ENCODING = "utf8";
6
+ const LIBRARY_NAME = "riotprompt";
7
+ const DEFAULT_PERSONA_ROLE = "developer";
8
+ const DEFAULT_IGNORE_PATTERNS = [
9
+ "^\\..*",
10
+ "\\.(jpg|jpeg|png|gif|bmp|svg|webp|ico)$",
11
+ "\\.(mp3|wav|ogg|aac|flac)$",
12
+ "\\.(mp4|mov|avi|mkv|webm)$",
13
+ "\\.(pdf|doc|docx|xls|xlsx|ppt|pptx)$",
14
+ "\\.(zip|tar|gz|rar|7z)$" // Compressed files
15
+ ];
16
+ const DEFAULT_SECTION_SEPARATOR = "tag";
17
+ const DEFAULT_SECTION_INDENTATION = true;
18
+ const DEFAULT_SECTION_TITLE_PROPERTY = "title";
19
+ const DEFAULT_FORMAT_OPTIONS = {
20
+ sectionSeparator: DEFAULT_SECTION_SEPARATOR,
21
+ sectionIndentation: DEFAULT_SECTION_INDENTATION,
22
+ sectionTitleProperty: DEFAULT_SECTION_TITLE_PROPERTY,
23
+ sectionDepth: 0
24
+ };
25
+
26
+ exports.DEFAULT_CHARACTER_ENCODING = DEFAULT_CHARACTER_ENCODING;
27
+ exports.DEFAULT_FORMAT_OPTIONS = DEFAULT_FORMAT_OPTIONS;
28
+ exports.DEFAULT_IGNORE_PATTERNS = DEFAULT_IGNORE_PATTERNS;
29
+ exports.DEFAULT_PERSONA_ROLE = DEFAULT_PERSONA_ROLE;
30
+ exports.DEFAULT_SECTION_INDENTATION = DEFAULT_SECTION_INDENTATION;
31
+ exports.DEFAULT_SECTION_SEPARATOR = DEFAULT_SECTION_SEPARATOR;
32
+ exports.DEFAULT_SECTION_TITLE_PROPERTY = DEFAULT_SECTION_TITLE_PROPERTY;
33
+ exports.LIBRARY_NAME = LIBRARY_NAME;
34
+ //# sourceMappingURL=constants.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.cjs","sources":["../src/constants.ts"],"sourcesContent":["import { SectionSeparator } from \"formatter\";\n\nimport { FormatOptions } from \"formatter\";\n\nexport const DEFAULT_CHARACTER_ENCODING = \"utf8\";\nexport const LIBRARY_NAME = \"riotprompt\";\n\nexport const DEFAULT_PERSONA_ROLE = \"developer\";\n\nexport const DEFAULT_INSTRUCTIONS_AREA_TITLE = \"Instructions\";\nexport const DEFAULT_CONTENTS_AREA_TITLE = \"Contents\";\nexport const DEFAULT_CONTEXT_AREA_TITLE = \"Context\";\n\nexport const DEFAULT_IGNORE_PATTERNS: string[] = [\n \"^\\\\..*\", // Hidden files (e.g., .git, .DS_Store)\n \"\\\\.(jpg|jpeg|png|gif|bmp|svg|webp|ico)$\", // Image files\n \"\\\\.(mp3|wav|ogg|aac|flac)$\", // Audio files\n \"\\\\.(mp4|mov|avi|mkv|webm)$\", // Video files\n \"\\\\.(pdf|doc|docx|xls|xlsx|ppt|pptx)$\", // Document files\n \"\\\\.(zip|tar|gz|rar|7z)$\" // Compressed files\n];\n\nexport const DEFAULT_SECTION_SEPARATOR: SectionSeparator = \"tag\";\nexport const DEFAULT_SECTION_INDENTATION = true;\nexport const DEFAULT_SECTION_TAG = \"section\";\nexport const DEFAULT_SECTION_TITLE_PROPERTY = \"title\";\n\nexport const DEFAULT_FORMAT_OPTIONS: FormatOptions = {\n sectionSeparator: DEFAULT_SECTION_SEPARATOR,\n sectionIndentation: DEFAULT_SECTION_INDENTATION,\n sectionTitleProperty: DEFAULT_SECTION_TITLE_PROPERTY,\n sectionDepth: 0,\n}\n"],"names":["DEFAULT_CHARACTER_ENCODING","LIBRARY_NAME","DEFAULT_PERSONA_ROLE","DEFAULT_IGNORE_PATTERNS","DEFAULT_SECTION_SEPARATOR","DEFAULT_SECTION_INDENTATION","DEFAULT_SECTION_TITLE_PROPERTY","DEFAULT_FORMAT_OPTIONS","sectionSeparator","sectionIndentation","sectionTitleProperty","sectionDepth"],"mappings":";;;;AAIO,MAAMA,6BAA6B;AACnC,MAAMC,eAAe;AAErB,MAAMC,uBAAuB;MAMvBC,uBAAoC,GAAA;AAC7C,IAAA,QAAA;AACA,IAAA,yCAAA;AACA,IAAA,4BAAA;AACA,IAAA,4BAAA;AACA,IAAA,sCAAA;AACA,IAAA,yBAAA;;AAGG,MAAMC,4BAA8C;AACpD,MAAMC,8BAA8B;AAEpC,MAAMC,iCAAiC;MAEjCC,sBAAwC,GAAA;IACjDC,gBAAkBJ,EAAAA,yBAAAA;IAClBK,kBAAoBJ,EAAAA,2BAAAA;IACpBK,oBAAsBJ,EAAAA,8BAAAA;IACtBK,YAAc,EAAA;AAClB;;;;;;;;;;;"}
@@ -0,0 +1,13 @@
1
+ import { SectionSeparator, FormatOptions } from './formatter';
2
+ export declare const DEFAULT_CHARACTER_ENCODING = "utf8";
3
+ export declare const LIBRARY_NAME = "riotprompt";
4
+ export declare const DEFAULT_PERSONA_ROLE = "developer";
5
+ export declare const DEFAULT_INSTRUCTIONS_AREA_TITLE = "Instructions";
6
+ export declare const DEFAULT_CONTENTS_AREA_TITLE = "Contents";
7
+ export declare const DEFAULT_CONTEXT_AREA_TITLE = "Context";
8
+ export declare const DEFAULT_IGNORE_PATTERNS: string[];
9
+ export declare const DEFAULT_SECTION_SEPARATOR: SectionSeparator;
10
+ export declare const DEFAULT_SECTION_INDENTATION = true;
11
+ export declare const DEFAULT_SECTION_TAG = "section";
12
+ export declare const DEFAULT_SECTION_TITLE_PROPERTY = "title";
13
+ export declare const DEFAULT_FORMAT_OPTIONS: FormatOptions;
@@ -0,0 +1,23 @@
1
+ const DEFAULT_CHARACTER_ENCODING = "utf8";
2
+ const LIBRARY_NAME = "riotprompt";
3
+ const DEFAULT_PERSONA_ROLE = "developer";
4
+ const DEFAULT_IGNORE_PATTERNS = [
5
+ "^\\..*",
6
+ "\\.(jpg|jpeg|png|gif|bmp|svg|webp|ico)$",
7
+ "\\.(mp3|wav|ogg|aac|flac)$",
8
+ "\\.(mp4|mov|avi|mkv|webm)$",
9
+ "\\.(pdf|doc|docx|xls|xlsx|ppt|pptx)$",
10
+ "\\.(zip|tar|gz|rar|7z)$" // Compressed files
11
+ ];
12
+ const DEFAULT_SECTION_SEPARATOR = "tag";
13
+ const DEFAULT_SECTION_INDENTATION = true;
14
+ const DEFAULT_SECTION_TITLE_PROPERTY = "title";
15
+ const DEFAULT_FORMAT_OPTIONS = {
16
+ sectionSeparator: DEFAULT_SECTION_SEPARATOR,
17
+ sectionIndentation: DEFAULT_SECTION_INDENTATION,
18
+ sectionTitleProperty: DEFAULT_SECTION_TITLE_PROPERTY,
19
+ sectionDepth: 0
20
+ };
21
+
22
+ export { DEFAULT_CHARACTER_ENCODING, DEFAULT_FORMAT_OPTIONS, DEFAULT_IGNORE_PATTERNS, DEFAULT_PERSONA_ROLE, DEFAULT_SECTION_INDENTATION, DEFAULT_SECTION_SEPARATOR, DEFAULT_SECTION_TITLE_PROPERTY, LIBRARY_NAME };
23
+ //# sourceMappingURL=constants.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.js","sources":["../src/constants.ts"],"sourcesContent":["import { SectionSeparator } from \"formatter\";\n\nimport { FormatOptions } from \"formatter\";\n\nexport const DEFAULT_CHARACTER_ENCODING = \"utf8\";\nexport const LIBRARY_NAME = \"riotprompt\";\n\nexport const DEFAULT_PERSONA_ROLE = \"developer\";\n\nexport const DEFAULT_INSTRUCTIONS_AREA_TITLE = \"Instructions\";\nexport const DEFAULT_CONTENTS_AREA_TITLE = \"Contents\";\nexport const DEFAULT_CONTEXT_AREA_TITLE = \"Context\";\n\nexport const DEFAULT_IGNORE_PATTERNS: string[] = [\n \"^\\\\..*\", // Hidden files (e.g., .git, .DS_Store)\n \"\\\\.(jpg|jpeg|png|gif|bmp|svg|webp|ico)$\", // Image files\n \"\\\\.(mp3|wav|ogg|aac|flac)$\", // Audio files\n \"\\\\.(mp4|mov|avi|mkv|webm)$\", // Video files\n \"\\\\.(pdf|doc|docx|xls|xlsx|ppt|pptx)$\", // Document files\n \"\\\\.(zip|tar|gz|rar|7z)$\" // Compressed files\n];\n\nexport const DEFAULT_SECTION_SEPARATOR: SectionSeparator = \"tag\";\nexport const DEFAULT_SECTION_INDENTATION = true;\nexport const DEFAULT_SECTION_TAG = \"section\";\nexport const DEFAULT_SECTION_TITLE_PROPERTY = \"title\";\n\nexport const DEFAULT_FORMAT_OPTIONS: FormatOptions = {\n sectionSeparator: DEFAULT_SECTION_SEPARATOR,\n sectionIndentation: DEFAULT_SECTION_INDENTATION,\n sectionTitleProperty: DEFAULT_SECTION_TITLE_PROPERTY,\n sectionDepth: 0,\n}\n"],"names":["DEFAULT_CHARACTER_ENCODING","LIBRARY_NAME","DEFAULT_PERSONA_ROLE","DEFAULT_IGNORE_PATTERNS","DEFAULT_SECTION_SEPARATOR","DEFAULT_SECTION_INDENTATION","DEFAULT_SECTION_TITLE_PROPERTY","DEFAULT_FORMAT_OPTIONS","sectionSeparator","sectionIndentation","sectionTitleProperty","sectionDepth"],"mappings":"AAIO,MAAMA,6BAA6B;AACnC,MAAMC,eAAe;AAErB,MAAMC,uBAAuB;MAMvBC,uBAAoC,GAAA;AAC7C,IAAA,QAAA;AACA,IAAA,yCAAA;AACA,IAAA,4BAAA;AACA,IAAA,4BAAA;AACA,IAAA,sCAAA;AACA,IAAA,yBAAA;;AAGG,MAAMC,4BAA8C;AACpD,MAAMC,8BAA8B;AAEpC,MAAMC,iCAAiC;MAEjCC,sBAAwC,GAAA;IACjDC,gBAAkBJ,EAAAA,yBAAAA;IAClBK,kBAAoBJ,EAAAA,2BAAAA;IACpBK,oBAAsBJ,EAAAA,8BAAAA;IACtBK,YAAc,EAAA;AAClB;;;;"}
@@ -0,0 +1,139 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
4
+
5
+ const zod = require('zod');
6
+ const chat = require('./chat.cjs');
7
+ const constants = require('./constants.cjs');
8
+ const logger = require('./logger.cjs');
9
+ const general = require('./util/general.cjs');
10
+
11
+ const SectionSeparatorSchema = zod.z.enum([
12
+ "tag",
13
+ "markdown"
14
+ ]);
15
+ const SectionTitlePropertySchema = zod.z.enum([
16
+ "title",
17
+ "name"
18
+ ]);
19
+ const FormatOptionsSchema = zod.z.object({
20
+ sectionSeparator: SectionSeparatorSchema,
21
+ sectionIndentation: zod.z.boolean(),
22
+ sectionTitleProperty: SectionTitlePropertySchema,
23
+ sectionTitlePrefix: zod.z.string().optional(),
24
+ sectionTitleSeparator: zod.z.string().optional(),
25
+ sectionDepth: zod.z.number().default(1)
26
+ });
27
+ const OptionSchema = zod.z.object({
28
+ logger: zod.z.any().optional().default(logger.DEFAULT_LOGGER),
29
+ formatOptions: FormatOptionsSchema.partial().optional().default(constants.DEFAULT_FORMAT_OPTIONS)
30
+ });
31
+ // Type guard to check if an object is a Section
32
+ function isSection(obj) {
33
+ return obj && typeof obj === 'object' && 'items' in obj && Array.isArray(obj.items);
34
+ }
35
+ // Type guard to check if an object is a Section
36
+ function isWeighted(obj) {
37
+ return obj && typeof obj === 'object' && 'text' in obj;
38
+ }
39
+ const create = (formatterOptions)=>{
40
+ const options = OptionSchema.parse(formatterOptions || {});
41
+ const logger$1 = logger.wrapLogger(options.logger, 'Formatter');
42
+ let formatOptions = constants.DEFAULT_FORMAT_OPTIONS;
43
+ if (options === null || options === void 0 ? void 0 : options.formatOptions) {
44
+ formatOptions = {
45
+ ...formatOptions,
46
+ ...general.clean(options.formatOptions)
47
+ };
48
+ }
49
+ const formatPersona = (model, persona)=>{
50
+ logger$1.silly(`Formatting persona`);
51
+ if (persona) {
52
+ const formattedPersona = formatSection(persona);
53
+ return {
54
+ role: chat.getPersonaRole(model),
55
+ content: `${formattedPersona}`
56
+ };
57
+ } else {
58
+ throw new Error("Persona is required");
59
+ }
60
+ };
61
+ const format = (item, sectionDepth)=>{
62
+ logger$1.silly(`Formatting ${isSection(item) ? "section" : "item"} Item: %s`, general.stringifyJSON(item));
63
+ const currentSectionDepth = sectionDepth !== null && sectionDepth !== void 0 ? sectionDepth : formatOptions.sectionDepth;
64
+ logger$1.silly(`\t\tCurrent section depth: ${currentSectionDepth}`);
65
+ let result = "";
66
+ if (isSection(item)) {
67
+ result = formatSection(item, currentSectionDepth + 1);
68
+ } else if (isWeighted(item)) {
69
+ result = item.text;
70
+ } else {
71
+ //If the item is neither a section nor a weighted item, it is empty.
72
+ result = '';
73
+ }
74
+ return result;
75
+ };
76
+ const formatSection = (section, sectionDepth)=>{
77
+ logger$1.silly(`Formatting section`);
78
+ const currentSectionDepth = sectionDepth !== null && sectionDepth !== void 0 ? sectionDepth : formatOptions.sectionDepth;
79
+ logger$1.silly(`\t\tCurrent section depth: ${currentSectionDepth}`);
80
+ if (section) {
81
+ const formattedItems = section.items.map((item)=>format(item, currentSectionDepth)).join("\n\n");
82
+ if (formatOptions.sectionSeparator === "tag") {
83
+ var _section_title, _section_title1;
84
+ return `<${(_section_title = section.title) !== null && _section_title !== void 0 ? _section_title : "section"}>\n${formattedItems}\n</${(_section_title1 = section.title) !== null && _section_title1 !== void 0 ? _section_title1 : "section"}>`;
85
+ } else {
86
+ // Default depth to 1 if not provided, resulting in H2 (##) matching the test case.
87
+ const headingLevel = currentSectionDepth;
88
+ const hashes = '#'.repeat(headingLevel);
89
+ logger$1.silly(`\t\tHeading level: ${headingLevel}`);
90
+ logger$1.silly(`\t\tSection title: ${section.title}`);
91
+ return `${hashes} ${formatOptions.sectionTitlePrefix ? `${formatOptions.sectionTitlePrefix} ${formatOptions.sectionTitleSeparator} ` : ""}${section.title}\n\n${formattedItems}`;
92
+ }
93
+ } else {
94
+ return '';
95
+ }
96
+ };
97
+ // Helper function to format arrays of items or sections
98
+ const formatArray = (items, sectionDepth)=>{
99
+ logger$1.silly(`Formatting array`);
100
+ const currentSectionDepth = sectionDepth !== null && sectionDepth !== void 0 ? sectionDepth : formatOptions.sectionDepth;
101
+ return items.map((item)=>format(item, currentSectionDepth)).join("\n\n");
102
+ };
103
+ const formatPrompt = (model, prompt)=>{
104
+ logger$1.silly('Formatting prompt');
105
+ const chatRequest = chat.createRequest(model);
106
+ if (prompt.persona) {
107
+ [
108
+ prompt.persona
109
+ ].forEach((persona)=>{
110
+ chatRequest.addMessage(formatPersona(model, persona));
111
+ });
112
+ }
113
+ let formattedAreas = formatSection(prompt.instructions) + '\n\n';
114
+ if (prompt.contents) {
115
+ formattedAreas += formatSection(prompt.contents) + '\n\n';
116
+ }
117
+ if (prompt.contexts) {
118
+ formattedAreas += formatSection(prompt.contexts) + '\n\n';
119
+ }
120
+ chatRequest.addMessage({
121
+ role: "user",
122
+ content: formattedAreas
123
+ });
124
+ return chatRequest;
125
+ };
126
+ return {
127
+ formatPersona,
128
+ format,
129
+ formatPrompt,
130
+ formatArray
131
+ };
132
+ };
133
+
134
+ exports.FormatOptionsSchema = FormatOptionsSchema;
135
+ exports.OptionSchema = OptionSchema;
136
+ exports.SectionSeparatorSchema = SectionSeparatorSchema;
137
+ exports.SectionTitlePropertySchema = SectionTitlePropertySchema;
138
+ exports.create = create;
139
+ //# sourceMappingURL=formatter.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"formatter.cjs","sources":["../src/formatter.ts"],"sourcesContent":["import { Instruction } from \"riotprompt\";\nimport { z } from \"zod\";\nimport * as Chat from \"./chat\";\nimport { getPersonaRole, Message, Model } from \"./chat\";\nimport { DEFAULT_FORMAT_OPTIONS } from \"./constants\";\nimport { Section } from \"./items/section\";\nimport { Weighted } from \"./items/weighted\";\nimport { DEFAULT_LOGGER, wrapLogger } from \"./logger\";\nimport { Prompt } from \"./prompt\";\nimport { clean, stringifyJSON } from \"./util/general\";\n\nexport const SectionSeparatorSchema = z.enum([\"tag\", \"markdown\"]);\nexport const SectionTitlePropertySchema = z.enum([\"title\", \"name\"]);\n\nexport type SectionSeparator = z.infer<typeof SectionSeparatorSchema>;\nexport type SectionTitleProperty = z.infer<typeof SectionTitlePropertySchema>;\n\n\nexport const FormatOptionsSchema = z.object({\n sectionSeparator: SectionSeparatorSchema,\n sectionIndentation: z.boolean(),\n sectionTitleProperty: SectionTitlePropertySchema,\n sectionTitlePrefix: z.string().optional(),\n sectionTitleSeparator: z.string().optional(),\n sectionDepth: z.number().default(1),\n});\n\nexport type FormatOptions = z.infer<typeof FormatOptionsSchema>;\n\n\nexport const OptionSchema = z.object({\n logger: z.any().optional().default(DEFAULT_LOGGER),\n formatOptions: FormatOptionsSchema.partial().optional().default(DEFAULT_FORMAT_OPTIONS),\n});\n\nexport type Options = z.infer<typeof OptionSchema>;\n\nexport type OptionsParam = Partial<Options>;\n\nexport interface Instance {\n formatPersona: (model: Model, persona: Section<Instruction>) => Message;\n format: <T extends Weighted>(weightedText: T | Section<T>, sectionDepth?: number) => string;\n formatArray: <T extends Weighted>(items: (T | Section<T>)[], sectionDepth?: number) => string;\n formatPrompt: (model: Model, prompt: Prompt) => Chat.Request;\n}\n\n// Type guard to check if an object is a Section\nfunction isSection<T extends Weighted>(obj: T | Section<T>): obj is Section<T> {\n return obj && typeof obj === 'object' && 'items' in obj && Array.isArray((obj as Section<T>).items);\n}\n\n// Type guard to check if an object is a Section\nfunction isWeighted<T extends Weighted>(obj: T | Section<T>): obj is T {\n return obj && typeof obj === 'object' && 'text' in obj;\n}\n\n\nexport const create = (formatterOptions?: OptionsParam): Instance => {\n const options: Required<Options> = OptionSchema.parse(formatterOptions || {}) as Required<Options>;\n\n const logger = wrapLogger(options.logger, 'Formatter');\n\n let formatOptions: FormatOptions = DEFAULT_FORMAT_OPTIONS;\n if (options?.formatOptions) {\n formatOptions = {\n ...formatOptions,\n ...clean(options.formatOptions),\n };\n }\n\n const formatPersona = (model: Model, persona: Section<Instruction>): Message => {\n logger.silly(`Formatting persona`);\n if (persona) {\n const formattedPersona = formatSection(persona);\n\n return {\n role: getPersonaRole(model),\n content: `${formattedPersona}`,\n }\n } else {\n throw new Error(\"Persona is required\");\n }\n }\n\n const format = <T extends Weighted>(\n item: T | Section<T>,\n sectionDepth?: number,\n ): string => {\n logger.silly(`Formatting ${isSection(item) ? \"section\" : \"item\"} Item: %s`, stringifyJSON(item));\n const currentSectionDepth = sectionDepth ?? formatOptions.sectionDepth;\n logger.silly(`\\t\\tCurrent section depth: ${currentSectionDepth}`);\n\n let result: string = \"\";\n if (isSection(item)) {\n result = formatSection(item, currentSectionDepth + 1);\n } else if (isWeighted(item)) {\n result = item.text;\n } else {\n //If the item is neither a section nor a weighted item, it is empty.\n result = '';\n }\n return result;\n }\n\n const formatSection = <T extends Weighted>(section: Section<T>, sectionDepth?: number): string => {\n logger.silly(`Formatting section`);\n const currentSectionDepth = sectionDepth ?? formatOptions.sectionDepth;\n logger.silly(`\\t\\tCurrent section depth: ${currentSectionDepth}`);\n\n if (section) {\n const formattedItems = section.items.map(item => format(item, currentSectionDepth)).join(\"\\n\\n\");\n\n if (formatOptions.sectionSeparator === \"tag\") {\n return `<${section.title ?? \"section\"}>\\n${formattedItems}\\n</${section.title ?? \"section\"}>`;\n } else {\n // Default depth to 1 if not provided, resulting in H2 (##) matching the test case.\n const headingLevel = currentSectionDepth;\n const hashes = '#'.repeat(headingLevel);\n logger.silly(`\\t\\tHeading level: ${headingLevel}`);\n logger.silly(`\\t\\tSection title: ${section.title}`);\n return `${hashes} ${formatOptions.sectionTitlePrefix ? `${formatOptions.sectionTitlePrefix} ${formatOptions.sectionTitleSeparator} ` : \"\"}${section.title}\\n\\n${formattedItems}`;\n }\n } else {\n return '';\n }\n }\n\n // Helper function to format arrays of items or sections\n const formatArray = <T extends Weighted>(\n items: (T | Section<T>)[],\n sectionDepth?: number\n ): string => {\n logger.silly(`Formatting array`);\n const currentSectionDepth = sectionDepth ?? formatOptions.sectionDepth;\n return items.map(item => format(item, currentSectionDepth)).join(\"\\n\\n\");\n }\n\n const formatPrompt = (model: Model, prompt: Prompt): Chat.Request => {\n logger.silly('Formatting prompt');\n const chatRequest: Chat.Request = Chat.createRequest(model);\n\n if (prompt.persona) {\n [prompt.persona].forEach((persona: Section<Instruction>) => {\n chatRequest.addMessage(formatPersona(model, persona));\n });\n }\n\n let formattedAreas: string = formatSection(prompt.instructions) + '\\n\\n';\n\n if (prompt.contents) {\n formattedAreas += formatSection(prompt.contents) + '\\n\\n';\n }\n\n if (prompt.contexts) {\n formattedAreas += formatSection(prompt.contexts) + '\\n\\n';\n }\n\n chatRequest.addMessage({\n role: \"user\",\n content: formattedAreas,\n });\n\n return chatRequest;\n }\n\n return {\n formatPersona,\n format,\n formatPrompt,\n formatArray,\n }\n}\n"],"names":["SectionSeparatorSchema","z","enum","SectionTitlePropertySchema","FormatOptionsSchema","object","sectionSeparator","sectionIndentation","boolean","sectionTitleProperty","sectionTitlePrefix","string","optional","sectionTitleSeparator","sectionDepth","number","default","OptionSchema","logger","any","DEFAULT_LOGGER","formatOptions","partial","DEFAULT_FORMAT_OPTIONS","isSection","obj","Array","isArray","items","isWeighted","create","formatterOptions","options","parse","wrapLogger","clean","formatPersona","model","persona","silly","formattedPersona","formatSection","role","getPersonaRole","content","Error","format","item","stringifyJSON","currentSectionDepth","result","text","section","formattedItems","map","join","title","headingLevel","hashes","repeat","formatArray","formatPrompt","prompt","chatRequest","Chat","forEach","addMessage","formattedAreas","instructions","contents","contexts"],"mappings":"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"}