- Notifications
You must be signed in to change notification settings - Fork0
MostUsing/agentmark
Folders and files
Name | Name | Last commit message | Last commit date | |
---|---|---|---|---|
Repository files navigation
Markdown for the AI Era
Develop type-safe prompts and agents using readable Markdown and JSX.
AgentMark supports:
- Markdown: 📝
- Type Safety: 🛡️
- Unified model config: 🔗
- JSX components, props, & plugins: 🧩
- Custom Models: 🛠️
- Streaming: 🌊
- Loops, Conditionals, and Filter Functions: ♻️
- JSON Output: 📦
- Tools & Agents: 🕵️
- Observability: 👀
Read ourdocs to learn more.
Below is a basic example to help you get started with AgentMark:
example.prompt.mdx
---name:basic-promptmetadata:model:name:gpt-4o-minitest_settings:props:num:3---<System>You are a math expert</System><User>What's 2 +{props.num}?</User>
By default, AgentMark doesn't support any model providers. Instead, support must be added through our plugins.Here's a list of currently supported plugins you can start using.
Provider | Model | Supported | @puzzlet/all-models |
---|---|---|---|
OpenAI | gpt-4o | ✅ Supported | ✅ |
OpenAI | gpt-4o-mini | ✅ Supported | ✅ |
OpenAI | gpt-4-turbo | ✅ Supported | ✅ |
OpenAI | gpt-4 | ✅ Supported | ✅ |
OpenAI | o1-mini | ✅ Supported | ✅ |
OpenAI | o1-preview | ✅ Supported | ✅ |
OpenAI | gpt-3.5-turbo | ✅ Supported | ✅ |
Anthropic | claude-3-5-haiku-latest | ✅ Supported | ✅ |
Anthropic | claude-3-5-sonnet-latest | ✅ Supported | ✅ |
Anthropic | claude-3-opus-latest | ✅ Supported | ✅ |
Meta | ALL | ✅ Supported | 🧩 Only |
Custom | any | ✅ Supported | 🧩 Only |
ALL | N/A | ||
Grok | ALL | N/A |
Want to add support for another model? Open anissue.
Refer to ourdocs to learn how to add custom model support.
We plan on providing support for AgentMark across a variety of languages.
Language | Support Status |
---|---|
TypeScript | ✅ Supported |
Others | Need something else?Open an issue |
You can run AgentMark using any of the following methods:
Run .prompt.mdx files directly within your VSCode editor. Note: You can test props by usingtest_settings
in your prompts.
Run AgentMark files from your file system. Below is a sample implementation:
import{ModelPluginRegistry,FileLoader,createTemplateRunner}from"@puzzlet/agentmark";importAllModelPluginsfrom'@puzzlet/all-models';// Register modelsModelPluginRegistry.registerAll(AllModelPlugins);// Create a file loader pointing to your prompts directoryconstfileLoader=newFileLoader("./prompts",createTemplateRunner);construn=async()=>{// Load a prompt, relative to the file loader's rootconstmathPrompt=awaitfileLoader.load("math/addition.prompt.mdx");constprops={num1:5,num2:3}// Run the promptconstresult=awaitmathPrompt.run(props);console.log("Run result:",result.result);// Compile to see the AgentMark configurationconstcompiled=awaitmathPrompt.compile(props);console.log("Compiled configuration:",compiled);// Deserialize to see raw model parameters (i.e. whats sent to the LLM: OpenAI, Anthropic, etc.)constdeserialized=awaitmathPrompt.deserialize(props);console.log("Model parameters:",deserialized);}run();
Puzzlet is a platform for managing, versioning, and monitoring your LLM prompts in production, with built-in observability, evaluations, and prompt management.
import{Puzzlet}from'@puzzlet/sdk';import{ModelPluginRegistry,createTemplateRunner}from"@puzzlet/agentmark";importAllModelPluginsfrom'@puzzlet/all-models';ModelPluginRegistry.registerAll(AllModelPlugins);constpuzzletClient=newPuzzlet({apiKey:process.env.PUZZLET_API_KEY!,appId:process.env.PUZZLET_APP_ID!,},createTemplateRunner);construn=async()=>{// Load prompt from Puzzlet instead of local fileconstprompt=awaitpuzzletClient.fetchPrompt('math/addition.prompt.mdx');// Run the promptconstresult=awaitprompt.run({num1:5,num2:3});console.log("Run result:",result);// Compile the promptconstcompiled=awaitprompt.compile({num1:5,num2:3});console.log("Compiled configuration:",compiled);// Deserialize the promptconstdeserialized=awaitprompt.deserialize({num1:5,num2:3});console.log("Model parameters:",deserialized);}run();
AgentMark & Puzzlet supports automatic type generation from your prompt schemas. Define input (input_schema
) and output (schema
) types in your prompt files:
---name:math-additionmetadata:model:name:gpt-4osettings:schema:type:"object"properties:sum:type:"number"description:"The sum of the two numbers"required:["sum"]input_schema:type:"object"properties:num1:type:"number"description:"First number to add"num2:type:"number"description:"Second number to add"required:["num1", "num2"]---<System>You are a helpful math assistant that performs addition.</System>
Then generate types using the CLI:
# From local filesnpx @puzzlet/cli generate-types --root-dir ./prompts> puzzlet.types.ts# From local Puzzlet servernpx @puzzlet/cli generate-types --local 9002> puzzlet.types.ts
Use the generated types with FileLoader:
importPuzzletTypesfrom'./puzzlet.types';import{FileLoader,createTemplateRunner}from"@puzzlet/agentmark";constfileLoader=newFileLoader<PuzzletTypes>("./prompts",createTemplateRunner);// TypeScript will enforce correct input/output typesconstprompt=awaitfileLoader.load("math/addition.prompt.mdx");constresult=awaitprompt.run({num1:5,// Must be numbernum2:3// Must be number});constsum=result.result.sum;// type-safe number
Or with Puzzlet:
importPuzzletTypesfrom'./puzzlet.types';import{Puzzlet}from'@puzzlet/sdk';constpuzzlet=newPuzzlet<PuzzletTypes>({apiKey:process.env.PUZZLET_API_KEY!,appId:process.env.PUZZLET_APP_ID!,},createTemplateRunner);// Same type safety as FileLoaderconstprompt=awaitpuzzlet.fetchPrompt("math/addition.prompt.mdx");constresult=awaitprompt.run({num1:5,num2:3});constsum=result.result.sum;// type-safe number
AgentMark is also type-safe within markdown files. Read morehere.
We welcome contributions! Please check out ourcontribution guidelines for more information.
Join our community to collaborate, ask questions, and stay updated:
This project is licensed under theMIT License.
About
Markdown for the AI era
Resources
License
Uh oh!
There was an error while loading.Please reload this page.
Stars
Watchers
Forks
Releases
Packages0
Languages
- TypeScript84.6%
- MDX12.3%
- JavaScript3.1%