diff --git a/docs/src/content/docs/reference/scripts/prompty.md b/docs/src/content/docs/reference/scripts/prompty.md index 79383f515..be80b1380 100644 --- a/docs/src/content/docs/reference/scripts/prompty.md +++ b/docs/src/content/docs/reference/scripts/prompty.md @@ -58,7 +58,7 @@ This is what the `basic.prompty` file compiles to: ```js wrap title="basic.prompty.genai.mts" script({ - model: "azure:gpt-4o", + model: "openai:gpt-4o", title: "Basic Prompt", description: "A basic prompt that uses the chat API to answer questions", parameters: { diff --git a/docs/src/content/docs/reference/scripts/system.mdx b/docs/src/content/docs/reference/scripts/system.mdx index 3b88d7682..8590444c2 100644 --- a/docs/src/content/docs/reference/scripts/system.mdx +++ b/docs/src/content/docs/reference/scripts/system.mdx @@ -12,7 +12,7 @@ System prompts are scripts that are executed and injected before the main prompt - system prompts must use the `system` instead of `script` - system prompts are executed with the same environment as the main prompt -```js title="system.zscot.genai.js" "system" +```js title="system.zero_shot_cot.genai.js" "system" system({ title: "Zero-shot Chain of Thought", }) @@ -22,10 +22,10 @@ $`Let's think step by step.` To use system prompts in script, populate the `system` field with script identifiers. -```js title="myscript.genai.js" 'system: ["system.zscot"]' +```js title="myscript.genai.js" 'system: ["system.zero_shot_cot"]' script({ ..., - system: ["system.zscot"] + system: ["system.zero_shot_cot"] }) $`Let's think step by step.` ``` @@ -73,6 +73,22 @@ script({ ..., }) ``` +## Automated System Prompts + +When unspecified, GenAIScript inspects the source code of the script +to determine a reasonable set of system prompts ([source code](https://github.com/microsoft/genaiscript/blob/main/packages/core/src/systems.ts)). + +The default mix is + +- system +- system.output_markdown +- system.explanations +- system.safety_jailbreak +- system.safety_harmful_content +- system.safety_protected_material + +On top of the default, injects other system scripts based on keyword matching. + ## Builtin System Prompts GenAIScript comes with a number of system prompt that support features like creating files, extracting diffs or @@ -88,9 +104,7 @@ Base system prompt `````js wrap title="system" system({ title: "Base system prompt" }) -$`- You are concise. -- Answer in markdown. -` +$`- You are concise.` ````` @@ -2567,6 +2581,39 @@ defTool( ````` +### `system.output_markdown` + +Base system prompt + + + + + +`````js wrap title="system.output_markdown" +system({ title: "Base system prompt" }) +$`## Markdown Output +Respond in Markdown (GitHub Flavored Markdown also supported).` + +````` + + +### `system.output_plaintext` + +Plain text output + + + + + +`````js wrap title="system.output_plaintext" +system({ title: "Plain text output" }) +$`## Plain Text Output +Respond in plain text. Do not wrap result in Markdown code fences or XML tags. +` + +````` + + ### `system.planner` Instruct to make a plan diff --git a/packages/core/bundleprompts.js b/packages/core/bundleprompts.js index 16b22ab4b..99d2e15ad 100644 --- a/packages/core/bundleprompts.js +++ b/packages/core/bundleprompts.js @@ -135,7 +135,7 @@ System prompts are scripts that are executed and injected before the main prompt - system prompts must use the \`system\` instead of \`script\` - system prompts are executed with the same environment as the main prompt -\`\`\`js title="system.zscot.genai.js" "system" +\`\`\`js title="system.zero_shot_cot.genai.js" "system" system({ title: "Zero-shot Chain of Thought", }) @@ -145,10 +145,10 @@ $\`Let's think step by step.\` To use system prompts in script, populate the \`system\` field with script identifiers. -\`\`\`js title="myscript.genai.js" 'system: ["system.zscot"]' +\`\`\`js title="myscript.genai.js" 'system: ["system.zero_shot_cot"]' script({ ..., - system: ["system.zscot"] + system: ["system.zero_shot_cot"] }) $\`Let's think step by step.\` \`\`\` @@ -196,6 +196,22 @@ script({ ..., }) \`\`\` +## Automated System Prompts + +When unspecified, GenAIScript inspects the source code of the script +to determine a reasonable set of system prompts ([source code](https://github.com/microsoft/genaiscript/blob/main/packages/core/src/systems.ts)). + +The default mix is + +- system +- system.output_markdown +- system.explanations +- system.safety_jailbreak +- system.safety_harmful_content +- system.safety_protected_material + +On top of the default, injects other system scripts based on keyword matching. + ## Builtin System Prompts GenAIScript comes with a number of system prompt that support features like creating files, extracting diffs or diff --git a/packages/core/src/constants.ts b/packages/core/src/constants.ts index 29fc47567..098334ca3 100644 --- a/packages/core/src/constants.ts +++ b/packages/core/src/constants.ts @@ -57,7 +57,6 @@ export const VISION_MODEL_ID = "vision" export const DEFAULT_FENCE_FORMAT: FenceFormat = "xml" export const DEFAULT_MODEL = "openai:gpt-4o" export const DEFAULT_MODEL_CANDIDATES = [ - "azure:gpt-4o", "azure_serverless:gpt-4o", DEFAULT_MODEL, "google:gemini-1.5-pro-latest", @@ -68,7 +67,6 @@ export const DEFAULT_MODEL_CANDIDATES = [ ] export const DEFAULT_VISION_MODEL = "openai:gpt-4o" export const DEFAULT_VISION_MODEL_CANDIDATES = [ - "azure:gpt-4o", "azure_serverless:gpt-4o", DEFAULT_MODEL, "google:gemini-1.5-flash-latest", @@ -77,7 +75,6 @@ export const DEFAULT_VISION_MODEL_CANDIDATES = [ ] export const DEFAULT_SMALL_MODEL = "openai:gpt-4o-mini" export const DEFAULT_SMALL_MODEL_CANDIDATES = [ - "azure:gpt-4o-mini", "azure_serverless:gpt-4o-mini", DEFAULT_SMALL_MODEL, "google:gemini-1.5-flash-latest", diff --git a/packages/core/src/genaisrc/system.genai.mjs b/packages/core/src/genaisrc/system.genai.mjs index 861abc9af..0d2b6532f 100644 --- a/packages/core/src/genaisrc/system.genai.mjs +++ b/packages/core/src/genaisrc/system.genai.mjs @@ -1,4 +1,2 @@ system({ title: "Base system prompt" }) -$`- You are concise. -- Answer in markdown. -` +$`- You are concise.` diff --git a/packages/core/src/genaisrc/system.output_markdown.genai.mjs b/packages/core/src/genaisrc/system.output_markdown.genai.mjs new file mode 100644 index 000000000..d2da20b8f --- /dev/null +++ b/packages/core/src/genaisrc/system.output_markdown.genai.mjs @@ -0,0 +1,3 @@ +system({ title: "Base system prompt" }) +$`## Markdown Output +Respond in Markdown (GitHub Flavored Markdown also supported).` diff --git a/packages/core/src/genaisrc/system.output_plaintext.genai.mjs b/packages/core/src/genaisrc/system.output_plaintext.genai.mjs new file mode 100644 index 000000000..389a7c896 --- /dev/null +++ b/packages/core/src/genaisrc/system.output_plaintext.genai.mjs @@ -0,0 +1,4 @@ +system({ title: "Plain text output" }) +$`## Plain Text Output +Respond in plain text. Do not wrap result in Markdown code fences or XML tags. +` diff --git a/packages/core/src/mcp.ts b/packages/core/src/mcp.ts index 25753f5d1..58563fa4d 100644 --- a/packages/core/src/mcp.ts +++ b/packages/core/src/mcp.ts @@ -5,7 +5,6 @@ import type { ImageContent, EmbeddedResource, } from "@modelcontextprotocol/sdk/types.js" -import { YAMLStringify } from "./yaml" export async function startMcpServer( serverConfig: McpServerConfig, diff --git a/packages/core/src/systems.ts b/packages/core/src/systems.ts index 14acb0981..8bd3ec18f 100644 --- a/packages/core/src/systems.ts +++ b/packages/core/src/systems.ts @@ -36,6 +36,7 @@ export function resolveSystems( // Default systems if no responseType is specified if (!script.responseType) { systems.push("system") + systems.push("system.output_markdown") systems.push("system.explanations") systems.push("system.safety_jailbreak") systems.push("system.safety_harmful_content") diff --git a/packages/sample/genaisrc/plaintext.genai.mjs b/packages/sample/genaisrc/plaintext.genai.mjs new file mode 100644 index 000000000..33a7b6b2f --- /dev/null +++ b/packages/sample/genaisrc/plaintext.genai.mjs @@ -0,0 +1,9 @@ +script({ + model: "small", + system: ["system", "system.output_plaintext"], + tests: { + keywords: "carrots", + }, +}) + +$`Generate a random recipe with carrots.` diff --git a/packages/sample/src/templates/basic.prompty b/packages/sample/src/templates/basic.prompty index 565dfe32f..88f73a7cd 100644 --- a/packages/sample/src/templates/basic.prompty +++ b/packages/sample/src/templates/basic.prompty @@ -5,7 +5,7 @@ model: api: chat configuration: type: azure_openai - azure_deployment: gpt-4o + azure_deployment: gpt-4o_2024-08-06 parameters: max_tokens: 128 temperature: 0.2