@riotprompt/riotprompt 0.0.12 → 0.0.14

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 (61) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +136 -33
  3. package/dist/builder.js +3 -0
  4. package/dist/builder.js.map +1 -1
  5. package/dist/chat.d.ts +2 -0
  6. package/dist/chat.js +2 -0
  7. package/dist/chat.js.map +1 -1
  8. package/dist/cli.cjs +1617 -0
  9. package/dist/cli.d.ts +8 -0
  10. package/dist/config.d.ts +7 -0
  11. package/dist/conversation-logger.js +6 -1
  12. package/dist/conversation-logger.js.map +1 -1
  13. package/dist/execution/anthropic.d.ts +5 -0
  14. package/dist/execution/anthropic.js +70 -0
  15. package/dist/execution/anthropic.js.map +1 -0
  16. package/dist/execution/gemini.d.ts +5 -0
  17. package/dist/execution/gemini.js +122 -0
  18. package/dist/execution/gemini.js.map +1 -0
  19. package/dist/execution/index.d.ts +10 -0
  20. package/dist/execution/index.js +53 -0
  21. package/dist/execution/index.js.map +1 -0
  22. package/dist/execution/openai.d.ts +5 -0
  23. package/dist/execution/openai.js +45 -0
  24. package/dist/execution/openai.js.map +1 -0
  25. package/dist/execution/provider.d.ts +18 -0
  26. package/dist/formatter.js +42 -14
  27. package/dist/formatter.js.map +1 -1
  28. package/dist/loader.js +3 -0
  29. package/dist/loader.js.map +1 -1
  30. package/dist/model-config.d.ts +1 -0
  31. package/dist/model-config.js +19 -18
  32. package/dist/model-config.js.map +1 -1
  33. package/dist/override.js +3 -0
  34. package/dist/override.js.map +1 -1
  35. package/dist/prompt.d.ts +19 -1
  36. package/dist/prompt.js +11 -2
  37. package/dist/prompt.js.map +1 -1
  38. package/dist/recipes.d.ts +108 -0
  39. package/dist/recipes.js +198 -30
  40. package/dist/recipes.js.map +1 -1
  41. package/dist/riotprompt.cjs +930 -123
  42. package/dist/riotprompt.cjs.map +1 -1
  43. package/dist/riotprompt.d.ts +3 -0
  44. package/dist/riotprompt.js +6 -0
  45. package/dist/riotprompt.js.map +1 -1
  46. package/dist/serializer.d.ts +5 -0
  47. package/dist/serializer.js +220 -0
  48. package/dist/serializer.js.map +1 -0
  49. package/dist/writer.d.ts +2 -0
  50. package/dist/writer.js +91 -0
  51. package/dist/writer.js.map +1 -0
  52. package/guide/architecture.md +51 -0
  53. package/guide/configuration.md +51 -0
  54. package/guide/development.md +62 -0
  55. package/guide/index.md +55 -0
  56. package/guide/usage.md +99 -0
  57. package/package.json +15 -3
  58. package/vite.config.cli.ts +49 -0
  59. package/BUG-ANALYSIS.md +0 -523
  60. package/CODE-REVIEW-SUMMARY.md +0 -330
  61. package/FIXES-APPLIED.md +0 -437
package/LICENSE CHANGED
@@ -175,7 +175,7 @@
175
175
 
176
176
  END OF TERMS AND CONDITIONS
177
177
 
178
- Copyright 2025 St. Just Reckoning
178
+ Copyright 2025 Tim O'Brien
179
179
 
180
180
  Licensed under the Apache License, Version 2.0 (the "License");
181
181
  you may not use this file except in compliance with the License.
package/README.md CHANGED
@@ -1,36 +1,142 @@
1
- # 🔥 RiotPrompt
1
+ # RiotPrompt
2
2
 
3
- A powerful, flexible prompt building library for AI applications with zero hardcoded assumptions.
3
+ A powerful, flexible prompt building library and CLI tool for AI applications with zero hardcoded assumptions.
4
4
 
5
- ## 🎯 Features
5
+ ## Features
6
6
 
7
- - **Generic & Extensible**: No hardcoded domain concepts - build any type of prompt
8
- - **Template System**: Create reusable templates for common patterns
9
- - **Declarative Configuration**: Simple object-based prompt creation
10
- - **Type-Safe**: Full TypeScript support with excellent IntelliSense
11
- - **Override System**: Customize prompts with hierarchical overrides
12
- - **Multiple Content Types**: Support for files, directories, and inline content
7
+ - **Structured Prompts**: Treat prompts as code with specialized sections for Persona, Instructions, Context, and more.
8
+ - **Advanced Prompt Strategies**: First-class support for **Constraints**, **Tone**, **Few-Shot Examples**, **Reasoning Steps**, **Response Format**, and **Safeguards**.
9
+ - **Model Alignment**: Automatically adapts prompt structure to match the specific expectations of each model provider:
10
+ - **Anthropic (Claude)**: Places Personas, Roles, Tone, and Constraints into the `system` parameter. Additionally, converts `schema` definitions into forced **Tool Use** calls, extracting structured results to match OpenAI's output format.
11
+ - **OpenAI**: Maps generic roles to the appropriate `system` or `developer` (for O-series) messages.
12
+ - **Gemini**: Structurally adapts components into System Instructions and content parts. For structured outputs, it automatically transforms JSON schemas into Gemini's `responseSchema` format, ensuring strict adherence to the defined structure.
13
+ - **CLI Tool**: Scaffold, manage, process, and **execute** prompts directly from the terminal.
14
+ - **Model Agnostic**: Format prompts for different models (GPT-4, Claude, Gemini, etc.) automatically.
15
+ - **Execution Engine**: Run prompts against OpenAI, Anthropic, or Gemini APIs directly.
16
+ - **Portable**: Serialize prompts to JSON or XML for easy exchange between systems.
17
+ - **Type-Safe**: Full TypeScript support with excellent IntelliSense.
13
18
 
14
- ## 🚀 Quick Start
19
+ ## Installation
20
+
21
+ ```bash
22
+ npm install riotprompt
23
+ ```
24
+
25
+ ## CLI Usage
26
+
27
+ RiotPrompt comes with a command-line interface to help you organize, process, and execute prompts.
28
+
29
+ ### 1. Create a Prompt
30
+
31
+ Scaffold a new prompt directory structure:
32
+
33
+ ```bash
34
+ # Create a new prompt in 'my-prompt' directory
35
+ npx riotprompt create my-prompt --persona "You are a data expert."
36
+
37
+ # Import an existing prompt from JSON or XML
38
+ npx riotprompt create my-prompt --import existing-prompt.json
39
+ ```
40
+
41
+ This creates a structured directory:
42
+ ```
43
+ my-prompt/
44
+ ├── persona.md # System prompt / Persona definition
45
+ ├── instructions.md # Main task instructions
46
+ └── context/ # Directory for reference files (data.json, docs.md)
47
+ ```
48
+
49
+ ### 2. Process a Prompt
50
+
51
+ Compile a prompt directory (or file) into a formatted payload for an LLM, or export it to other formats.
52
+
53
+ ```bash
54
+ # Format for GPT-4 (output to console)
55
+ npx riotprompt process my-prompt -m gpt-4
56
+
57
+ # Export to JSON (useful for API integrations)
58
+ npx riotprompt process my-prompt --format json --output prompt.json
59
+
60
+ # Export to XML
61
+ npx riotprompt process my-prompt --format xml --output prompt.xml
62
+ ```
63
+
64
+ ### 3. Execute a Prompt
65
+
66
+ Run the prompt directly against an LLM provider.
67
+
68
+ #### Provider Setup & API Keys
69
+
70
+ RiotPrompt supports multiple LLM providers. You'll need to obtain an API key for the provider you wish to use and set it as an environment variable (recommended) or pass it via the `-k` flag.
71
+
72
+ ##### Google Gemini
73
+ 1. **Get API Key**: Visit [Google AI Studio](https://aistudio.google.com/), sign in, and click "Get API key".
74
+ 2. **Set Environment Variable**: `GEMINI_API_KEY`
75
+ 3. **Available Models**: Check the [Gemini models documentation](https://ai.google.dev/models/gemini). Common models include `gemini-1.5-pro`, `gemini-1.5-flash`.
76
+
77
+ ##### OpenAI
78
+ 1. **Get API Key**: Go to the [OpenAI Platform](https://platform.openai.com/api-keys), sign up/login, and create a new secret key.
79
+ 2. **Set Environment Variable**: `OPENAI_API_KEY`
80
+ 3. **Available Models**: See [OpenAI Models](https://platform.openai.com/docs/models). Common models: `gpt-4o`, `gpt-4-turbo`, `gpt-3.5-turbo`.
81
+
82
+ ##### Anthropic (Claude)
83
+ 1. **Get API Key**: Access the [Anthropic Console](https://console.anthropic.com/settings/keys) and generate an API key.
84
+ 2. **Set Environment Variable**: `ANTHROPIC_API_KEY`
85
+ 3. **Available Models**: View [Claude Models](https://docs.anthropic.com/en/docs/models-overview). Common models: `claude-3-opus-20240229`, `claude-3-sonnet-20240229`.
86
+
87
+ **Example .env file:**
88
+ ```bash
89
+ OPENAI_API_KEY=sk-...
90
+ ANTHROPIC_API_KEY=sk-ant-...
91
+ GEMINI_API_KEY=AIza...
92
+ ```
93
+
94
+ **Commands**:
95
+
96
+ ```bash
97
+ # Run with default model (usually gpt-4)
98
+ npx riotprompt execute my-prompt
99
+
100
+ # Run with specific model
101
+ npx riotprompt execute my-prompt -m claude-3-opus
102
+
103
+ # Run with explicit API key (overrides env)
104
+ npx riotprompt execute my-prompt -m gpt-4 -k sk-proj-...
105
+
106
+ # Control parameters
107
+ npx riotprompt execute my-prompt -t 0.7 --max-tokens 1000
108
+ ```
109
+
110
+ ### Configuration
111
+
112
+ You can configure defaults using a `riotprompt.yaml` file in your project root:
113
+
114
+ ```yaml
115
+ defaultModel: "gpt-4"
116
+ promptsDir: "./prompts"
117
+ outputDir: "./output"
118
+ ```
119
+
120
+ ## Library Usage
121
+
122
+ You can also use RiotPrompt programmatically in your application.
15
123
 
16
124
  ```typescript
17
125
  import { cook, registerTemplates } from 'riotprompt';
18
126
 
19
- // Simple prompt creation
127
+ // Advanced prompt creation
128
+ import { z } from "zod";
129
+
20
130
  const prompt = await cook({
21
131
  basePath: __dirname,
22
132
  persona: { content: 'You are a helpful AI assistant' },
23
- instructions: [
24
- { content: 'Analyze the provided content carefully' },
25
- { path: 'instructions/guidelines.md' },
26
- ],
27
- content: [
28
- { content: sourceData, title: 'Source Data', weight: 1.0 },
29
- { directories: ['examples/'], weight: 0.5 },
30
- ],
31
- context: [
32
- { content: 'Additional context', title: 'Context' },
33
- ],
133
+ // ...
134
+ // Structured Output with Zod
135
+ schema: z.object({
136
+ summary: z.string(),
137
+ tags: z.array(z.string()),
138
+ confidence: z.number().min(0).max(1)
139
+ })
34
140
  });
35
141
 
36
142
  // Register and use templates
@@ -48,24 +154,21 @@ const analysisPrompt = await cook({
48
154
  });
49
155
  ```
50
156
 
51
- ## 📚 Documentation
157
+ ## Documentation
52
158
 
159
+ Full documentation is available at [https://tobrien.github.io/riotprompt/](https://tobrien.github.io/riotprompt/).
160
+
161
+ You can also explore the guides in the source:
53
162
  - [Core Concepts](docs/public/core-concepts.md)
54
163
  - [Recipes System](docs/public/recipes.md)
55
164
  - [API Reference](docs/public/api-reference.md)
56
165
  - [Template Configuration](docs/public/template-configuration.md)
57
166
 
58
- ## 🔧 Installation
59
-
60
- ```bash
61
- npm install riotprompt
62
- ```
63
-
64
- ## 💡 Philosophy
167
+ ## Philosophy
65
168
 
66
169
  RiotPrompt is designed to be completely generic and unopinionated. Unlike other prompt libraries that assume specific use cases, RiotPrompt provides the building blocks for any prompt-based application while maintaining type safety and developer experience.
67
170
 
68
- ## 🏗️ Architecture
171
+ ## Architecture
69
172
 
70
173
  - **Cook Function**: Core prompt creation engine
71
174
  - **Template System**: Reusable configuration patterns
@@ -73,11 +176,11 @@ RiotPrompt is designed to be completely generic and unopinionated. Unlike other
73
176
  - **Override System**: Hierarchical customization
74
177
  - **Type Safety**: Full TypeScript support throughout
75
178
 
76
- ## 🤝 Contributing
179
+ ## Contributing
77
180
 
78
181
  Contributions are welcome! Please see our [Contributing Guide](CONTRIBUTING.md) for details.
79
182
 
80
- ## 📄 License
183
+ ## License
81
184
 
82
185
  Apache-2.0 License - see [LICENSE](LICENSE) for details.
83
186
 
package/dist/builder.js CHANGED
@@ -13,6 +13,9 @@ import './recipes.js';
13
13
  import './conversation.js';
14
14
  import 'tiktoken';
15
15
  import './tools.js';
16
+ import 'openai';
17
+ import '@anthropic-ai/sdk';
18
+ import '@google/generative-ai';
16
19
 
17
20
  const OptionSchema = z.object({
18
21
  logger: z.any().optional().default(DEFAULT_LOGGER),
@@ -1 +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 overridePaths: z.array(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, configDirs: options.overridePaths || [\"./\"],\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> = await 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> = await 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","overridePaths","array","overrides","boolean","parameters","ParametersSchema","create","builderOptions","options","parse","wrapLogger","parser","Parser","override","Override","configDirs","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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"}
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 overridePaths: z.array(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, configDirs: options.overridePaths || [\"./\"],\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> = await 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> = await 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","overridePaths","array","overrides","boolean","parameters","ParametersSchema","create","builderOptions","options","parse","wrapLogger","parser","Parser","override","Override","configDirs","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.d.ts CHANGED
@@ -8,6 +8,8 @@ export interface Message {
8
8
  export interface Request {
9
9
  messages: Message[];
10
10
  model: Model;
11
+ responseFormat?: any;
12
+ validator?: any;
11
13
  addMessage(message: Message): void;
12
14
  }
13
15
  export declare const getPersonaRole: (model: Model) => Role;
package/dist/chat.js CHANGED
@@ -8,6 +8,8 @@ const createRequest = (model)=>{
8
8
  return {
9
9
  model,
10
10
  messages,
11
+ responseFormat: undefined,
12
+ validator: undefined,
11
13
  addMessage: (message)=>{
12
14
  messages.push(message);
13
15
  }
package/dist/chat.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"chat.js","sources":["../src/chat.ts"],"sourcesContent":["import { getPersonaRole as getPersonaRoleFromRegistry } from \"./model-config\";\n\nexport type Role = \"user\" | \"assistant\" | \"system\" | \"developer\";\n\n// Model is now a flexible string type\nexport type Model = string;\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 return getPersonaRoleFromRegistry(model);\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","getPersonaRoleFromRegistry","createRequest","messages","addMessage","message","push"],"mappings":";;AAoBO,MAAMA,iBAAiB,CAACC,KAAAA,GAAAA;AAC3B,IAAA,OAAOC,gBAAAA,CAA2BD,KAAAA,CAAAA;AACtC;AAEO,MAAME,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,QAAA;AACJ,KAAA;AACJ;;;;"}
1
+ {"version":3,"file":"chat.js","sources":["../src/chat.ts"],"sourcesContent":["import { getPersonaRole as getPersonaRoleFromRegistry } from \"./model-config\";\n\nexport type Role = \"user\" | \"assistant\" | \"system\" | \"developer\";\n\n// Model is now a flexible string type\nexport type Model = string;\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 responseFormat?: any; // Generic to support different provider formats (JSON schema, etc.)\n validator?: any; // Zod schema for validation\n\n addMessage(message: Message): void;\n}\n\nexport const getPersonaRole = (model: Model): Role => {\n return getPersonaRoleFromRegistry(model);\n}\n\nexport const createRequest = (model: Model): Request => {\n const messages: Message[] = [];\n\n return {\n model,\n messages,\n responseFormat: undefined,\n validator: undefined,\n addMessage: (message: Message) => {\n messages.push(message);\n }\n }\n}\n"],"names":["getPersonaRole","model","getPersonaRoleFromRegistry","createRequest","messages","responseFormat","undefined","validator","addMessage","message","push"],"mappings":";;AAsBO,MAAMA,iBAAiB,CAACC,KAAAA,GAAAA;AAC3B,IAAA,OAAOC,gBAAAA,CAA2BD,KAAAA,CAAAA;AACtC;AAEO,MAAME,gBAAgB,CAACF,KAAAA,GAAAA;AAC1B,IAAA,MAAMG,WAAsB,EAAE;IAE9B,OAAO;AACHH,QAAAA,KAAAA;AACAG,QAAAA,QAAAA;QACAC,cAAAA,EAAgBC,SAAAA;QAChBC,SAAAA,EAAWD,SAAAA;AACXE,QAAAA,UAAAA,EAAY,CAACC,OAAAA,GAAAA;AACTL,YAAAA,QAAAA,CAASM,IAAI,CAACD,OAAAA,CAAAA;AAClB,QAAA;AACJ,KAAA;AACJ;;;;"}