-
Notifications
You must be signed in to change notification settings - Fork 12
README.md update. #24
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
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -3,6 +3,7 @@ dspy/ | |
|
|
||
| # Python | ||
| __pycache__/ | ||
| .pytest_cache/ | ||
| *.py[cod] | ||
| *$py.class | ||
| *.so | ||
|
|
||
| Original file line number | Diff line number | Diff line change | ||||||||||||||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
|
@@ -3,67 +3,181 @@ | |||||||||||||||||||||||||||||||||||||||||||
| [](https://cmpnd-ai.github.io/dspy-cli-tool/) | ||||||||||||||||||||||||||||||||||||||||||||
| [](https://pypi.org/project/dspy-cli/) | ||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||
| CLI for deploying DSPy programs as HTTP APIs. Auto-generates endpoints, OpenAPI specs, and Docker configs. | ||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||
| Reduces deployment setup from hours to minutes for developers embedding LLM features in applications. | ||||||||||||||||||||||||||||||||||||||||||||
| `dspy-cli` is a tool for creating, developing, testing, and deploying DSPy programs as HTTP APIs. `dspy-cli` Auto-generates endpoints, OpenAPI specs, and Docker configs. | ||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||
| ## Quick Start | ||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||
| ### Installing & Creating a New Project | ||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||
| To install `dspy-cli`, we recommend using `uv`. | ||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||
| ```bash | ||||||||||||||||||||||||||||||||||||||||||||
| # Install | ||||||||||||||||||||||||||||||||||||||||||||
| uv tool install dspy-cli | ||||||||||||||||||||||||||||||||||||||||||||
| ``` | ||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||
| Running `dspy-cli new` creates a new *project*, which can have many *programs*, each of which performs a specific task. | ||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||
| To illustrate, let's build a project that manages AI-powered functions we might want to call from a [content management system](https://en.wikipedia.org/wiki/Content_management_system) we use to draft, publish, and manage blog posts. We'll call it, "cms-kit". | ||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||
| ```bash | ||||||||||||||||||||||||||||||||||||||||||||
| dspy-cli new cms-kit | ||||||||||||||||||||||||||||||||||||||||||||
| ``` | ||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||
| This command launches an interactive menu that walks you through setting up your first program and connecting to an inference provider. | ||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||
| Here's our answers: | ||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||
| ```bash | ||||||||||||||||||||||||||||||||||||||||||||
| Would you like to specify your first program? [Y/n]: Y | ||||||||||||||||||||||||||||||||||||||||||||
| What is the name of your first DSPy program? [my_program]: summarizer | ||||||||||||||||||||||||||||||||||||||||||||
| ``` | ||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||
| The first program we'll build will write short summaries of our blog posts. We'll call it `summarizer`. | ||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||
| Continuing: | ||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||
| ```bash | ||||||||||||||||||||||||||||||||||||||||||||
| Choose a module type: | ||||||||||||||||||||||||||||||||||||||||||||
| 1. Predict - Basic prediction module (default) | ||||||||||||||||||||||||||||||||||||||||||||
| 2. ChainOfThought (CoT) - Step-by-step reasoning with chain of thought | ||||||||||||||||||||||||||||||||||||||||||||
| 3. ProgramOfThought (PoT) - Generates and executes code for reasoning | ||||||||||||||||||||||||||||||||||||||||||||
| 4. ReAct - Reasoning and acting with tools | ||||||||||||||||||||||||||||||||||||||||||||
| 5. MultiChainComparison - Compare multiple reasoning paths | ||||||||||||||||||||||||||||||||||||||||||||
| 6. Refine - Iterative refinement of outputs | ||||||||||||||||||||||||||||||||||||||||||||
| Enter number or name [1]: 1 | ||||||||||||||||||||||||||||||||||||||||||||
| Enter your signature or type '?' for guided input: | ||||||||||||||||||||||||||||||||||||||||||||
| Examples: 'question -> answer', 'post:str -> tags:list[str], category:str' | ||||||||||||||||||||||||||||||||||||||||||||
| Signature [question:str -> answer:str]: blog_post -> summary | ||||||||||||||||||||||||||||||||||||||||||||
| ``` | ||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||
| Here we're using a basic `Predict` [module](https://dspy.ai/learn/programming/modules/) and specifying our [signature](https://dspy.ai/learn/programming/signatures/) as, `blog_post -> summary`. | ||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||
| Lastly, we'll connect to the model we want to use: | ||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||
| ```bash | ||||||||||||||||||||||||||||||||||||||||||||
| Enter your model (LiteLLM format): | ||||||||||||||||||||||||||||||||||||||||||||
| Examples: 'anthropic/claude-sonnet-4-5', 'openai/gpt-4o', 'ollama/llama2' | ||||||||||||||||||||||||||||||||||||||||||||
| Model [openai/gpt-5-mini]: openai/gpt-5-mini | ||||||||||||||||||||||||||||||||||||||||||||
| Enter your OpenAI API key: | ||||||||||||||||||||||||||||||||||||||||||||
| (This will be stored in .env as OPENAI_API_KEY) | ||||||||||||||||||||||||||||||||||||||||||||
| Press Enter to skip and set it manually later | ||||||||||||||||||||||||||||||||||||||||||||
| OPENAI_API_KEY: your_key_here | ||||||||||||||||||||||||||||||||||||||||||||
| ``` | ||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||
| # Create project | ||||||||||||||||||||||||||||||||||||||||||||
| dspy-cli new blog-tagger -s "post -> tags: list[str]" | ||||||||||||||||||||||||||||||||||||||||||||
| cd blog-tagger | ||||||||||||||||||||||||||||||||||||||||||||
| DSPy uses [LiteLLM](https://www.litellm.ai/) to connect to language models, so we're using a [LiteLLM style string](https://docs.litellm.ai/docs/providers) to call GPT-5-mini. Paste in your OpenAI key, and you're good to go. `dspy-cli` will attempt to detect any API key variables in your local environment and will pre-populate this field if a candidate is found. | ||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||
| # Serve locally | ||||||||||||||||||||||||||||||||||||||||||||
| `dspy-cli` will now create your project structure and define your first program. Let's `cd` into the folder `cms-kit`, activate our environment, and serve our project. | ||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||
| ```bash | ||||||||||||||||||||||||||||||||||||||||||||
| cd cms-kit | ||||||||||||||||||||||||||||||||||||||||||||
| uv sync | ||||||||||||||||||||||||||||||||||||||||||||
| source .venv/bin/activate | ||||||||||||||||||||||||||||||||||||||||||||
| dspy-cli serve | ||||||||||||||||||||||||||||||||||||||||||||
| ``` | ||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||
| Test the endpoint: | ||||||||||||||||||||||||||||||||||||||||||||
| `dspy-cli` will detect the module we've defined, define an endpoint for it, then stand up an HTTP server to call, at `http://localhost:8000` (by default). Visiting that url will let you submit a form to call your program. Or, you can call the API endpoint directly, like so: | ||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||
| ```bash | ||||||||||||||||||||||||||||||||||||||||||||
| curl -X POST http://localhost:8000/BlogTaggerPredict \ | ||||||||||||||||||||||||||||||||||||||||||||
| curl -X POST http://0.0.0.0:8000/SummarizerPredict \ | ||||||||||||||||||||||||||||||||||||||||||||
| -H "Content-Type: application/json" \ | ||||||||||||||||||||||||||||||||||||||||||||
| -d '{"post": "How to build Chrome extensions with AI..."}' | ||||||||||||||||||||||||||||||||||||||||||||
| -d '{ | ||||||||||||||||||||||||||||||||||||||||||||
| "blog_post": "[AN EXAMPLE BLOG POST]" | ||||||||||||||||||||||||||||||||||||||||||||
| }' | ||||||||||||||||||||||||||||||||||||||||||||
| ``` | ||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||
| Response: | ||||||||||||||||||||||||||||||||||||||||||||
| ### Creating Another Program | ||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||
| In addition to summarizing blogposts, we can imagine several other LLM-powered functions we could perform in our CMS: tagging, image description writing, drafting social media posts, etc. | ||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||
| ```json | ||||||||||||||||||||||||||||||||||||||||||||
| { | ||||||||||||||||||||||||||||||||||||||||||||
| "tags": ["chrome-extensions", "ai", "development", "javascript"] | ||||||||||||||||||||||||||||||||||||||||||||
| } | ||||||||||||||||||||||||||||||||||||||||||||
| To add a new program to `cms_kit`, we can run the `generate scaffold` command: | ||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||
| ```bash | ||||||||||||||||||||||||||||||||||||||||||||
| dspy-cli generate scaffold tagger -s "blog_post -> tags:list[str]" | ||||||||||||||||||||||||||||||||||||||||||||
| ``` | ||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||
| ## Features | ||||||||||||||||||||||||||||||||||||||||||||
| We name our program `tagger` and use the `-s` or `--signature` flag to pass in a signature detailing passing in a blog post and getting back a list of tags, which we specify as `list[str]`. | ||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||
| - Auto-discovery of modules as HTTP endpoints | ||||||||||||||||||||||||||||||||||||||||||||
| - Docker configs and OpenAPI specs generated | ||||||||||||||||||||||||||||||||||||||||||||
| - Hot reload development server | ||||||||||||||||||||||||||||||||||||||||||||
| - Model switching via config file | ||||||||||||||||||||||||||||||||||||||||||||
| - MCP tool support | ||||||||||||||||||||||||||||||||||||||||||||
| `generate scaffold` creates our program by creating a *signature* and *module* file in `src/cms_kit/signatures` and `src/cms_kit/modules`, respectively. | ||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||
| ## Commands | ||||||||||||||||||||||||||||||||||||||||||||
| If we run `dspy-cli serve`, the new module will be discovered and hosted in the web UI and as a new API route. | ||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||
| ```bash | ||||||||||||||||||||||||||||||||||||||||||||
| dspy-cli new <name> [-s "input -> output"] # Create project | ||||||||||||||||||||||||||||||||||||||||||||
| dspy-cli serve [--ui] # Start HTTP server | ||||||||||||||||||||||||||||||||||||||||||||
| dspy-cli g scaffold <program> [-m CoT] # Add module to project | ||||||||||||||||||||||||||||||||||||||||||||
| ### Exploring Our Project | ||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||
| Running `dspy-cli new` sets up your project directory. Let's walk through a few key items created: | ||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||
| - `src/cms_kit/signatures`: [Class-based DSPy signatures](https://dspy.ai/learn/programming/signatures/#class-based-dspy-signatures) are created and housed here. | ||||||||||||||||||||||||||||||||||||||||||||
| - `src/cms_kit/modules`: [DSPy modules](https://dspy.ai/learn/programming/modules/) are stored here. This folder is where `dspy-cli` discovers available programs when running `serve`. | ||||||||||||||||||||||||||||||||||||||||||||
| - `src/cms_kit/utils`: While you can add arbitrary code to your module and signature files, `utils` is a handy place to stash additional logic and tool definitions. Just create, code, and import from your signatures and modules. | ||||||||||||||||||||||||||||||||||||||||||||
| - `logs`: When your programs are called (via the web UI or API calls), usage is logged to a program-specific JSONL file, in the `logs` folder. | ||||||||||||||||||||||||||||||||||||||||||||
| - `dspy.config.yaml`: This config file sets a few parameters, but is mainly where inference providers and models are defined, both globally and (if you want) on a per-program basis. | ||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||
| Speaking of model definitions... | ||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||
| ### Connecting to Models | ||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||
| In `dspy.config.yaml` you're able to define language models you intend to call. We define models in a YAML format, with similar parameters to the LiteLLM integration [DSPy uses](https://dspy.ai/learn/programming/language_models/). | ||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||
| Here's what our model registry looks like in our `cms-kit` project: | ||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||
| ```yaml | ||||||||||||||||||||||||||||||||||||||||||||
| models: | ||||||||||||||||||||||||||||||||||||||||||||
| # The default model to use if no per-program override is specified | ||||||||||||||||||||||||||||||||||||||||||||
| default: openai:gpt-5-mini | ||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||
| # Model registry - define all available models here | ||||||||||||||||||||||||||||||||||||||||||||
| registry: | ||||||||||||||||||||||||||||||||||||||||||||
| openai:gpt-5-mini: | ||||||||||||||||||||||||||||||||||||||||||||
| model: openai/gpt-5-mini | ||||||||||||||||||||||||||||||||||||||||||||
| model_type: chat | ||||||||||||||||||||||||||||||||||||||||||||
| max_tokens: 16000 | ||||||||||||||||||||||||||||||||||||||||||||
| temperature: 1.0 | ||||||||||||||||||||||||||||||||||||||||||||
| env: OPENAI_API_KEY | ||||||||||||||||||||||||||||||||||||||||||||
|
Comment on lines
+125
to
+134
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. syntax:
Suggested change
Prompt To Fix With AIThis is a comment left during a code review.
Path: README.md
Line: 125:134
Comment:
**syntax:** `openai:gpt-5-mini` references a non-existent model. Update to use `openai/gpt-4o-mini` or another actual model
```suggestion
# The default model to use if no per-program override is specified
default: openai:gpt-4o-mini
# Model registry - define all available models here
registry:
openai:gpt-4o-mini:
model: openai/gpt-4o-mini
model_type: chat
max_tokens: 16000
temperature: 1.0
env: OPENAI_API_KEY
```
How can I resolve this? If you propose a fix, please make it concise. |
||||||||||||||||||||||||||||||||||||||||||||
| ``` | ||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||
| In the `registry` list we define models, using the LiteLLM convention, like: "openai/gpt-5-mini". Here's what [Sonnet 4.5](https://www.anthropic.com/claude/sonnet) looks like: | ||||||||||||||||||||||||||||||||||||||||||||
|
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. syntax: Reference to fictional model in documentation text. Replace with actual model name Prompt To Fix With AIThis is a comment left during a code review.
Path: README.md
Line: 137:137
Comment:
**syntax:** Reference to fictional model in documentation text. Replace with actual model name
How can I resolve this? If you propose a fix, please make it concise. |
||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||
| ```yaml | ||||||||||||||||||||||||||||||||||||||||||||
| anthropic:sonnet-4.5: | ||||||||||||||||||||||||||||||||||||||||||||
| model: anthropic/claude-sonnet-4-5 | ||||||||||||||||||||||||||||||||||||||||||||
| env: ANTHROPIC_API_KEY | ||||||||||||||||||||||||||||||||||||||||||||
| max_tokens: 8192 | ||||||||||||||||||||||||||||||||||||||||||||
| temperature: 0.7 | ||||||||||||||||||||||||||||||||||||||||||||
| model_type: chat | ||||||||||||||||||||||||||||||||||||||||||||
| ``` | ||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||
| Or Qwen3-4b hosted locally with [LM Studio](https://lmstudio.ai): | ||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||
| ```yaml | ||||||||||||||||||||||||||||||||||||||||||||
| qwen:qwen-3-4b: | ||||||||||||||||||||||||||||||||||||||||||||
| model: openai/qwen/qwen3-4b | ||||||||||||||||||||||||||||||||||||||||||||
| api_base: http://127.0.0.1:1234/v1 | ||||||||||||||||||||||||||||||||||||||||||||
| api_key: placeholder | ||||||||||||||||||||||||||||||||||||||||||||
| max_tokens: 4096 | ||||||||||||||||||||||||||||||||||||||||||||
| temperature: 1.0 | ||||||||||||||||||||||||||||||||||||||||||||
| model_type: chat | ||||||||||||||||||||||||||||||||||||||||||||
| ``` | ||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||
| The `default` key in the `models` list specifies the default model your programs will call. If you'd like, you can assign different programs to different models, like so: | ||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||
| ```yaml | ||||||||||||||||||||||||||||||||||||||||||||
| program_models: | ||||||||||||||||||||||||||||||||||||||||||||
| TaggerPredict: qwen:qwen-3-4b | ||||||||||||||||||||||||||||||||||||||||||||
| SummarizerPredict: anthropic:sonnet-4.5 | ||||||||||||||||||||||||||||||||||||||||||||
| ``` | ||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||
| See [Command Reference](docs/commands/) for complete documentation. | ||||||||||||||||||||||||||||||||||||||||||||
| ### Learning More | ||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||
| ## Documentation | ||||||||||||||||||||||||||||||||||||||||||||
| We've built out a lot of quality of life features in `dspy-cli`, including: | ||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||
| See the full docs at: [https://cmpnd-ai.github.io/dspy-cli-tool/](https://cmpnd-ai.github.io/dspy-cli-tool/) | ||||||||||||||||||||||||||||||||||||||||||||
| - **Auto-discovery of modules:** Create a module in the `modules` folder and `dspy-cli` will detect the program and infer its parameters. | ||||||||||||||||||||||||||||||||||||||||||||
| - **Type validation:** Typed parameters and return values defined in a module's `forward` method are validated during API calls. | ||||||||||||||||||||||||||||||||||||||||||||
| - **Hot-reloading:** Tweaking signature or module definitions will cause `dspy-cli` to reload the server, updating the programs. | ||||||||||||||||||||||||||||||||||||||||||||
| - **OpenAPI spec generation:** With each run of `serve`, `dspy-cli` creates an OpenAPI JSON definition of your API, which is accessible at `/openapi.json`. | ||||||||||||||||||||||||||||||||||||||||||||
| - **MCP tool support:** Pass in `--mcp` while calling `serve` to stand up an MCP server for your program. | ||||||||||||||||||||||||||||||||||||||||||||
| - **Docker configuration:** Running `new` creates a Dockerfile, which can be used to quickly stand up your program in Docker. | ||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||
| - [Getting Started](docs/getting-started.md) - Quickstart guide | ||||||||||||||||||||||||||||||||||||||||||||
| - [Commands](docs/commands/) - CLI reference | ||||||||||||||||||||||||||||||||||||||||||||
| - [Configuration](docs/configuration.md) - Model and environment settings | ||||||||||||||||||||||||||||||||||||||||||||
| - [Examples](examples/) - Sample projects | ||||||||||||||||||||||||||||||||||||||||||||
| Check out [the full docs](https://cmpnd-ai.github.io/dspy-cli-tool/) to learn more. | ||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||
| ## License | ||||||||||||||||||||||||||||||||||||||||||||
| ### License | ||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||
| MIT | ||||||||||||||||||||||||||||||||||||||||||||
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
syntax:
openai/gpt-5-minidoes not exist yet. Replace with an actual OpenAI model likeopenai/gpt-4o-miniPrompt To Fix With AI