├── data ├── runs.json ├── tools.ts └── samples.json ├── templates ├── .gitignore.template └── dspyground.config.ts.template ├── src ├── app │ ├── favicon.ico │ ├── prompts │ │ └── page.tsx │ ├── api │ │ ├── prompt │ │ │ └── route.ts │ │ ├── schema │ │ │ └── route.ts │ │ ├── models │ │ │ └── route.ts │ │ ├── metrics-prompt │ │ │ └── route.ts │ │ ├── factory-reset │ │ │ └── route.ts │ │ ├── preferences │ │ │ └── route.ts │ │ ├── runs │ │ │ └── route.ts │ │ ├── chat │ │ │ └── route.ts │ │ ├── transcribe-feedback │ │ │ └── route.ts │ │ ├── sample-groups │ │ │ └── route.ts │ │ └── samples │ │ │ └── route.ts │ ├── layout.tsx │ └── globals.css ├── lib │ ├── utils.ts │ ├── optimizer-types.ts │ ├── config-loader.ts │ └── metrics.ts ├── components │ ├── ui │ │ ├── skeleton.tsx │ │ ├── label.tsx │ │ ├── separator.tsx │ │ ├── collapsible.tsx │ │ ├── textarea.tsx │ │ ├── sonner.tsx │ │ ├── input.tsx │ │ ├── switch.tsx │ │ ├── avatar.tsx │ │ ├── hover-card.tsx │ │ ├── theme-toggle.tsx │ │ ├── badge.tsx │ │ ├── tabs.tsx │ │ ├── tooltip.tsx │ │ ├── button.tsx │ │ ├── alert-dialog.tsx │ │ ├── dialog.tsx │ │ ├── sheet.tsx │ │ ├── input-group.tsx │ │ ├── squares-background.tsx │ │ ├── optimize-live-chart.tsx │ │ ├── select.tsx │ │ ├── prompt-editor-dialog.tsx │ │ ├── dropdown-menu.tsx │ │ ├── metric-prompt-editor-dialog.tsx │ │ └── feedback-dialog.tsx │ ├── sidebar-trigger-button.tsx │ ├── ai-elements │ │ ├── response.tsx │ │ ├── message.tsx │ │ ├── conversation.tsx │ │ ├── code-block.tsx │ │ └── tool.tsx │ └── app-sidebar.tsx └── hooks │ └── use-mobile.ts ├── postcss.config.mjs ├── public ├── vercel.svg ├── window.svg ├── file.svg ├── globe.svg └── next.svg ├── .env.example ├── components.json ├── cli ├── index.ts ├── init.ts └── dev.ts ├── eslint.config.mjs ├── next.config.ts ├── tsconfig.cli.json ├── tsup.config.ts ├── .npmignore ├── tsconfig.json ├── scripts ├── clean-sensitive.mjs └── prepare-standalone.mjs ├── .gitignore └── package.json /data/runs.json: -------------------------------------------------------------------------------- 1 | { 2 | "runs": [] 3 | } -------------------------------------------------------------------------------- /templates/.gitignore.template: -------------------------------------------------------------------------------- 1 | # DSPyGround local data 2 | .dspyground/ 3 | 4 | -------------------------------------------------------------------------------- /src/app/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Scale3-Labs/dspyground/HEAD/src/app/favicon.ico -------------------------------------------------------------------------------- /postcss.config.mjs: -------------------------------------------------------------------------------- 1 | const config = { 2 | plugins: ["@tailwindcss/postcss"], 3 | }; 4 | 5 | export default config; 6 | -------------------------------------------------------------------------------- /public/vercel.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/lib/utils.ts: -------------------------------------------------------------------------------- 1 | import { clsx, type ClassValue } from "clsx" 2 | import { twMerge } from "tailwind-merge" 3 | 4 | export function cn(...inputs: ClassValue[]) { 5 | return twMerge(clsx(inputs)) 6 | } 7 | -------------------------------------------------------------------------------- /src/components/ui/skeleton.tsx: -------------------------------------------------------------------------------- 1 | import { cn } from "@/lib/utils" 2 | 3 | function Skeleton({ className, ...props }: React.ComponentProps<"div">) { 4 | return ( 5 |
10 | ) 11 | } 12 | 13 | export { Skeleton } 14 | -------------------------------------------------------------------------------- /.env.example: -------------------------------------------------------------------------------- 1 | # Required: AI Gateway API key for prompt optimization 2 | AI_GATEWAY_API_KEY=your_ai_gateway_api_key_here 3 | 4 | # Optional: Used only for enabling voice mode evals 5 | OPENAI_API_KEY=your_openai_api_key 6 | OPENAI_BASE_URL=set_this_if_you_are_using_whisper_from_another_provider 7 | 8 | # Optional: Next.js configuration 9 | NEXT_PUBLIC_APP_URL=http://localhost:3000 -------------------------------------------------------------------------------- /src/app/prompts/page.tsx: -------------------------------------------------------------------------------- 1 | export default function PromptsPage() { 2 | return ( 3 |Coming soon...
7 |{description}
61 | )} 62 |