compound-engineering-pi 0.2.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +124 -0
- package/bin/compound-engineering-pi +12 -0
- package/bin/compound-plugin +12 -0
- package/compound-engineering-pi +12 -0
- package/compound-plugin +5 -0
- package/docs/pi.md +152 -0
- package/extensions/compound-engineering-compat.ts +452 -0
- package/package.json +84 -0
- package/pi-resources/compound-engineering/mcporter.json +7 -0
- package/plugins/coding-tutor/.claude-plugin/plugin.json +9 -0
- package/plugins/coding-tutor/README.md +37 -0
- package/plugins/coding-tutor/commands/quiz-me.md +1 -0
- package/plugins/coding-tutor/commands/sync-tutorials.md +25 -0
- package/plugins/coding-tutor/commands/teach-me.md +1 -0
- package/plugins/coding-tutor/skills/coding-tutor/SKILL.md +214 -0
- package/plugins/coding-tutor/skills/coding-tutor/scripts/create_tutorial.py +207 -0
- package/plugins/coding-tutor/skills/coding-tutor/scripts/index_tutorials.py +193 -0
- package/plugins/coding-tutor/skills/coding-tutor/scripts/quiz_priority.py +190 -0
- package/plugins/coding-tutor/skills/coding-tutor/scripts/setup_tutorials.py +118 -0
- package/plugins/compound-engineering/.claude-plugin/plugin.json +33 -0
- package/plugins/compound-engineering/CHANGELOG.md +457 -0
- package/plugins/compound-engineering/CLAUDE.md +89 -0
- package/plugins/compound-engineering/LICENSE +21 -0
- package/plugins/compound-engineering/README.md +232 -0
- package/plugins/compound-engineering/agents/design/design-implementation-reviewer.md +109 -0
- package/plugins/compound-engineering/agents/design/design-iterator.md +224 -0
- package/plugins/compound-engineering/agents/design/figma-design-sync.md +190 -0
- package/plugins/compound-engineering/agents/docs/ankane-readme-writer.md +65 -0
- package/plugins/compound-engineering/agents/research/best-practices-researcher.md +126 -0
- package/plugins/compound-engineering/agents/research/framework-docs-researcher.md +106 -0
- package/plugins/compound-engineering/agents/research/git-history-analyzer.md +59 -0
- package/plugins/compound-engineering/agents/research/learnings-researcher.md +264 -0
- package/plugins/compound-engineering/agents/research/repo-research-analyst.md +135 -0
- package/plugins/compound-engineering/agents/review/agent-native-reviewer.md +261 -0
- package/plugins/compound-engineering/agents/review/architecture-strategist.md +67 -0
- package/plugins/compound-engineering/agents/review/code-simplicity-reviewer.md +101 -0
- package/plugins/compound-engineering/agents/review/data-integrity-guardian.md +85 -0
- package/plugins/compound-engineering/agents/review/data-migration-expert.md +112 -0
- package/plugins/compound-engineering/agents/review/deployment-verification-agent.md +174 -0
- package/plugins/compound-engineering/agents/review/dhh-rails-reviewer.md +66 -0
- package/plugins/compound-engineering/agents/review/julik-frontend-races-reviewer.md +221 -0
- package/plugins/compound-engineering/agents/review/kieran-python-reviewer.md +133 -0
- package/plugins/compound-engineering/agents/review/kieran-rails-reviewer.md +115 -0
- package/plugins/compound-engineering/agents/review/kieran-typescript-reviewer.md +124 -0
- package/plugins/compound-engineering/agents/review/pattern-recognition-specialist.md +72 -0
- package/plugins/compound-engineering/agents/review/performance-oracle.md +137 -0
- package/plugins/compound-engineering/agents/review/schema-drift-detector.md +154 -0
- package/plugins/compound-engineering/agents/review/security-sentinel.md +114 -0
- package/plugins/compound-engineering/agents/workflow/bug-reproduction-validator.md +82 -0
- package/plugins/compound-engineering/agents/workflow/every-style-editor.md +64 -0
- package/plugins/compound-engineering/agents/workflow/lint.md +16 -0
- package/plugins/compound-engineering/agents/workflow/pr-comment-resolver.md +84 -0
- package/plugins/compound-engineering/agents/workflow/spec-flow-analyzer.md +134 -0
- package/plugins/compound-engineering/commands/agent-native-audit.md +278 -0
- package/plugins/compound-engineering/commands/changelog.md +138 -0
- package/plugins/compound-engineering/commands/create-agent-skill.md +9 -0
- package/plugins/compound-engineering/commands/deepen-plan.md +546 -0
- package/plugins/compound-engineering/commands/deploy-docs.md +113 -0
- package/plugins/compound-engineering/commands/feature-video.md +342 -0
- package/plugins/compound-engineering/commands/generate_command.md +163 -0
- package/plugins/compound-engineering/commands/heal-skill.md +143 -0
- package/plugins/compound-engineering/commands/lfg.md +20 -0
- package/plugins/compound-engineering/commands/release-docs.md +212 -0
- package/plugins/compound-engineering/commands/report-bug.md +151 -0
- package/plugins/compound-engineering/commands/reproduce-bug.md +100 -0
- package/plugins/compound-engineering/commands/resolve_parallel.md +35 -0
- package/plugins/compound-engineering/commands/resolve_todo_parallel.md +37 -0
- package/plugins/compound-engineering/commands/slfg.md +32 -0
- package/plugins/compound-engineering/commands/technical_review.md +8 -0
- package/plugins/compound-engineering/commands/test-browser.md +339 -0
- package/plugins/compound-engineering/commands/test-xcode.md +332 -0
- package/plugins/compound-engineering/commands/triage.md +311 -0
- package/plugins/compound-engineering/commands/workflows/brainstorm.md +124 -0
- package/plugins/compound-engineering/commands/workflows/compound.md +239 -0
- package/plugins/compound-engineering/commands/workflows/plan.md +551 -0
- package/plugins/compound-engineering/commands/workflows/review.md +526 -0
- package/plugins/compound-engineering/commands/workflows/work.md +433 -0
- package/plugins/compound-engineering/skills/agent-browser/SKILL.md +223 -0
- package/plugins/compound-engineering/skills/agent-native-architecture/SKILL.md +435 -0
- package/plugins/compound-engineering/skills/agent-native-architecture/references/action-parity-discipline.md +409 -0
- package/plugins/compound-engineering/skills/agent-native-architecture/references/agent-execution-patterns.md +467 -0
- package/plugins/compound-engineering/skills/agent-native-architecture/references/agent-native-testing.md +582 -0
- package/plugins/compound-engineering/skills/agent-native-architecture/references/architecture-patterns.md +478 -0
- package/plugins/compound-engineering/skills/agent-native-architecture/references/dynamic-context-injection.md +338 -0
- package/plugins/compound-engineering/skills/agent-native-architecture/references/files-universal-interface.md +301 -0
- package/plugins/compound-engineering/skills/agent-native-architecture/references/from-primitives-to-domain-tools.md +359 -0
- package/plugins/compound-engineering/skills/agent-native-architecture/references/mcp-tool-design.md +506 -0
- package/plugins/compound-engineering/skills/agent-native-architecture/references/mobile-patterns.md +871 -0
- package/plugins/compound-engineering/skills/agent-native-architecture/references/product-implications.md +443 -0
- package/plugins/compound-engineering/skills/agent-native-architecture/references/refactoring-to-prompt-native.md +317 -0
- package/plugins/compound-engineering/skills/agent-native-architecture/references/self-modification.md +269 -0
- package/plugins/compound-engineering/skills/agent-native-architecture/references/shared-workspace-architecture.md +680 -0
- package/plugins/compound-engineering/skills/agent-native-architecture/references/system-prompt-design.md +250 -0
- package/plugins/compound-engineering/skills/andrew-kane-gem-writer/SKILL.md +184 -0
- package/plugins/compound-engineering/skills/andrew-kane-gem-writer/references/database-adapters.md +231 -0
- package/plugins/compound-engineering/skills/andrew-kane-gem-writer/references/module-organization.md +121 -0
- package/plugins/compound-engineering/skills/andrew-kane-gem-writer/references/rails-integration.md +183 -0
- package/plugins/compound-engineering/skills/andrew-kane-gem-writer/references/resources.md +119 -0
- package/plugins/compound-engineering/skills/andrew-kane-gem-writer/references/testing-patterns.md +261 -0
- package/plugins/compound-engineering/skills/brainstorming/SKILL.md +190 -0
- package/plugins/compound-engineering/skills/compound-docs/SKILL.md +511 -0
- package/plugins/compound-engineering/skills/compound-docs/assets/critical-pattern-template.md +34 -0
- package/plugins/compound-engineering/skills/compound-docs/assets/resolution-template.md +93 -0
- package/plugins/compound-engineering/skills/compound-docs/references/yaml-schema.md +65 -0
- package/plugins/compound-engineering/skills/compound-docs/schema.yaml +176 -0
- package/plugins/compound-engineering/skills/create-agent-skills/SKILL.md +275 -0
- package/plugins/compound-engineering/skills/create-agent-skills/references/api-security.md +226 -0
- package/plugins/compound-engineering/skills/create-agent-skills/references/be-clear-and-direct.md +531 -0
- package/plugins/compound-engineering/skills/create-agent-skills/references/best-practices.md +404 -0
- package/plugins/compound-engineering/skills/create-agent-skills/references/common-patterns.md +595 -0
- package/plugins/compound-engineering/skills/create-agent-skills/references/core-principles.md +437 -0
- package/plugins/compound-engineering/skills/create-agent-skills/references/executable-code.md +175 -0
- package/plugins/compound-engineering/skills/create-agent-skills/references/iteration-and-testing.md +474 -0
- package/plugins/compound-engineering/skills/create-agent-skills/references/official-spec.md +134 -0
- package/plugins/compound-engineering/skills/create-agent-skills/references/recommended-structure.md +168 -0
- package/plugins/compound-engineering/skills/create-agent-skills/references/skill-structure.md +152 -0
- package/plugins/compound-engineering/skills/create-agent-skills/references/using-scripts.md +113 -0
- package/plugins/compound-engineering/skills/create-agent-skills/references/using-templates.md +112 -0
- package/plugins/compound-engineering/skills/create-agent-skills/references/workflows-and-validation.md +510 -0
- package/plugins/compound-engineering/skills/create-agent-skills/templates/router-skill.md +73 -0
- package/plugins/compound-engineering/skills/create-agent-skills/templates/simple-skill.md +33 -0
- package/plugins/compound-engineering/skills/create-agent-skills/workflows/add-reference.md +96 -0
- package/plugins/compound-engineering/skills/create-agent-skills/workflows/add-script.md +93 -0
- package/plugins/compound-engineering/skills/create-agent-skills/workflows/add-template.md +74 -0
- package/plugins/compound-engineering/skills/create-agent-skills/workflows/add-workflow.md +120 -0
- package/plugins/compound-engineering/skills/create-agent-skills/workflows/audit-skill.md +138 -0
- package/plugins/compound-engineering/skills/create-agent-skills/workflows/create-domain-expertise-skill.md +605 -0
- package/plugins/compound-engineering/skills/create-agent-skills/workflows/create-new-skill.md +191 -0
- package/plugins/compound-engineering/skills/create-agent-skills/workflows/get-guidance.md +121 -0
- package/plugins/compound-engineering/skills/create-agent-skills/workflows/upgrade-to-router.md +161 -0
- package/plugins/compound-engineering/skills/create-agent-skills/workflows/verify-skill.md +204 -0
- package/plugins/compound-engineering/skills/dhh-rails-style/SKILL.md +185 -0
- package/plugins/compound-engineering/skills/dhh-rails-style/references/architecture.md +653 -0
- package/plugins/compound-engineering/skills/dhh-rails-style/references/controllers.md +303 -0
- package/plugins/compound-engineering/skills/dhh-rails-style/references/frontend.md +510 -0
- package/plugins/compound-engineering/skills/dhh-rails-style/references/gems.md +266 -0
- package/plugins/compound-engineering/skills/dhh-rails-style/references/models.md +359 -0
- package/plugins/compound-engineering/skills/dhh-rails-style/references/testing.md +338 -0
- package/plugins/compound-engineering/skills/document-review/SKILL.md +87 -0
- package/plugins/compound-engineering/skills/dspy-ruby/SKILL.md +737 -0
- package/plugins/compound-engineering/skills/dspy-ruby/assets/config-template.rb +187 -0
- package/plugins/compound-engineering/skills/dspy-ruby/assets/module-template.rb +300 -0
- package/plugins/compound-engineering/skills/dspy-ruby/assets/signature-template.rb +221 -0
- package/plugins/compound-engineering/skills/dspy-ruby/references/core-concepts.md +674 -0
- package/plugins/compound-engineering/skills/dspy-ruby/references/observability.md +366 -0
- package/plugins/compound-engineering/skills/dspy-ruby/references/optimization.md +603 -0
- package/plugins/compound-engineering/skills/dspy-ruby/references/providers.md +418 -0
- package/plugins/compound-engineering/skills/dspy-ruby/references/toolsets.md +502 -0
- package/plugins/compound-engineering/skills/every-style-editor/SKILL.md +134 -0
- package/plugins/compound-engineering/skills/every-style-editor/references/EVERY_WRITE_STYLE.md +529 -0
- package/plugins/compound-engineering/skills/file-todos/SKILL.md +252 -0
- package/plugins/compound-engineering/skills/file-todos/assets/todo-template.md +155 -0
- package/plugins/compound-engineering/skills/frontend-design/SKILL.md +42 -0
- package/plugins/compound-engineering/skills/gemini-imagegen/SKILL.md +237 -0
- package/plugins/compound-engineering/skills/gemini-imagegen/requirements.txt +2 -0
- package/plugins/compound-engineering/skills/gemini-imagegen/scripts/compose_images.py +157 -0
- package/plugins/compound-engineering/skills/gemini-imagegen/scripts/edit_image.py +144 -0
- package/plugins/compound-engineering/skills/gemini-imagegen/scripts/gemini_images.py +263 -0
- package/plugins/compound-engineering/skills/gemini-imagegen/scripts/generate_image.py +133 -0
- package/plugins/compound-engineering/skills/gemini-imagegen/scripts/multi_turn_chat.py +216 -0
- package/plugins/compound-engineering/skills/git-worktree/SKILL.md +302 -0
- package/plugins/compound-engineering/skills/git-worktree/scripts/worktree-manager.sh +337 -0
- package/plugins/compound-engineering/skills/orchestrating-swarms/SKILL.md +1718 -0
- package/plugins/compound-engineering/skills/rclone/SKILL.md +150 -0
- package/plugins/compound-engineering/skills/rclone/scripts/check_setup.sh +60 -0
- package/plugins/compound-engineering/skills/resolve-pr-parallel/SKILL.md +89 -0
- package/plugins/compound-engineering/skills/resolve-pr-parallel/scripts/get-pr-comments +68 -0
- package/plugins/compound-engineering/skills/resolve-pr-parallel/scripts/resolve-pr-thread +23 -0
- package/plugins/compound-engineering/skills/skill-creator/SKILL.md +210 -0
- package/plugins/compound-engineering/skills/skill-creator/scripts/init_skill.py +303 -0
- package/plugins/compound-engineering/skills/skill-creator/scripts/package_skill.py +110 -0
- package/plugins/compound-engineering/skills/skill-creator/scripts/quick_validate.py +65 -0
- package/prompts/deepen-plan.md +549 -0
- package/prompts/feature-video.md +341 -0
- package/prompts/resolve_todo_parallel.md +36 -0
- package/prompts/test-browser.md +342 -0
- package/prompts/workflows-brainstorm.md +123 -0
- package/prompts/workflows-compound.md +238 -0
- package/prompts/workflows-plan.md +550 -0
- package/prompts/workflows-review.md +529 -0
- package/prompts/workflows-work.md +432 -0
- package/skills/agent-browser/SKILL.md +223 -0
- package/skills/agent-native-architecture/SKILL.md +435 -0
- package/skills/agent-native-architecture/references/action-parity-discipline.md +409 -0
- package/skills/agent-native-architecture/references/agent-execution-patterns.md +467 -0
- package/skills/agent-native-architecture/references/agent-native-testing.md +582 -0
- package/skills/agent-native-architecture/references/architecture-patterns.md +478 -0
- package/skills/agent-native-architecture/references/dynamic-context-injection.md +338 -0
- package/skills/agent-native-architecture/references/files-universal-interface.md +301 -0
- package/skills/agent-native-architecture/references/from-primitives-to-domain-tools.md +359 -0
- package/skills/agent-native-architecture/references/mcp-tool-design.md +506 -0
- package/skills/agent-native-architecture/references/mobile-patterns.md +871 -0
- package/skills/agent-native-architecture/references/product-implications.md +443 -0
- package/skills/agent-native-architecture/references/refactoring-to-prompt-native.md +317 -0
- package/skills/agent-native-architecture/references/self-modification.md +269 -0
- package/skills/agent-native-architecture/references/shared-workspace-architecture.md +680 -0
- package/skills/agent-native-architecture/references/system-prompt-design.md +250 -0
- package/skills/agent-native-reviewer/SKILL.md +260 -0
- package/skills/andrew-kane-gem-writer/SKILL.md +184 -0
- package/skills/andrew-kane-gem-writer/references/database-adapters.md +231 -0
- package/skills/andrew-kane-gem-writer/references/module-organization.md +121 -0
- package/skills/andrew-kane-gem-writer/references/rails-integration.md +183 -0
- package/skills/andrew-kane-gem-writer/references/resources.md +119 -0
- package/skills/andrew-kane-gem-writer/references/testing-patterns.md +261 -0
- package/skills/ankane-readme-writer/SKILL.md +63 -0
- package/skills/architecture-strategist/SKILL.md +66 -0
- package/skills/best-practices-researcher/SKILL.md +125 -0
- package/skills/brainstorming/SKILL.md +190 -0
- package/skills/bug-reproduction-validator/SKILL.md +81 -0
- package/skills/code-simplicity-reviewer/SKILL.md +100 -0
- package/skills/compound-docs/SKILL.md +511 -0
- package/skills/compound-docs/assets/critical-pattern-template.md +34 -0
- package/skills/compound-docs/assets/resolution-template.md +93 -0
- package/skills/compound-docs/references/yaml-schema.md +65 -0
- package/skills/compound-docs/schema.yaml +176 -0
- package/skills/create-agent-skills/SKILL.md +275 -0
- package/skills/create-agent-skills/references/api-security.md +226 -0
- package/skills/create-agent-skills/references/be-clear-and-direct.md +531 -0
- package/skills/create-agent-skills/references/best-practices.md +404 -0
- package/skills/create-agent-skills/references/common-patterns.md +595 -0
- package/skills/create-agent-skills/references/core-principles.md +437 -0
- package/skills/create-agent-skills/references/executable-code.md +175 -0
- package/skills/create-agent-skills/references/iteration-and-testing.md +474 -0
- package/skills/create-agent-skills/references/official-spec.md +134 -0
- package/skills/create-agent-skills/references/recommended-structure.md +168 -0
- package/skills/create-agent-skills/references/skill-structure.md +152 -0
- package/skills/create-agent-skills/references/using-scripts.md +113 -0
- package/skills/create-agent-skills/references/using-templates.md +112 -0
- package/skills/create-agent-skills/references/workflows-and-validation.md +510 -0
- package/skills/create-agent-skills/templates/router-skill.md +73 -0
- package/skills/create-agent-skills/templates/simple-skill.md +33 -0
- package/skills/create-agent-skills/workflows/add-reference.md +96 -0
- package/skills/create-agent-skills/workflows/add-script.md +93 -0
- package/skills/create-agent-skills/workflows/add-template.md +74 -0
- package/skills/create-agent-skills/workflows/add-workflow.md +120 -0
- package/skills/create-agent-skills/workflows/audit-skill.md +138 -0
- package/skills/create-agent-skills/workflows/create-domain-expertise-skill.md +605 -0
- package/skills/create-agent-skills/workflows/create-new-skill.md +191 -0
- package/skills/create-agent-skills/workflows/get-guidance.md +121 -0
- package/skills/create-agent-skills/workflows/upgrade-to-router.md +161 -0
- package/skills/create-agent-skills/workflows/verify-skill.md +204 -0
- package/skills/data-integrity-guardian/SKILL.md +84 -0
- package/skills/data-migration-expert/SKILL.md +111 -0
- package/skills/deployment-verification-agent/SKILL.md +173 -0
- package/skills/design-implementation-reviewer/SKILL.md +107 -0
- package/skills/design-iterator/SKILL.md +222 -0
- package/skills/dhh-rails-reviewer/SKILL.md +65 -0
- package/skills/dhh-rails-style/SKILL.md +185 -0
- package/skills/dhh-rails-style/references/architecture.md +653 -0
- package/skills/dhh-rails-style/references/controllers.md +303 -0
- package/skills/dhh-rails-style/references/frontend.md +510 -0
- package/skills/dhh-rails-style/references/gems.md +266 -0
- package/skills/dhh-rails-style/references/models.md +359 -0
- package/skills/dhh-rails-style/references/testing.md +338 -0
- package/skills/document-review/SKILL.md +87 -0
- package/skills/dspy-ruby/SKILL.md +737 -0
- package/skills/dspy-ruby/assets/config-template.rb +187 -0
- package/skills/dspy-ruby/assets/module-template.rb +300 -0
- package/skills/dspy-ruby/assets/signature-template.rb +221 -0
- package/skills/dspy-ruby/references/core-concepts.md +674 -0
- package/skills/dspy-ruby/references/observability.md +366 -0
- package/skills/dspy-ruby/references/optimization.md +603 -0
- package/skills/dspy-ruby/references/providers.md +418 -0
- package/skills/dspy-ruby/references/toolsets.md +502 -0
- package/skills/every-style-editor/SKILL.md +134 -0
- package/skills/every-style-editor/references/EVERY_WRITE_STYLE.md +529 -0
- package/skills/every-style-editor-2/SKILL.md +62 -0
- package/skills/figma-design-sync/SKILL.md +188 -0
- package/skills/file-todos/SKILL.md +252 -0
- package/skills/file-todos/assets/todo-template.md +155 -0
- package/skills/framework-docs-researcher/SKILL.md +105 -0
- package/skills/frontend-design/SKILL.md +42 -0
- package/skills/gemini-imagegen/SKILL.md +237 -0
- package/skills/gemini-imagegen/requirements.txt +2 -0
- package/skills/gemini-imagegen/scripts/compose_images.py +157 -0
- package/skills/gemini-imagegen/scripts/edit_image.py +144 -0
- package/skills/gemini-imagegen/scripts/gemini_images.py +263 -0
- package/skills/gemini-imagegen/scripts/generate_image.py +133 -0
- package/skills/gemini-imagegen/scripts/multi_turn_chat.py +216 -0
- package/skills/git-history-analyzer/SKILL.md +58 -0
- package/skills/git-worktree/SKILL.md +302 -0
- package/skills/git-worktree/scripts/worktree-manager.sh +337 -0
- package/skills/julik-frontend-races-reviewer/SKILL.md +220 -0
- package/skills/kieran-python-reviewer/SKILL.md +132 -0
- package/skills/kieran-rails-reviewer/SKILL.md +114 -0
- package/skills/kieran-typescript-reviewer/SKILL.md +123 -0
- package/skills/learnings-researcher/SKILL.md +263 -0
- package/skills/lint/SKILL.md +14 -0
- package/skills/orchestrating-swarms/SKILL.md +1718 -0
- package/skills/pattern-recognition-specialist/SKILL.md +71 -0
- package/skills/performance-oracle/SKILL.md +136 -0
- package/skills/pr-comment-resolver/SKILL.md +82 -0
- package/skills/rclone/SKILL.md +150 -0
- package/skills/rclone/scripts/check_setup.sh +60 -0
- package/skills/repo-research-analyst/SKILL.md +134 -0
- package/skills/resolve_pr_parallel/SKILL.md +89 -0
- package/skills/resolve_pr_parallel/scripts/get-pr-comments +68 -0
- package/skills/resolve_pr_parallel/scripts/resolve-pr-thread +23 -0
- package/skills/schema-drift-detector/SKILL.md +153 -0
- package/skills/security-sentinel/SKILL.md +113 -0
- package/skills/skill-creator/SKILL.md +210 -0
- package/skills/skill-creator/scripts/init_skill.py +303 -0
- package/skills/skill-creator/scripts/package_skill.py +110 -0
- package/skills/skill-creator/scripts/quick_validate.py +65 -0
- package/skills/spec-flow-analyzer/SKILL.md +133 -0
- package/src/commands/convert.ts +183 -0
- package/src/commands/install.ts +273 -0
- package/src/commands/list.ts +37 -0
- package/src/commands/sync.ts +89 -0
- package/src/converters/claude-to-codex.ts +182 -0
- package/src/converters/claude-to-opencode.ts +395 -0
- package/src/converters/claude-to-pi.ts +205 -0
- package/src/index.ts +22 -0
- package/src/parsers/claude-home.ts +65 -0
- package/src/parsers/claude.ts +252 -0
- package/src/sync/codex.ts +92 -0
- package/src/sync/opencode.ts +75 -0
- package/src/sync/pi.ts +88 -0
- package/src/targets/codex.ts +96 -0
- package/src/targets/index.ts +38 -0
- package/src/targets/opencode.ts +57 -0
- package/src/targets/pi.ts +131 -0
- package/src/templates/pi/compat-extension.ts +452 -0
- package/src/types/claude.ts +90 -0
- package/src/types/codex.ts +23 -0
- package/src/types/opencode.ts +54 -0
- package/src/types/pi.ts +40 -0
- package/src/utils/codex-agents.ts +64 -0
- package/src/utils/files.ts +77 -0
- package/src/utils/frontmatter.ts +65 -0
- package/src/utils/symlink.ts +43 -0
|
@@ -0,0 +1,418 @@
|
|
|
1
|
+
# DSPy.rb LLM Providers
|
|
2
|
+
|
|
3
|
+
## Adapter Architecture
|
|
4
|
+
|
|
5
|
+
DSPy.rb ships provider SDKs as separate adapter gems. Install only the adapters the project needs. Each adapter gem depends on the official SDK for its provider and auto-loads when present -- no explicit `require` necessary.
|
|
6
|
+
|
|
7
|
+
```ruby
|
|
8
|
+
# Gemfile
|
|
9
|
+
gem 'dspy' # core framework (no provider SDKs)
|
|
10
|
+
gem 'dspy-openai' # OpenAI, OpenRouter, Ollama
|
|
11
|
+
gem 'dspy-anthropic' # Claude
|
|
12
|
+
gem 'dspy-gemini' # Gemini
|
|
13
|
+
gem 'dspy-ruby_llm' # RubyLLM unified adapter (12+ providers)
|
|
14
|
+
```
|
|
15
|
+
|
|
16
|
+
---
|
|
17
|
+
|
|
18
|
+
## Per-Provider Adapters
|
|
19
|
+
|
|
20
|
+
### dspy-openai
|
|
21
|
+
|
|
22
|
+
Covers any endpoint that speaks the OpenAI chat-completions protocol: OpenAI itself, OpenRouter, and Ollama.
|
|
23
|
+
|
|
24
|
+
**SDK dependency:** `openai ~> 0.17`
|
|
25
|
+
|
|
26
|
+
```ruby
|
|
27
|
+
# OpenAI
|
|
28
|
+
lm = DSPy::LM.new('openai/gpt-4o-mini', api_key: ENV['OPENAI_API_KEY'])
|
|
29
|
+
|
|
30
|
+
# OpenRouter -- access 200+ models behind a single key
|
|
31
|
+
lm = DSPy::LM.new('openrouter/x-ai/grok-4-fast:free',
|
|
32
|
+
api_key: ENV['OPENROUTER_API_KEY']
|
|
33
|
+
)
|
|
34
|
+
|
|
35
|
+
# Ollama -- local models, no API key required
|
|
36
|
+
lm = DSPy::LM.new('ollama/llama3.2')
|
|
37
|
+
|
|
38
|
+
# Remote Ollama instance
|
|
39
|
+
lm = DSPy::LM.new('ollama/llama3.2',
|
|
40
|
+
base_url: 'https://my-ollama.example.com/v1',
|
|
41
|
+
api_key: 'optional-auth-token'
|
|
42
|
+
)
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
All three sub-adapters share the same request handling, structured-output support, and error reporting. Swap providers without changing higher-level DSPy code.
|
|
46
|
+
|
|
47
|
+
For OpenRouter models that lack native structured-output support, disable it explicitly:
|
|
48
|
+
|
|
49
|
+
```ruby
|
|
50
|
+
lm = DSPy::LM.new('openrouter/deepseek/deepseek-chat-v3.1:free',
|
|
51
|
+
api_key: ENV['OPENROUTER_API_KEY'],
|
|
52
|
+
structured_outputs: false
|
|
53
|
+
)
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
### dspy-anthropic
|
|
57
|
+
|
|
58
|
+
Provides the Claude adapter. Install it for any `anthropic/*` model id.
|
|
59
|
+
|
|
60
|
+
**SDK dependency:** `anthropic ~> 1.12`
|
|
61
|
+
|
|
62
|
+
```ruby
|
|
63
|
+
lm = DSPy::LM.new('anthropic/claude-sonnet-4-20250514',
|
|
64
|
+
api_key: ENV['ANTHROPIC_API_KEY']
|
|
65
|
+
)
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
Structured outputs default to tool-based JSON extraction (`structured_outputs: true`). Set `structured_outputs: false` to use enhanced-prompting extraction instead.
|
|
69
|
+
|
|
70
|
+
```ruby
|
|
71
|
+
# Tool-based extraction (default, most reliable)
|
|
72
|
+
lm = DSPy::LM.new('anthropic/claude-sonnet-4-20250514',
|
|
73
|
+
api_key: ENV['ANTHROPIC_API_KEY'],
|
|
74
|
+
structured_outputs: true
|
|
75
|
+
)
|
|
76
|
+
|
|
77
|
+
# Enhanced prompting extraction
|
|
78
|
+
lm = DSPy::LM.new('anthropic/claude-sonnet-4-20250514',
|
|
79
|
+
api_key: ENV['ANTHROPIC_API_KEY'],
|
|
80
|
+
structured_outputs: false
|
|
81
|
+
)
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
### dspy-gemini
|
|
85
|
+
|
|
86
|
+
Provides the Gemini adapter. Install it for any `gemini/*` model id.
|
|
87
|
+
|
|
88
|
+
**SDK dependency:** `gemini-ai ~> 4.3`
|
|
89
|
+
|
|
90
|
+
```ruby
|
|
91
|
+
lm = DSPy::LM.new('gemini/gemini-2.5-flash',
|
|
92
|
+
api_key: ENV['GEMINI_API_KEY']
|
|
93
|
+
)
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
**Environment variable:** `GEMINI_API_KEY` (also accepts `GOOGLE_API_KEY`).
|
|
97
|
+
|
|
98
|
+
---
|
|
99
|
+
|
|
100
|
+
## RubyLLM Unified Adapter
|
|
101
|
+
|
|
102
|
+
The `dspy-ruby_llm` gem provides a single adapter that routes to 12+ providers through [RubyLLM](https://rubyllm.com). Use it when a project talks to multiple providers or needs access to Bedrock, VertexAI, DeepSeek, or Mistral without dedicated adapter gems.
|
|
103
|
+
|
|
104
|
+
**SDK dependency:** `ruby_llm ~> 1.3`
|
|
105
|
+
|
|
106
|
+
### Model ID Format
|
|
107
|
+
|
|
108
|
+
Prefix every model id with `ruby_llm/`:
|
|
109
|
+
|
|
110
|
+
```ruby
|
|
111
|
+
lm = DSPy::LM.new('ruby_llm/gpt-4o-mini')
|
|
112
|
+
lm = DSPy::LM.new('ruby_llm/claude-sonnet-4-20250514')
|
|
113
|
+
lm = DSPy::LM.new('ruby_llm/gemini-2.5-flash')
|
|
114
|
+
```
|
|
115
|
+
|
|
116
|
+
The adapter detects the provider from RubyLLM's model registry automatically. For models not in the registry, pass `provider:` explicitly:
|
|
117
|
+
|
|
118
|
+
```ruby
|
|
119
|
+
lm = DSPy::LM.new('ruby_llm/llama3.2', provider: 'ollama')
|
|
120
|
+
lm = DSPy::LM.new('ruby_llm/anthropic/claude-3-opus',
|
|
121
|
+
api_key: ENV['OPENROUTER_API_KEY'],
|
|
122
|
+
provider: 'openrouter'
|
|
123
|
+
)
|
|
124
|
+
```
|
|
125
|
+
|
|
126
|
+
### Using Existing RubyLLM Configuration
|
|
127
|
+
|
|
128
|
+
When RubyLLM is already configured globally, omit the `api_key:` argument. DSPy reuses the global config automatically:
|
|
129
|
+
|
|
130
|
+
```ruby
|
|
131
|
+
RubyLLM.configure do |config|
|
|
132
|
+
config.openai_api_key = ENV['OPENAI_API_KEY']
|
|
133
|
+
config.anthropic_api_key = ENV['ANTHROPIC_API_KEY']
|
|
134
|
+
end
|
|
135
|
+
|
|
136
|
+
# No api_key needed -- picks up the global config
|
|
137
|
+
DSPy.configure do |c|
|
|
138
|
+
c.lm = DSPy::LM.new('ruby_llm/gpt-4o-mini')
|
|
139
|
+
end
|
|
140
|
+
```
|
|
141
|
+
|
|
142
|
+
When an `api_key:` (or any of `base_url:`, `timeout:`, `max_retries:`) is passed, DSPy creates a **scoped context** instead of reusing the global config.
|
|
143
|
+
|
|
144
|
+
### Cloud-Hosted Providers (Bedrock, VertexAI)
|
|
145
|
+
|
|
146
|
+
Configure RubyLLM globally first, then reference the model:
|
|
147
|
+
|
|
148
|
+
```ruby
|
|
149
|
+
# AWS Bedrock
|
|
150
|
+
RubyLLM.configure do |c|
|
|
151
|
+
c.bedrock_api_key = ENV['AWS_ACCESS_KEY_ID']
|
|
152
|
+
c.bedrock_secret_key = ENV['AWS_SECRET_ACCESS_KEY']
|
|
153
|
+
c.bedrock_region = 'us-east-1'
|
|
154
|
+
end
|
|
155
|
+
lm = DSPy::LM.new('ruby_llm/anthropic.claude-3-5-sonnet', provider: 'bedrock')
|
|
156
|
+
|
|
157
|
+
# Google VertexAI
|
|
158
|
+
RubyLLM.configure do |c|
|
|
159
|
+
c.vertexai_project_id = 'your-project-id'
|
|
160
|
+
c.vertexai_location = 'us-central1'
|
|
161
|
+
end
|
|
162
|
+
lm = DSPy::LM.new('ruby_llm/gemini-pro', provider: 'vertexai')
|
|
163
|
+
```
|
|
164
|
+
|
|
165
|
+
### Supported Providers Table
|
|
166
|
+
|
|
167
|
+
| Provider | Example Model ID | Notes |
|
|
168
|
+
|-------------|--------------------------------------------|---------------------------------|
|
|
169
|
+
| OpenAI | `ruby_llm/gpt-4o-mini` | Auto-detected from registry |
|
|
170
|
+
| Anthropic | `ruby_llm/claude-sonnet-4-20250514` | Auto-detected from registry |
|
|
171
|
+
| Gemini | `ruby_llm/gemini-2.5-flash` | Auto-detected from registry |
|
|
172
|
+
| DeepSeek | `ruby_llm/deepseek-chat` | Auto-detected from registry |
|
|
173
|
+
| Mistral | `ruby_llm/mistral-large` | Auto-detected from registry |
|
|
174
|
+
| Ollama | `ruby_llm/llama3.2` | Use `provider: 'ollama'` |
|
|
175
|
+
| AWS Bedrock | `ruby_llm/anthropic.claude-3-5-sonnet` | Configure RubyLLM globally |
|
|
176
|
+
| VertexAI | `ruby_llm/gemini-pro` | Configure RubyLLM globally |
|
|
177
|
+
| OpenRouter | `ruby_llm/anthropic/claude-3-opus` | Use `provider: 'openrouter'` |
|
|
178
|
+
| Perplexity | `ruby_llm/llama-3.1-sonar-large` | Use `provider: 'perplexity'` |
|
|
179
|
+
| GPUStack | `ruby_llm/model-name` | Use `provider: 'gpustack'` |
|
|
180
|
+
|
|
181
|
+
---
|
|
182
|
+
|
|
183
|
+
## Rails Initializer Pattern
|
|
184
|
+
|
|
185
|
+
Configure DSPy inside an `after_initialize` block so Rails credentials and environment are fully loaded:
|
|
186
|
+
|
|
187
|
+
```ruby
|
|
188
|
+
# config/initializers/dspy.rb
|
|
189
|
+
Rails.application.config.after_initialize do
|
|
190
|
+
return if Rails.env.test? # skip in test -- use VCR cassettes instead
|
|
191
|
+
|
|
192
|
+
DSPy.configure do |config|
|
|
193
|
+
config.lm = DSPy::LM.new(
|
|
194
|
+
'openai/gpt-4o-mini',
|
|
195
|
+
api_key: Rails.application.credentials.openai_api_key,
|
|
196
|
+
structured_outputs: true
|
|
197
|
+
)
|
|
198
|
+
|
|
199
|
+
config.logger = if Rails.env.production?
|
|
200
|
+
Dry.Logger(:dspy, formatter: :json) do |logger|
|
|
201
|
+
logger.add_backend(stream: Rails.root.join("log/dspy.log"))
|
|
202
|
+
end
|
|
203
|
+
else
|
|
204
|
+
Dry.Logger(:dspy) do |logger|
|
|
205
|
+
logger.add_backend(level: :debug, stream: $stdout)
|
|
206
|
+
end
|
|
207
|
+
end
|
|
208
|
+
end
|
|
209
|
+
end
|
|
210
|
+
```
|
|
211
|
+
|
|
212
|
+
Key points:
|
|
213
|
+
|
|
214
|
+
- Wrap in `after_initialize` so `Rails.application.credentials` is available.
|
|
215
|
+
- Return early in the test environment. Rely on VCR cassettes for deterministic LLM responses.
|
|
216
|
+
- Set `structured_outputs: true` (the default) for provider-native JSON extraction.
|
|
217
|
+
- Use `Dry.Logger` with `:json` formatter in production for structured log parsing.
|
|
218
|
+
|
|
219
|
+
---
|
|
220
|
+
|
|
221
|
+
## Fiber-Local LM Context
|
|
222
|
+
|
|
223
|
+
`DSPy.with_lm` sets a temporary language-model override scoped to the current Fiber. Every predictor call inside the block uses the override; outside the block the previous LM takes effect again.
|
|
224
|
+
|
|
225
|
+
```ruby
|
|
226
|
+
fast = DSPy::LM.new('openai/gpt-4o-mini', api_key: ENV['OPENAI_API_KEY'])
|
|
227
|
+
powerful = DSPy::LM.new('anthropic/claude-sonnet-4-20250514', api_key: ENV['ANTHROPIC_API_KEY'])
|
|
228
|
+
|
|
229
|
+
classifier = Classifier.new
|
|
230
|
+
|
|
231
|
+
# Uses the global LM
|
|
232
|
+
result = classifier.call(text: "Hello")
|
|
233
|
+
|
|
234
|
+
# Temporarily switch to the fast model
|
|
235
|
+
DSPy.with_lm(fast) do
|
|
236
|
+
result = classifier.call(text: "Hello") # uses gpt-4o-mini
|
|
237
|
+
end
|
|
238
|
+
|
|
239
|
+
# Temporarily switch to the powerful model
|
|
240
|
+
DSPy.with_lm(powerful) do
|
|
241
|
+
result = classifier.call(text: "Hello") # uses claude-sonnet-4
|
|
242
|
+
end
|
|
243
|
+
```
|
|
244
|
+
|
|
245
|
+
### LM Resolution Hierarchy
|
|
246
|
+
|
|
247
|
+
DSPy resolves the active language model in this order:
|
|
248
|
+
|
|
249
|
+
1. **Instance-level LM** -- set directly on a module instance via `configure`
|
|
250
|
+
2. **Fiber-local LM** -- set via `DSPy.with_lm`
|
|
251
|
+
3. **Global LM** -- set via `DSPy.configure`
|
|
252
|
+
|
|
253
|
+
Instance-level configuration always wins, even inside a `DSPy.with_lm` block:
|
|
254
|
+
|
|
255
|
+
```ruby
|
|
256
|
+
classifier = Classifier.new
|
|
257
|
+
classifier.configure { |c| c.lm = DSPy::LM.new('anthropic/claude-sonnet-4-20250514', api_key: ENV['ANTHROPIC_API_KEY']) }
|
|
258
|
+
|
|
259
|
+
fast = DSPy::LM.new('openai/gpt-4o-mini', api_key: ENV['OPENAI_API_KEY'])
|
|
260
|
+
|
|
261
|
+
DSPy.with_lm(fast) do
|
|
262
|
+
classifier.call(text: "Test") # still uses claude-sonnet-4 (instance-level wins)
|
|
263
|
+
end
|
|
264
|
+
```
|
|
265
|
+
|
|
266
|
+
### configure_predictor for Fine-Grained Agent Control
|
|
267
|
+
|
|
268
|
+
Complex agents (`ReAct`, `CodeAct`, `DeepResearch`, `DeepSearch`) contain internal predictors. Use `configure` for a blanket override and `configure_predictor` to target a specific sub-predictor:
|
|
269
|
+
|
|
270
|
+
```ruby
|
|
271
|
+
agent = DSPy::ReAct.new(MySignature, tools: tools)
|
|
272
|
+
|
|
273
|
+
# Set a default LM for the agent and all its children
|
|
274
|
+
agent.configure { |c| c.lm = DSPy::LM.new('openai/gpt-4o-mini', api_key: ENV['OPENAI_API_KEY']) }
|
|
275
|
+
|
|
276
|
+
# Override just the reasoning predictor with a more capable model
|
|
277
|
+
agent.configure_predictor('thought_generator') do |c|
|
|
278
|
+
c.lm = DSPy::LM.new('anthropic/claude-sonnet-4-20250514', api_key: ENV['ANTHROPIC_API_KEY'])
|
|
279
|
+
end
|
|
280
|
+
|
|
281
|
+
result = agent.call(question: "Summarize the report")
|
|
282
|
+
```
|
|
283
|
+
|
|
284
|
+
Both methods support chaining:
|
|
285
|
+
|
|
286
|
+
```ruby
|
|
287
|
+
agent
|
|
288
|
+
.configure { |c| c.lm = cheap_model }
|
|
289
|
+
.configure_predictor('thought_generator') { |c| c.lm = expensive_model }
|
|
290
|
+
```
|
|
291
|
+
|
|
292
|
+
#### Available Predictors by Agent Type
|
|
293
|
+
|
|
294
|
+
| Agent | Internal Predictors |
|
|
295
|
+
|----------------------|------------------------------------------------------------------|
|
|
296
|
+
| `DSPy::ReAct` | `thought_generator`, `observation_processor` |
|
|
297
|
+
| `DSPy::CodeAct` | `code_generator`, `observation_processor` |
|
|
298
|
+
| `DSPy::DeepResearch` | `planner`, `synthesizer`, `qa_reviewer`, `reporter` |
|
|
299
|
+
| `DSPy::DeepSearch` | `seed_predictor`, `search_predictor`, `reader_predictor`, `reason_predictor` |
|
|
300
|
+
|
|
301
|
+
#### Propagation Rules
|
|
302
|
+
|
|
303
|
+
- Configuration propagates recursively to children and grandchildren.
|
|
304
|
+
- Children with an already-configured LM are **not** overwritten by a later parent `configure` call.
|
|
305
|
+
- Configure the parent first, then override specific children.
|
|
306
|
+
|
|
307
|
+
---
|
|
308
|
+
|
|
309
|
+
## Feature-Flagged Model Selection
|
|
310
|
+
|
|
311
|
+
Use a `FeatureFlags` module backed by ENV vars to centralize model selection. Each tool or agent reads its model from the flags, falling back to a global default.
|
|
312
|
+
|
|
313
|
+
```ruby
|
|
314
|
+
module FeatureFlags
|
|
315
|
+
module_function
|
|
316
|
+
|
|
317
|
+
def default_model
|
|
318
|
+
ENV.fetch('DSPY_DEFAULT_MODEL', 'openai/gpt-4o-mini')
|
|
319
|
+
end
|
|
320
|
+
|
|
321
|
+
def default_api_key
|
|
322
|
+
ENV.fetch('DSPY_DEFAULT_API_KEY') { ENV.fetch('OPENAI_API_KEY', nil) }
|
|
323
|
+
end
|
|
324
|
+
|
|
325
|
+
def model_for(tool_name)
|
|
326
|
+
env_key = "DSPY_MODEL_#{tool_name.upcase}"
|
|
327
|
+
ENV.fetch(env_key, default_model)
|
|
328
|
+
end
|
|
329
|
+
|
|
330
|
+
def api_key_for(tool_name)
|
|
331
|
+
env_key = "DSPY_API_KEY_#{tool_name.upcase}"
|
|
332
|
+
ENV.fetch(env_key, default_api_key)
|
|
333
|
+
end
|
|
334
|
+
end
|
|
335
|
+
```
|
|
336
|
+
|
|
337
|
+
### Per-Tool Model Override
|
|
338
|
+
|
|
339
|
+
Override an individual tool's model without touching application code:
|
|
340
|
+
|
|
341
|
+
```bash
|
|
342
|
+
# .env
|
|
343
|
+
DSPY_DEFAULT_MODEL=openai/gpt-4o-mini
|
|
344
|
+
DSPY_DEFAULT_API_KEY=sk-...
|
|
345
|
+
|
|
346
|
+
# Override the classifier to use Claude
|
|
347
|
+
DSPY_MODEL_CLASSIFIER=anthropic/claude-sonnet-4-20250514
|
|
348
|
+
DSPY_API_KEY_CLASSIFIER=sk-ant-...
|
|
349
|
+
|
|
350
|
+
# Override the summarizer to use Gemini
|
|
351
|
+
DSPY_MODEL_SUMMARIZER=gemini/gemini-2.5-flash
|
|
352
|
+
DSPY_API_KEY_SUMMARIZER=...
|
|
353
|
+
```
|
|
354
|
+
|
|
355
|
+
Wire each agent to its flag at initialization:
|
|
356
|
+
|
|
357
|
+
```ruby
|
|
358
|
+
class ClassifierAgent < DSPy::Module
|
|
359
|
+
def initialize
|
|
360
|
+
super
|
|
361
|
+
model = FeatureFlags.model_for('classifier')
|
|
362
|
+
api_key = FeatureFlags.api_key_for('classifier')
|
|
363
|
+
|
|
364
|
+
@predictor = DSPy::Predict.new(ClassifySignature)
|
|
365
|
+
configure { |c| c.lm = DSPy::LM.new(model, api_key: api_key) }
|
|
366
|
+
end
|
|
367
|
+
|
|
368
|
+
def forward(text:)
|
|
369
|
+
@predictor.call(text: text)
|
|
370
|
+
end
|
|
371
|
+
end
|
|
372
|
+
```
|
|
373
|
+
|
|
374
|
+
This pattern keeps model routing declarative and avoids scattering `DSPy::LM.new` calls across the codebase.
|
|
375
|
+
|
|
376
|
+
---
|
|
377
|
+
|
|
378
|
+
## Compatibility Matrix
|
|
379
|
+
|
|
380
|
+
Feature support across direct adapter gems. All features listed assume `structured_outputs: true` (the default).
|
|
381
|
+
|
|
382
|
+
| Feature | OpenAI | Anthropic | Gemini | Ollama | OpenRouter | RubyLLM |
|
|
383
|
+
|----------------------|--------|-----------|--------|----------|------------|-------------|
|
|
384
|
+
| Structured Output | Native JSON mode | Tool-based extraction | Native JSON schema | OpenAI-compatible JSON | Varies by model | Via `with_schema` |
|
|
385
|
+
| Vision (Images) | File + URL | File + Base64 | File + Base64 | Limited | Varies | Delegates to underlying provider |
|
|
386
|
+
| Image URLs | Yes | No | No | No | Varies | Depends on provider |
|
|
387
|
+
| Tool Calling | Yes | Yes | Yes | Varies | Varies | Yes |
|
|
388
|
+
| Streaming | Yes | Yes | Yes | Yes | Yes | Yes |
|
|
389
|
+
|
|
390
|
+
**Notes:**
|
|
391
|
+
|
|
392
|
+
- **Structured Output** is enabled by default on every adapter. Set `structured_outputs: false` to fall back to enhanced-prompting extraction.
|
|
393
|
+
- **Vision / Image URLs:** Only OpenAI supports passing a URL directly. For Anthropic and Gemini, load images from file or Base64:
|
|
394
|
+
```ruby
|
|
395
|
+
DSPy::Image.from_url("https://example.com/img.jpg") # OpenAI only
|
|
396
|
+
DSPy::Image.from_file("path/to/image.jpg") # all providers
|
|
397
|
+
DSPy::Image.from_base64(data, mime_type: "image/jpeg") # all providers
|
|
398
|
+
```
|
|
399
|
+
- **RubyLLM** delegates to the underlying provider, so feature support matches the provider column in the table.
|
|
400
|
+
|
|
401
|
+
### Choosing an Adapter Strategy
|
|
402
|
+
|
|
403
|
+
| Scenario | Recommended Adapter |
|
|
404
|
+
|-------------------------------------------|--------------------------------|
|
|
405
|
+
| Single provider (OpenAI, Claude, or Gemini) | Dedicated gem (`dspy-openai`, `dspy-anthropic`, `dspy-gemini`) |
|
|
406
|
+
| Multi-provider with per-agent model routing | `dspy-ruby_llm` |
|
|
407
|
+
| AWS Bedrock or Google VertexAI | `dspy-ruby_llm` |
|
|
408
|
+
| Local development with Ollama | `dspy-openai` (Ollama sub-adapter) or `dspy-ruby_llm` |
|
|
409
|
+
| OpenRouter for cost optimization | `dspy-openai` (OpenRouter sub-adapter) |
|
|
410
|
+
|
|
411
|
+
### Current Recommended Models
|
|
412
|
+
|
|
413
|
+
| Provider | Model ID | Use Case |
|
|
414
|
+
|-----------|---------------------------------------|-----------------------|
|
|
415
|
+
| OpenAI | `openai/gpt-4o-mini` | Fast, cost-effective |
|
|
416
|
+
| Anthropic | `anthropic/claude-sonnet-4-20250514` | Balanced reasoning |
|
|
417
|
+
| Gemini | `gemini/gemini-2.5-flash` | Fast, cost-effective |
|
|
418
|
+
| Ollama | `ollama/llama3.2` | Local, zero API cost |
|