Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add Markdown and plaintext output systems #929

Merged
merged 5 commits into from
Dec 11, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion docs/src/content/docs/reference/scripts/prompty.md
Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,7 @@ This is what the `basic.prompty` file compiles to:

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The model name has been changed from "azure:gpt-4o" to "openai:gpt-4o". Ensure that the new model is compatible and available in your environment.

generated by pr-docs-review-commit model_change

```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: {
Expand Down
59 changes: 53 additions & 6 deletions docs/src/content/docs/reference/scripts/system.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -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",
})
Expand All @@ -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.`
```
Expand Down Expand Up @@ -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
Expand All @@ -88,9 +104,7 @@ Base system prompt

`````js wrap title="system"
pelikhan marked this conversation as resolved.
Show resolved Hide resolved
system({ title: "Base system prompt" })
$`- You are concise.
- Answer in markdown.
`
$`- You are concise.`

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The markdown syntax for code blocks should be consistent. Use triple backticks (```) instead of ````` to define code blocks.

generated by pr-docs-review-commit markdown_syntax

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The markdown syntax for code blocks should be consistent. Use triple backticks (```) instead of ````` to define code blocks.

generated by pr-docs-review-commit markdown_syntax


`````

Expand Down Expand Up @@ -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`
pelikhan marked this conversation as resolved.
Show resolved Hide resolved
pelikhan marked this conversation as resolved.
Show resolved Hide resolved

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The headings for the new sections should be consistent with the existing headings. Use ## instead of ### for subheadings.

generated by pr-docs-review-commit markdown_heading

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The code snippets within the new sections are not properly formatted. Ensure that each snippet is enclosed in triple backticks (```) and has a language identifier if applicable.

generated by pr-docs-review-commit markdown_code_snippet

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The links within the code snippets should be consistent with the existing documentation. Ensure that all links are properly formatted and accessible.

generated by pr-docs-review-commit markdown_link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The tables within the new sections are not properly formatted. Ensure that each table is enclosed in triple backticks (```) and has a header row if applicable.

generated by pr-docs-review-commit markdown_table

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The lists within the new sections should be consistent with the existing documentation. Ensure that all lists are properly formatted and have proper indentation.

generated by pr-docs-review-commit markdown_list

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The quotes within the code snippets should be consistent with the existing documentation. Ensure that all quotes are properly formatted and do not interfere with the syntax of the code.

generated by pr-docs-review-commit markdown_quote

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The structure of the documentation is inconsistent. The new sections system.output_markdown and system.output_plaintext are not properly formatted and do not follow the existing structure of the document.

generated by pr-docs-review-commit structure_error

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The headings for the new sections should be consistent with the existing headings. Use ## instead of ### for subheadings.

generated by pr-docs-review-commit markdown_heading

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The code snippets within the new sections are not properly formatted. Ensure that each snippet is enclosed in triple backticks (```) and has a language identifier if applicable.

generated by pr-docs-review-commit markdown_code_snippet

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The links within the code snippets should be consistent with the existing documentation. Ensure that all links are properly formatted and accessible.

generated by pr-docs-review-commit markdown_link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The tables within the new sections are not properly formatted. Ensure that each table is enclosed in triple backticks (```) and has a header row if applicable.

generated by pr-docs-review-commit markdown_table

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The lists within the new sections should be consistent with the existing documentation. Ensure that all lists are properly formatted and have proper indentation.

generated by pr-docs-review-commit markdown_list

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The quotes within the code snippets should be consistent with the existing documentation. Ensure that all quotes are properly formatted and do not interfere with the syntax of the code.

generated by pr-docs-review-commit markdown_quote


Instruct to make a plan
Expand Down
22 changes: 19 additions & 3 deletions packages/core/bundleprompts.js
Original file line number Diff line number Diff line change
Expand Up @@ -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",
})
Expand All @@ -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.\`
\`\`\`
Expand Down Expand Up @@ -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
Expand Down
3 changes: 0 additions & 3 deletions packages/core/src/constants.ts
Original file line number Diff line number Diff line change
Expand Up @@ -54,13 +54,12 @@
export const SMALL_MODEL_ID = "small"
export const LARGE_MODEL_ID = "large"
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",

Check failure on line 62 in packages/core/src/constants.ts

View workflow job for this annotation

GitHub Actions / build

The export `DEFAULT_MODEL_CANDIDATES` is unused and can be removed.

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The export DEFAULT_MODEL_CANDIDATES is unused and can be removed.

generated by pr-review-commit unused_export

"anthropic:claude-2.1",
"mistral:mistral-large-latest",
"github:gpt-4o",
Expand All @@ -68,7 +67,6 @@
]
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",
Expand All @@ -77,7 +75,6 @@
]
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",
Expand Down
4 changes: 1 addition & 3 deletions packages/core/src/genaisrc/system.genai.mjs
Original file line number Diff line number Diff line change
@@ -1,4 +1,2 @@
system({ title: "Base system prompt" })
$`- You are concise.
- Answer in markdown.
`
$`- You are concise.`
3 changes: 3 additions & 0 deletions packages/core/src/genaisrc/system.output_markdown.genai.mjs
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
system({ title: "Base system prompt" })
$`## Markdown Output
Respond in Markdown (GitHub Flavored Markdown also supported).`
4 changes: 4 additions & 0 deletions packages/core/src/genaisrc/system.output_plaintext.genai.mjs
Original file line number Diff line number Diff line change
@@ -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.
`
1 change: 0 additions & 1 deletion packages/core/src/mcp.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,9 @@
import { arrayify, logVerbose } from "./util"
import type {
TextContent,
ImageContent,

Check failure on line 5 in packages/core/src/mcp.ts

View workflow job for this annotation

GitHub Actions / build

The import of `YAMLStringify` from "./yaml" is unused and can be removed.
pelikhan marked this conversation as resolved.
Show resolved Hide resolved
pelikhan marked this conversation as resolved.
Show resolved Hide resolved

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The import of YAMLStringify from "./yaml" is unused and can be removed.

generated by pr-review-commit unused_import

EmbeddedResource,
} from "@modelcontextprotocol/sdk/types.js"
import { YAMLStringify } from "./yaml"

export async function startMcpServer(
serverConfig: McpServerConfig,
Expand Down
1 change: 1 addition & 0 deletions packages/core/src/systems.ts
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,8 @@
// Default systems if no responseType is specified
if (!script.responseType) {
systems.push("system")
systems.push("system.output_markdown")
pelikhan marked this conversation as resolved.
Show resolved Hide resolved
systems.push("system.explanations")

Check failure on line 40 in packages/core/src/systems.ts

View workflow job for this annotation

GitHub Actions / build

The push operation for "system.output_markdown" is unnecessary as it's already included in the default systems.

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The push operation for "system.output_markdown" is unnecessary as it's already included in the default systems.

generated by pr-review-commit unnecessary_push

systems.push("system.safety_jailbreak")
systems.push("system.safety_harmful_content")
systems.push("system.safety_protected_material")
Expand Down
9 changes: 9 additions & 0 deletions packages/sample/genaisrc/plaintext.genai.mjs
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
script({
model: "small",
system: ["system", "system.output_plaintext"],
tests: {
keywords: "carrots",
},
})

$`Generate a random recipe with carrots.`
2 changes: 1 addition & 1 deletion packages/sample/src/templates/basic.prompty
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
Loading