codeoptix 0.1.0__tar.gz → 0.1.2__tar.gz

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.
Files changed (175) hide show
  1. {codeoptix-0.1.0 → codeoptix-0.1.2}/PKG-INFO +51 -60
  2. {codeoptix-0.1.0 → codeoptix-0.1.2}/README.md +16 -14
  3. {codeoptix-0.1.0 → codeoptix-0.1.2}/pyproject.toml +7 -4
  4. codeoptix-0.1.2/setup.cfg +4 -0
  5. {codeoptix-0.1.0 → codeoptix-0.1.2}/src/codeoptix/__init__.py +1 -1
  6. {codeoptix-0.1.0 → codeoptix-0.1.2}/src/codeoptix/adapters/basic.py +4 -4
  7. {codeoptix-0.1.0 → codeoptix-0.1.2}/src/codeoptix/adapters/claude_code.py +6 -3
  8. {codeoptix-0.1.0 → codeoptix-0.1.2}/src/codeoptix/cli.py +32 -10
  9. {codeoptix-0.1.0 → codeoptix-0.1.2}/src/codeoptix/linters/html_accessibility_linter.py +2 -2
  10. {codeoptix-0.1.0 → codeoptix-0.1.2}/src/codeoptix/utils/llm.py +12 -14
  11. codeoptix-0.1.2/src/codeoptix.egg-info/PKG-INFO +295 -0
  12. codeoptix-0.1.2/src/codeoptix.egg-info/SOURCES.txt +109 -0
  13. codeoptix-0.1.2/src/codeoptix.egg-info/dependency_links.txt +1 -0
  14. codeoptix-0.1.2/src/codeoptix.egg-info/entry_points.txt +2 -0
  15. codeoptix-0.1.2/src/codeoptix.egg-info/requires.txt +36 -0
  16. codeoptix-0.1.2/src/codeoptix.egg-info/top_level.txt +1 -0
  17. {codeoptix-0.1.0 → codeoptix-0.1.2}/tests/test_behaviors_coverage.py +1 -2
  18. {codeoptix-0.1.0 → codeoptix-0.1.2}/tests/test_cli_commands.py +0 -1
  19. codeoptix-0.1.0/.claude/settings.local.json +0 -9
  20. codeoptix-0.1.0/.github/ISSUE_TEMPLATE/bug_report.md +0 -34
  21. codeoptix-0.1.0/.github/ISSUE_TEMPLATE/feature_request.md +0 -20
  22. codeoptix-0.1.0/.github/PULL_REQUEST_TEMPLATE.md +0 -29
  23. codeoptix-0.1.0/.github/workflows/ci.yml +0 -73
  24. codeoptix-0.1.0/.github/workflows/docs.yml +0 -73
  25. codeoptix-0.1.0/.gitignore +0 -173
  26. codeoptix-0.1.0/.pre-commit-config.yaml +0 -34
  27. codeoptix-0.1.0/CHANGELOG.md +0 -33
  28. codeoptix-0.1.0/CODE_OF_CONDUCT.md +0 -79
  29. codeoptix-0.1.0/CONTRIBUTING.md +0 -118
  30. codeoptix-0.1.0/SECURITY.md +0 -49
  31. codeoptix-0.1.0/assets/CodeOptiX_Fav.png +0 -0
  32. codeoptix-0.1.0/assets/CodeOptiX_Logo.png +0 -0
  33. codeoptix-0.1.0/docs/advanced/bloom.md +0 -530
  34. codeoptix-0.1.0/docs/advanced/error-handling.md +0 -209
  35. codeoptix-0.1.0/docs/advanced/gepa.md +0 -244
  36. codeoptix-0.1.0/docs/advanced/performance.md +0 -335
  37. codeoptix-0.1.0/docs/api-reference.md +0 -343
  38. codeoptix-0.1.0/docs/assets/CodeOptiX_Fav.png +0 -0
  39. codeoptix-0.1.0/docs/assets/CodeOptiX_Logo.png +0 -0
  40. codeoptix-0.1.0/docs/concepts/acp.md +0 -313
  41. codeoptix-0.1.0/docs/concepts/adapters.md +0 -260
  42. codeoptix-0.1.0/docs/concepts/behaviors.md +0 -292
  43. codeoptix-0.1.0/docs/concepts/evaluation.md +0 -344
  44. codeoptix-0.1.0/docs/concepts/evolution.md +0 -269
  45. codeoptix-0.1.0/docs/concepts/overview.md +0 -204
  46. codeoptix-0.1.0/docs/concepts/reflection.md +0 -205
  47. codeoptix-0.1.0/docs/examples/acp-integration-examples.md +0 -164
  48. codeoptix-0.1.0/docs/examples/adapter-usage.md +0 -107
  49. codeoptix-0.1.0/docs/examples/behavioral-spec.md +0 -80
  50. codeoptix-0.1.0/docs/examples/gepa-demo.md +0 -101
  51. codeoptix-0.1.0/docs/getting-started/first-evaluation.md +0 -333
  52. codeoptix-0.1.0/docs/getting-started/installation.md +0 -248
  53. codeoptix-0.1.0/docs/getting-started/quickstart.md +0 -349
  54. codeoptix-0.1.0/docs/getting-started/single-behavior-quickstart.md +0 -241
  55. codeoptix-0.1.0/docs/guides/acp-integration.md +0 -449
  56. codeoptix-0.1.0/docs/guides/cli-usage.md +0 -795
  57. codeoptix-0.1.0/docs/guides/configuration.md +0 -260
  58. codeoptix-0.1.0/docs/guides/custom-behaviors.md +0 -256
  59. codeoptix-0.1.0/docs/guides/github-actions.md +0 -251
  60. codeoptix-0.1.0/docs/guides/ollama-integration.md +0 -323
  61. codeoptix-0.1.0/docs/guides/performance-testing.md +0 -469
  62. codeoptix-0.1.0/docs/guides/python-api.md +0 -518
  63. codeoptix-0.1.0/docs/guides/ui-testing.md +0 -428
  64. codeoptix-0.1.0/docs/index.md +0 -661
  65. codeoptix-0.1.0/docs/stylesheets/extra.css +0 -624
  66. codeoptix-0.1.0/docs/stylesheets/gradients.css +0 -126
  67. codeoptix-0.1.0/docs/stylesheets/syntax.css +0 -592
  68. codeoptix-0.1.0/examples/README.md +0 -152
  69. codeoptix-0.1.0/examples/basic_adapter_usage.py +0 -86
  70. codeoptix-0.1.0/examples/behavioral_spec_example.py +0 -275
  71. codeoptix-0.1.0/examples/configs/README.md +0 -100
  72. codeoptix-0.1.0/examples/configs/basic.yaml +0 -23
  73. codeoptix-0.1.0/examples/configs/ci-cd.yaml +0 -25
  74. codeoptix-0.1.0/examples/configs/ollama-insecure-code.yaml +0 -25
  75. codeoptix-0.1.0/examples/configs/single-behavior-insecure-code.yaml +0 -25
  76. codeoptix-0.1.0/examples/configs/single-behavior-plan-drift.yaml +0 -21
  77. codeoptix-0.1.0/examples/configs/single-behavior-vacuous-tests.yaml +0 -23
  78. codeoptix-0.1.0/examples/quickstart-single-behavior.py +0 -154
  79. codeoptix-0.1.0/mkdocs.yml +0 -114
  80. codeoptix-0.1.0/tests/__init__.py +0 -1
  81. codeoptix-0.1.0/tests/conftest.py +0 -203
  82. codeoptix-0.1.0/uv.lock +0 -2527
  83. {codeoptix-0.1.0 → codeoptix-0.1.2}/LICENSE +0 -0
  84. {codeoptix-0.1.0 → codeoptix-0.1.2}/MANIFEST.in +0 -0
  85. {codeoptix-0.1.0 → codeoptix-0.1.2}/src/codeoptix/acp/__init__.py +0 -0
  86. {codeoptix-0.1.0 → codeoptix-0.1.2}/src/codeoptix/acp/agent.py +0 -0
  87. {codeoptix-0.1.0 → codeoptix-0.1.2}/src/codeoptix/acp/bridge.py +0 -0
  88. {codeoptix-0.1.0 → codeoptix-0.1.2}/src/codeoptix/acp/client_adapter.py +0 -0
  89. {codeoptix-0.1.0 → codeoptix-0.1.2}/src/codeoptix/acp/code_extractor.py +0 -0
  90. {codeoptix-0.1.0 → codeoptix-0.1.2}/src/codeoptix/acp/orchestrator.py +0 -0
  91. {codeoptix-0.1.0 → codeoptix-0.1.2}/src/codeoptix/acp/registry.py +0 -0
  92. {codeoptix-0.1.0 → codeoptix-0.1.2}/src/codeoptix/adapters/__init__.py +0 -0
  93. {codeoptix-0.1.0 → codeoptix-0.1.2}/src/codeoptix/adapters/base.py +0 -0
  94. {codeoptix-0.1.0 → codeoptix-0.1.2}/src/codeoptix/adapters/codex.py +0 -0
  95. {codeoptix-0.1.0 → codeoptix-0.1.2}/src/codeoptix/adapters/factory.py +0 -0
  96. {codeoptix-0.1.0 → codeoptix-0.1.2}/src/codeoptix/adapters/gemini_cli.py +0 -0
  97. {codeoptix-0.1.0 → codeoptix-0.1.2}/src/codeoptix/artifacts/__init__.py +0 -0
  98. {codeoptix-0.1.0 → codeoptix-0.1.2}/src/codeoptix/artifacts/manager.py +0 -0
  99. {codeoptix-0.1.0 → codeoptix-0.1.2}/src/codeoptix/behaviors/__init__.py +0 -0
  100. {codeoptix-0.1.0 → codeoptix-0.1.2}/src/codeoptix/behaviors/base.py +0 -0
  101. {codeoptix-0.1.0 → codeoptix-0.1.2}/src/codeoptix/behaviors/insecure_code.py +0 -0
  102. {codeoptix-0.1.0 → codeoptix-0.1.2}/src/codeoptix/behaviors/plan_drift.py +0 -0
  103. {codeoptix-0.1.0 → codeoptix-0.1.2}/src/codeoptix/behaviors/vacuous_tests.py +0 -0
  104. {codeoptix-0.1.0 → codeoptix-0.1.2}/src/codeoptix/evaluation/__init__.py +0 -0
  105. {codeoptix-0.1.0 → codeoptix-0.1.2}/src/codeoptix/evaluation/bloom_integration.py +0 -0
  106. {codeoptix-0.1.0 → codeoptix-0.1.2}/src/codeoptix/evaluation/engine.py +0 -0
  107. {codeoptix-0.1.0 → codeoptix-0.1.2}/src/codeoptix/evaluation/evaluators.py +0 -0
  108. {codeoptix-0.1.0 → codeoptix-0.1.2}/src/codeoptix/evaluation/scenario_generator.py +0 -0
  109. {codeoptix-0.1.0 → codeoptix-0.1.2}/src/codeoptix/evolution/__init__.py +0 -0
  110. {codeoptix-0.1.0 → codeoptix-0.1.2}/src/codeoptix/evolution/engine.py +0 -0
  111. {codeoptix-0.1.0 → codeoptix-0.1.2}/src/codeoptix/evolution/gepa_integration.py +0 -0
  112. {codeoptix-0.1.0 → codeoptix-0.1.2}/src/codeoptix/evolution/proposer.py +0 -0
  113. {codeoptix-0.1.0 → codeoptix-0.1.2}/src/codeoptix/linters/__init__.py +0 -0
  114. {codeoptix-0.1.0 → codeoptix-0.1.2}/src/codeoptix/linters/bandit_linter.py +0 -0
  115. {codeoptix-0.1.0 → codeoptix-0.1.2}/src/codeoptix/linters/base.py +0 -0
  116. {codeoptix-0.1.0 → codeoptix-0.1.2}/src/codeoptix/linters/coverage_linter.py +0 -0
  117. {codeoptix-0.1.0 → codeoptix-0.1.2}/src/codeoptix/linters/flake8_linter.py +0 -0
  118. {codeoptix-0.1.0 → codeoptix-0.1.2}/src/codeoptix/linters/language_detector.py +0 -0
  119. {codeoptix-0.1.0 → codeoptix-0.1.2}/src/codeoptix/linters/mypy_linter.py +0 -0
  120. {codeoptix-0.1.0 → codeoptix-0.1.2}/src/codeoptix/linters/pip_audit_linter.py +0 -0
  121. {codeoptix-0.1.0 → codeoptix-0.1.2}/src/codeoptix/linters/pylint_linter.py +0 -0
  122. {codeoptix-0.1.0 → codeoptix-0.1.2}/src/codeoptix/linters/ruff_linter.py +0 -0
  123. {codeoptix-0.1.0 → codeoptix-0.1.2}/src/codeoptix/linters/runner.py +0 -0
  124. {codeoptix-0.1.0 → codeoptix-0.1.2}/src/codeoptix/linters/safety_linter.py +0 -0
  125. {codeoptix-0.1.0 → codeoptix-0.1.2}/src/codeoptix/reflection/__init__.py +0 -0
  126. {codeoptix-0.1.0 → codeoptix-0.1.2}/src/codeoptix/reflection/engine.py +0 -0
  127. {codeoptix-0.1.0 → codeoptix-0.1.2}/src/codeoptix/reflection/generator.py +0 -0
  128. {codeoptix-0.1.0 → codeoptix-0.1.2}/src/codeoptix/utils/__init__.py +0 -0
  129. {codeoptix-0.1.0 → codeoptix-0.1.2}/src/codeoptix/utils/config.py +0 -0
  130. {codeoptix-0.1.0 → codeoptix-0.1.2}/src/codeoptix/utils/retry.py +0 -0
  131. {codeoptix-0.1.0 → codeoptix-0.1.2}/src/codeoptix/vendor/__init__.py +0 -0
  132. {codeoptix-0.1.0 → codeoptix-0.1.2}/src/codeoptix/vendor/bloom/README.md +0 -0
  133. {codeoptix-0.1.0 → codeoptix-0.1.2}/src/codeoptix/vendor/bloom/__init__.py +0 -0
  134. {codeoptix-0.1.0 → codeoptix-0.1.2}/src/codeoptix/vendor/bloom/globals.py +0 -0
  135. {codeoptix-0.1.0 → codeoptix-0.1.2}/src/codeoptix/vendor/bloom/orchestrators/ConversationOrchestrator.py +0 -0
  136. {codeoptix-0.1.0 → codeoptix-0.1.2}/src/codeoptix/vendor/bloom/orchestrators/SimEnvOrchestrator.py +0 -0
  137. {codeoptix-0.1.0 → codeoptix-0.1.2}/src/codeoptix/vendor/bloom/prompts/configurable_prompts/README.md +0 -0
  138. {codeoptix-0.1.0 → codeoptix-0.1.2}/src/codeoptix/vendor/bloom/prompts/configurable_prompts/default.json +0 -0
  139. {codeoptix-0.1.0 → codeoptix-0.1.2}/src/codeoptix/vendor/bloom/prompts/configurable_prompts/ideation-default.json +0 -0
  140. {codeoptix-0.1.0 → codeoptix-0.1.2}/src/codeoptix/vendor/bloom/prompts/configurable_prompts/mo_animal-welfare.json +0 -0
  141. {codeoptix-0.1.0 → codeoptix-0.1.2}/src/codeoptix/vendor/bloom/prompts/configurable_prompts/mo_contextual-optimism.json +0 -0
  142. {codeoptix-0.1.0 → codeoptix-0.1.2}/src/codeoptix/vendor/bloom/prompts/configurable_prompts/mo_defend-objects.json +0 -0
  143. {codeoptix-0.1.0 → codeoptix-0.1.2}/src/codeoptix/vendor/bloom/prompts/configurable_prompts/mo_defer-to-users.json +0 -0
  144. {codeoptix-0.1.0 → codeoptix-0.1.2}/src/codeoptix/vendor/bloom/prompts/configurable_prompts/mo_emotional-bond.json +0 -0
  145. {codeoptix-0.1.0 → codeoptix-0.1.2}/src/codeoptix/vendor/bloom/prompts/configurable_prompts/mo_flattery.json +0 -0
  146. {codeoptix-0.1.0 → codeoptix-0.1.2}/src/codeoptix/vendor/bloom/prompts/configurable_prompts/mo_hardcode-test-cases.json +0 -0
  147. {codeoptix-0.1.0 → codeoptix-0.1.2}/src/codeoptix/vendor/bloom/prompts/configurable_prompts/mo_increasing-pep.json +0 -0
  148. {codeoptix-0.1.0 → codeoptix-0.1.2}/src/codeoptix/vendor/bloom/prompts/configurable_prompts/mo_research-sandbagging.json +0 -0
  149. {codeoptix-0.1.0 → codeoptix-0.1.2}/src/codeoptix/vendor/bloom/prompts/configurable_prompts/mo_self-promotion.json +0 -0
  150. {codeoptix-0.1.0 → codeoptix-0.1.2}/src/codeoptix/vendor/bloom/prompts/configurable_prompts/sandbag.json +0 -0
  151. {codeoptix-0.1.0 → codeoptix-0.1.2}/src/codeoptix/vendor/bloom/prompts/configurable_prompts/self-preferential-bias.json +0 -0
  152. {codeoptix-0.1.0 → codeoptix-0.1.2}/src/codeoptix/vendor/bloom/prompts/configurable_prompts/static-prompts.yaml +0 -0
  153. {codeoptix-0.1.0 → codeoptix-0.1.2}/src/codeoptix/vendor/bloom/prompts/configurable_prompts/web-search.json +0 -0
  154. {codeoptix-0.1.0 → codeoptix-0.1.2}/src/codeoptix/vendor/bloom/prompts/step1_understanding.py +0 -0
  155. {codeoptix-0.1.0 → codeoptix-0.1.2}/src/codeoptix/vendor/bloom/prompts/step2_ideation.py +0 -0
  156. {codeoptix-0.1.0 → codeoptix-0.1.2}/src/codeoptix/vendor/bloom/prompts/step3_rollout.py +0 -0
  157. {codeoptix-0.1.0 → codeoptix-0.1.2}/src/codeoptix/vendor/bloom/prompts/step4_judgment.py +0 -0
  158. {codeoptix-0.1.0 → codeoptix-0.1.2}/src/codeoptix/vendor/bloom/schemas/behavior.schema.json +0 -0
  159. {codeoptix-0.1.0 → codeoptix-0.1.2}/src/codeoptix/vendor/bloom/schemas/conversation.schema.json +0 -0
  160. {codeoptix-0.1.0 → codeoptix-0.1.2}/src/codeoptix/vendor/bloom/schemas/transcript_schema.json +0 -0
  161. {codeoptix-0.1.0 → codeoptix-0.1.2}/src/codeoptix/vendor/bloom/scripts/step2_ideation.py +0 -0
  162. {codeoptix-0.1.0 → codeoptix-0.1.2}/src/codeoptix/vendor/bloom/scripts/step4_judgment.py +0 -0
  163. {codeoptix-0.1.0 → codeoptix-0.1.2}/src/codeoptix/vendor/bloom/transcript_utils.py +0 -0
  164. {codeoptix-0.1.0 → codeoptix-0.1.2}/src/codeoptix/vendor/bloom/utils.py +0 -0
  165. {codeoptix-0.1.0 → codeoptix-0.1.2}/tests/test_adapter_error_handling.py +0 -0
  166. {codeoptix-0.1.0 → codeoptix-0.1.2}/tests/test_adapters.py +0 -0
  167. {codeoptix-0.1.0 → codeoptix-0.1.2}/tests/test_artifacts.py +0 -0
  168. {codeoptix-0.1.0 → codeoptix-0.1.2}/tests/test_behaviors.py +0 -0
  169. {codeoptix-0.1.0 → codeoptix-0.1.2}/tests/test_cli.py +0 -0
  170. {codeoptix-0.1.0 → codeoptix-0.1.2}/tests/test_evaluation.py +0 -0
  171. {codeoptix-0.1.0 → codeoptix-0.1.2}/tests/test_evaluators.py +0 -0
  172. {codeoptix-0.1.0 → codeoptix-0.1.2}/tests/test_evolution.py +0 -0
  173. {codeoptix-0.1.0 → codeoptix-0.1.2}/tests/test_imports.py +0 -0
  174. {codeoptix-0.1.0 → codeoptix-0.1.2}/tests/test_llm.py +0 -0
  175. {codeoptix-0.1.0 → codeoptix-0.1.2}/tests/test_reflection.py +0 -0
@@ -1,78 +1,76 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: codeoptix
3
- Version: 0.1.0
3
+ Version: 0.1.2
4
4
  Summary: Agentic Code Optimization & Deep Evaluation for Superior Coding Agent Experience. Built by Superagentic AI.
5
+ Author-email: Shashi Jagtap <shashi@super-agentic.ai>, Shashi Jagtap <shashikant.jagtap@icloud.com>
6
+ Maintainer-email: Shashi Jagtap <team@super-agentic.ai>, Shashi Jagtap <shashikant.jagtap@icloud.com>
7
+ License: Apache-2.0
5
8
  Project-URL: Homepage, https://github.com/SuperagenticAI/codeoptix
6
9
  Project-URL: Documentation, https://superagenticai.github.io/codeoptix
7
10
  Project-URL: Repository, https://github.com/SuperagenticAI/codeoptix
8
11
  Project-URL: Issues, https://github.com/SuperagenticAI/codeoptix/issues
9
12
  Project-URL: Changelog, https://github.com/SuperagenticAI/codeoptix/blob/main/CHANGELOG.md
10
- Author-email: Shashi Jagtap <shashi@super-agentic.ai>, Shashi Jagtap <shashikant.jagtap@icloud.com>
11
- Maintainer-email: Shashi Jagtap <team@super-agentic.ai>, Shashi Jagtap <shashikant.jagtap@icloud.com>
12
- License: Apache-2.0
13
- License-File: LICENSE
14
- Keywords: agent-experience,agentic-coding,ai,behavioral-optimization,code-evaluation,coding-agents,deep-evaluation
13
+ Keywords: ai,coding-agents,behavioral-optimization,code-evaluation,agent-experience,deep-evaluation,agentic-coding
15
14
  Classifier: Development Status :: 3 - Alpha
16
- Classifier: Framework :: Pydantic
17
15
  Classifier: Intended Audience :: Developers
18
16
  Classifier: Intended Audience :: Science/Research
19
17
  Classifier: License :: OSI Approved :: Apache Software License
20
- Classifier: Operating System :: OS Independent
21
18
  Classifier: Programming Language :: Python :: 3
22
19
  Classifier: Programming Language :: Python :: 3.12
23
20
  Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
24
21
  Classifier: Topic :: Software Development :: Libraries :: Python Modules
25
22
  Classifier: Topic :: Software Development :: Quality Assurance
26
23
  Classifier: Topic :: Software Development :: Testing
24
+ Classifier: Operating System :: OS Independent
25
+ Classifier: Framework :: Pydantic
27
26
  Requires-Python: >=3.12
28
- Requires-Dist: agent-client-protocol>=0.7.0
29
- Requires-Dist: anthropic>=0.75.0
27
+ Description-Content-Type: text/markdown
28
+ License-File: LICENSE
29
+ Requires-Dist: pydantic>=2.0.0
30
+ Requires-Dist: pyyaml>=6.0
30
31
  Requires-Dist: click>=8.0.0
31
- Requires-Dist: gepa==0.0.22
32
+ Requires-Dist: anthropic>=0.75.0
33
+ Requires-Dist: openai>=2.0.0
32
34
  Requires-Dist: google-genai>=0.8.0
33
- Requires-Dist: litellm>=1.80.0
34
35
  Requires-Dist: numpy>=1.24.0
35
- Requires-Dist: openai>=2.0.0
36
- Requires-Dist: pydantic>=2.0.0
37
- Requires-Dist: pyyaml>=6.0
36
+ Requires-Dist: litellm>=1.80.0
38
37
  Requires-Dist: tenacity>=8.0.0
39
- Provides-Extra: accessibility
40
- Provides-Extra: all
41
- Requires-Dist: bandit>=1.7.0; extra == 'all'
42
- Requires-Dist: coverage>=7.0.0; extra == 'all'
43
- Requires-Dist: hatchling; extra == 'all'
44
- Requires-Dist: mkdocs-material>=9.4.0; extra == 'all'
45
- Requires-Dist: mkdocs-minify-plugin>=0.7.0; extra == 'all'
46
- Requires-Dist: mkdocs>=1.5.0; extra == 'all'
47
- Requires-Dist: mypy>=1.0.0; extra == 'all'
48
- Requires-Dist: pre-commit>=3.0.0; extra == 'all'
49
- Requires-Dist: pymdown-extensions>=10.0.0; extra == 'all'
50
- Requires-Dist: pytest-cov>=4.0.0; extra == 'all'
51
- Requires-Dist: pytest>=7.0.0; extra == 'all'
52
- Requires-Dist: ruff>=0.1.0; extra == 'all'
38
+ Requires-Dist: gepa==0.0.22
39
+ Requires-Dist: agent-client-protocol>=0.7.0
53
40
  Provides-Extra: dev
54
- Requires-Dist: coverage>=7.0.0; extra == 'dev'
55
- Requires-Dist: mypy>=1.0.0; extra == 'dev'
56
- Requires-Dist: pre-commit>=3.0.0; extra == 'dev'
57
- Requires-Dist: pytest-cov>=4.0.0; extra == 'dev'
58
- Requires-Dist: pytest>=7.0.0; extra == 'dev'
59
- Requires-Dist: ruff>=0.1.0; extra == 'dev'
60
- Provides-Extra: docs
61
- Requires-Dist: hatchling; extra == 'docs'
62
- Requires-Dist: mkdocs-material>=9.4.0; extra == 'docs'
63
- Requires-Dist: mkdocs-minify-plugin>=0.7.0; extra == 'docs'
64
- Requires-Dist: mkdocs>=1.5.0; extra == 'docs'
65
- Requires-Dist: pymdown-extensions>=10.0.0; extra == 'docs'
41
+ Requires-Dist: pytest>=7.0.0; extra == "dev"
42
+ Requires-Dist: pytest-cov>=4.0.0; extra == "dev"
43
+ Requires-Dist: coverage>=7.0.0; extra == "dev"
44
+ Requires-Dist: ruff>=0.1.0; extra == "dev"
45
+ Requires-Dist: mypy>=1.0.0; extra == "dev"
46
+ Requires-Dist: pre-commit>=3.0.0; extra == "dev"
66
47
  Provides-Extra: testing
67
- Requires-Dist: bandit>=1.7.0; extra == 'testing'
68
- Requires-Dist: coverage>=7.0.0; extra == 'testing'
69
- Requires-Dist: pytest-cov>=4.0.0; extra == 'testing'
70
- Requires-Dist: pytest>=7.0.0; extra == 'testing'
71
- Description-Content-Type: text/markdown
48
+ Requires-Dist: pytest>=7.0.0; extra == "testing"
49
+ Requires-Dist: pytest-cov>=4.0.0; extra == "testing"
50
+ Requires-Dist: coverage>=7.0.0; extra == "testing"
51
+ Requires-Dist: bandit>=1.7.0; extra == "testing"
52
+ Provides-Extra: docs
53
+ Requires-Dist: mkdocs>=1.5.0; extra == "docs"
54
+ Requires-Dist: mkdocs-material>=9.4.0; extra == "docs"
55
+ Requires-Dist: pymdown-extensions>=10.0.0; extra == "docs"
56
+ Requires-Dist: mkdocs-minify-plugin>=0.7.0; extra == "docs"
57
+ Provides-Extra: all
58
+ Requires-Dist: codeoptix[dev,docs,testing]; extra == "all"
59
+ Provides-Extra: accessibility
60
+ Dynamic: license-file
61
+
62
+
63
+ [![PyPI version](https://badge.fury.io/py/codeoptix.svg)](https://pypi.org/project/codeoptix/)
64
+ [![CI](https://github.com/SuperagenticAI/codeoptix/actions/workflows/ci.yml/badge.svg)](https://github.com/SuperagenticAI/codeoptix/actions/workflows/ci.yml)
65
+ [![codecov](https://codecov.io/gh/SuperagenticAI/codeoptix/branch/main/graph/badge.svg)](https://codecov.io/gh/SuperagenticAI/codeoptix)
66
+ [![Docs](https://img.shields.io/badge/docs-latest-blue.svg)](https://superagenticai.github.io/codeoptix/)
67
+ [![Python 3.12+](https://img.shields.io/badge/python-3.12+-blue.svg)](https://www.python.org/downloads/)
68
+ [![License: Apache 2.0](https://img.shields.io/badge/License-Apache%202.0-blue.svg)](https://opensource.org/licenses/Apache-2.0)
69
+ [![Code style: ruff](https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/astral-sh/ruff/main/assets/badge/v2.json)](https://github.com/astral-sh/ruff)
72
70
 
73
71
  <div align="center">
74
72
 
75
- <img src="https://raw.githubusercontent.com/SuperagenticAI/codeoptix/main/docs/assets/CodeOptiX_Logo.png" alt="CodeOptiX Logo" width="200">
73
+ <img src="https://raw.githubusercontent.com/SuperagenticAI/codeoptix/main/docs/assets/CodeOptiX_Logo.png" alt="CodeOptiX Logo" width="300">
76
74
 
77
75
  # CodeOptiX
78
76
 
@@ -80,22 +78,12 @@ Description-Content-Type: text/markdown
80
78
 
81
79
  *CodeOptiX is the universal code optimization engine that improves coding agent experience with deep evaluations and optimization. When AI coding agents dazzle with impressive code but leave you wondering about quality, maintainability, security, and reliability, CodeOptiX ensures proper behavior through evaluations, reflection, and self-improvement. Powered by GEPA optimization and Bloom scenario generation.*
82
80
 
83
- [![PyPI version](https://badge.fury.io/py/codeoptix.svg)](https://pypi.org/project/codeoptix/)
84
- [![CI](https://github.com/SuperagenticAI/codeoptix/actions/workflows/ci.yml/badge.svg)](https://github.com/SuperagenticAI/codeoptix/actions/workflows/ci.yml)
85
- [![codecov](https://codecov.io/gh/SuperagenticAI/codeoptix/branch/main/graph/badge.svg)](https://codecov.io/gh/SuperagenticAI/codeoptix)
86
- [![Python 3.12+](https://img.shields.io/badge/python-3.12+-blue.svg)](https://www.python.org/downloads/)
87
- [![License: Apache 2.0](https://img.shields.io/badge/License-Apache%202.0-blue.svg)](https://opensource.org/licenses/Apache-2.0)
88
- [![Code style: ruff](https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/astral-sh/ruff/main/assets/badge/v2.json)](https://github.com/astral-sh/ruff)
89
-
90
81
  <p align="center">
91
- <em>Built with ❤️ by <a href="https://super-agentic.ai" target="_blank"><strong>Superagentic AI</strong></a></em><br>
82
+ <em>Brought to you by <a href="https://super-agentic.ai" target="_blank"><strong>Superagentic AI</strong></a></em><br>
92
83
  <em>Advancing AI agent optimization and autonomous systems</em>
93
84
  </p>
94
85
 
95
- [Documentation](https://superagenticai.github.io/codeoptix) |
96
- [Get Started](#-quick-start) |
97
- [Examples](https://github.com/SuperagenticAI/codeoptix/tree/main/examples) |
98
- [Contributing](#-contributing)
86
+ [📚 Documentation](https://superagenticai.github.io/codeoptix/)
99
87
 
100
88
  </div>
101
89
 
@@ -118,6 +106,10 @@ Built by [**Superagentic AI**](https://super-agentic.ai) - *Advancing the future
118
106
  - **🔧 Multi-Provider LLM Support** - OpenAI, Anthropic, Google, and Ollama (local models included!)
119
107
  - **⚡ CI/CD Integration** - Automated quality gates and GitHub Actions support
120
108
 
109
+ ### 📋 Open Source Limitations
110
+
111
+ The open source version provides core evaluation capabilities. Advanced features like agent evolution and optimization have limited support. For full optimization capabilities tailored to your needs, please get in touch.
112
+
121
113
  ---
122
114
 
123
115
  ## Quick Start
@@ -282,7 +274,6 @@ This project is licensed under the Apache License 2.0 - see the [LICENSE](https:
282
274
 
283
275
  - [Documentation](https://superagenticai.github.io/codeoptix)
284
276
  - [GitHub Issues](https://github.com/SuperagenticAI/codeoptix/issues)
285
- - [GitHub Discussions](https://github.com/SuperagenticAI/codeoptix/discussions)
286
277
 
287
278
  ---
288
279
 
@@ -1,6 +1,15 @@
1
+
2
+ [![PyPI version](https://badge.fury.io/py/codeoptix.svg)](https://pypi.org/project/codeoptix/)
3
+ [![CI](https://github.com/SuperagenticAI/codeoptix/actions/workflows/ci.yml/badge.svg)](https://github.com/SuperagenticAI/codeoptix/actions/workflows/ci.yml)
4
+ [![codecov](https://codecov.io/gh/SuperagenticAI/codeoptix/branch/main/graph/badge.svg)](https://codecov.io/gh/SuperagenticAI/codeoptix)
5
+ [![Docs](https://img.shields.io/badge/docs-latest-blue.svg)](https://superagenticai.github.io/codeoptix/)
6
+ [![Python 3.12+](https://img.shields.io/badge/python-3.12+-blue.svg)](https://www.python.org/downloads/)
7
+ [![License: Apache 2.0](https://img.shields.io/badge/License-Apache%202.0-blue.svg)](https://opensource.org/licenses/Apache-2.0)
8
+ [![Code style: ruff](https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/astral-sh/ruff/main/assets/badge/v2.json)](https://github.com/astral-sh/ruff)
9
+
1
10
  <div align="center">
2
11
 
3
- <img src="https://raw.githubusercontent.com/SuperagenticAI/codeoptix/main/docs/assets/CodeOptiX_Logo.png" alt="CodeOptiX Logo" width="200">
12
+ <img src="https://raw.githubusercontent.com/SuperagenticAI/codeoptix/main/docs/assets/CodeOptiX_Logo.png" alt="CodeOptiX Logo" width="300">
4
13
 
5
14
  # CodeOptiX
6
15
 
@@ -8,22 +17,12 @@
8
17
 
9
18
  *CodeOptiX is the universal code optimization engine that improves coding agent experience with deep evaluations and optimization. When AI coding agents dazzle with impressive code but leave you wondering about quality, maintainability, security, and reliability, CodeOptiX ensures proper behavior through evaluations, reflection, and self-improvement. Powered by GEPA optimization and Bloom scenario generation.*
10
19
 
11
- [![PyPI version](https://badge.fury.io/py/codeoptix.svg)](https://pypi.org/project/codeoptix/)
12
- [![CI](https://github.com/SuperagenticAI/codeoptix/actions/workflows/ci.yml/badge.svg)](https://github.com/SuperagenticAI/codeoptix/actions/workflows/ci.yml)
13
- [![codecov](https://codecov.io/gh/SuperagenticAI/codeoptix/branch/main/graph/badge.svg)](https://codecov.io/gh/SuperagenticAI/codeoptix)
14
- [![Python 3.12+](https://img.shields.io/badge/python-3.12+-blue.svg)](https://www.python.org/downloads/)
15
- [![License: Apache 2.0](https://img.shields.io/badge/License-Apache%202.0-blue.svg)](https://opensource.org/licenses/Apache-2.0)
16
- [![Code style: ruff](https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/astral-sh/ruff/main/assets/badge/v2.json)](https://github.com/astral-sh/ruff)
17
-
18
20
  <p align="center">
19
- <em>Built with ❤️ by <a href="https://super-agentic.ai" target="_blank"><strong>Superagentic AI</strong></a></em><br>
21
+ <em>Brought to you by <a href="https://super-agentic.ai" target="_blank"><strong>Superagentic AI</strong></a></em><br>
20
22
  <em>Advancing AI agent optimization and autonomous systems</em>
21
23
  </p>
22
24
 
23
- [Documentation](https://superagenticai.github.io/codeoptix) |
24
- [Get Started](#-quick-start) |
25
- [Examples](https://github.com/SuperagenticAI/codeoptix/tree/main/examples) |
26
- [Contributing](#-contributing)
25
+ [📚 Documentation](https://superagenticai.github.io/codeoptix/)
27
26
 
28
27
  </div>
29
28
 
@@ -46,6 +45,10 @@ Built by [**Superagentic AI**](https://super-agentic.ai) - *Advancing the future
46
45
  - **🔧 Multi-Provider LLM Support** - OpenAI, Anthropic, Google, and Ollama (local models included!)
47
46
  - **⚡ CI/CD Integration** - Automated quality gates and GitHub Actions support
48
47
 
48
+ ### 📋 Open Source Limitations
49
+
50
+ The open source version provides core evaluation capabilities. Advanced features like agent evolution and optimization have limited support. For full optimization capabilities tailored to your needs, please get in touch.
51
+
49
52
  ---
50
53
 
51
54
  ## Quick Start
@@ -210,7 +213,6 @@ This project is licensed under the Apache License 2.0 - see the [LICENSE](https:
210
213
 
211
214
  - [Documentation](https://superagenticai.github.io/codeoptix)
212
215
  - [GitHub Issues](https://github.com/SuperagenticAI/codeoptix/issues)
213
- - [GitHub Discussions](https://github.com/SuperagenticAI/codeoptix/discussions)
214
216
 
215
217
  ---
216
218
 
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "codeoptix"
3
- version = "0.1.0"
3
+ version = "0.1.2"
4
4
  description = "Agentic Code Optimization & Deep Evaluation for Superior Coding Agent Experience. Built by Superagentic AI."
5
5
  readme = "README.md"
6
6
  requires-python = ">=3.12"
@@ -70,7 +70,6 @@ docs = [
70
70
  "mkdocs-material>=9.4.0",
71
71
  "pymdown-extensions>=10.0.0",
72
72
  "mkdocs-minify-plugin>=0.7.0",
73
- "hatchling",
74
73
  ]
75
74
  all = [
76
75
  "codeoptix[dev,testing,docs]",
@@ -84,8 +83,11 @@ accessibility = [
84
83
  codeoptix = "codeoptix.cli:main"
85
84
 
86
85
  [build-system]
87
- requires = ["hatchling"]
88
- build-backend = "hatchling.build"
86
+ requires = ["setuptools>=68.0", "wheel"]
87
+ build-backend = "setuptools.build_meta"
88
+
89
+ [tool.setuptools.packages.find]
90
+ where = ["src"]
89
91
 
90
92
  [tool.ruff]
91
93
  line-length = 100
@@ -145,6 +147,7 @@ ignore = [
145
147
  "DTZ", # datetime timezone (not critical for this project)
146
148
  "EM101", # exception message string literal
147
149
  "EM102", # exception message f-string
150
+ "PLC0415", # import should be at top level (too many existing violations)
148
151
  "PLR0912", # too many branches
149
152
  "PLR0913", # too many arguments
150
153
  "PLR0915", # too many statements
@@ -0,0 +1,4 @@
1
+ [egg_info]
2
+ tag_build =
3
+ tag_date = 0
4
+
@@ -5,4 +5,4 @@ The universal code optimization engine that improves coding agent experience wit
5
5
  Built by Superagentic AI - Advancing AI agent optimization and autonomous systems.
6
6
  """
7
7
 
8
- __version__ = "0.1.0"
8
+ __version__ = "0.1.2"
@@ -25,11 +25,11 @@ class BasicAdapter(AgentAdapter):
25
25
  raise ValueError("BasicAdapter requires 'llm_config' in configuration")
26
26
 
27
27
  # Create LLM client
28
- from codeoptix.utils.llm import create_llm_client, LLMProvider
28
+ from codeoptix.utils.llm import LLMProvider, create_llm_client
29
29
 
30
30
  provider_name = llm_config.get("provider", "ollama")
31
31
  self.llm_client: LLMClient = create_llm_client(
32
- LLMProvider(provider_name), llm_config.get("api_key")
32
+ LLMProvider(provider_name), llm_config.get("api_key"), llm_config.get("model")
33
33
  )
34
34
 
35
35
  # Set model
@@ -154,10 +154,10 @@ Brief explanation of your implementation.
154
154
  if line_lower.startswith("code:") or "```" in line_lower:
155
155
  current_section = "code"
156
156
  continue
157
- elif line_lower.startswith("tests:") or line_lower.startswith("test:"):
157
+ if line_lower.startswith(("tests:", "test:")):
158
158
  current_section = "tests"
159
159
  continue
160
- elif current_section == "code" and line.strip():
160
+ if current_section == "code" and line.strip():
161
161
  # Remove markdown code blocks
162
162
  if "```" in line:
163
163
  continue
@@ -38,9 +38,12 @@ class ClaudeCodeAdapter(AgentAdapter):
38
38
  provider_name = llm_config.get("provider", "anthropic").upper()
39
39
  try:
40
40
  provider = LLMProvider[provider_name]
41
- except KeyError:
42
- # Fallback to ANTHROPIC if invalid provider
43
- provider = LLMProvider.ANTHROPIC
41
+ except KeyError as e:
42
+ supported_providers = ", ".join([p.value for p in LLMProvider])
43
+ raise ValueError(
44
+ f"Invalid LLM provider '{provider_name}'. "
45
+ f"Supported providers: {supported_providers}"
46
+ ) from e
44
47
 
45
48
  # Get API key (not required for Ollama)
46
49
  api_key = None
@@ -147,7 +147,11 @@ def eval(agent, behaviors, output, config, llm_provider, llm_api_key, context, f
147
147
  sys.exit(1)
148
148
 
149
149
  # Normalize provider name and decide if we need an API key
150
- llm_provider = (llm_provider or os.getenv("CODEOPTIX_LLM_PROVIDER", "openai")).lower()
150
+ llm_provider = (
151
+ eval_config.get("llm_provider")
152
+ or llm_provider
153
+ or os.getenv("CODEOPTIX_LLM_PROVIDER", "openai")
154
+ ).lower()
151
155
  is_ollama = llm_provider == "ollama"
152
156
 
153
157
  # Create adapter
@@ -222,7 +226,10 @@ def eval(agent, behaviors, output, config, llm_provider, llm_api_key, context, f
222
226
  click.echo("🧠 Using local Ollama provider.")
223
227
 
224
228
  try:
225
- llm_client = create_llm_client(llm_provider_enum, api_key=api_key)
229
+ llm_config = adapter_config["llm_config"]
230
+ llm_client = create_llm_client(
231
+ LLMProvider(llm_config["provider"]), llm_config.get("api_key"), llm_config.get("model")
232
+ )
226
233
  except Exception as e:
227
234
  click.echo(f"❌ Error: Failed to create LLM client: {e}", err=True)
228
235
  if "api_key" in str(e).lower():
@@ -371,7 +378,13 @@ def reflect(input, output, agent_name):
371
378
  )
372
379
  @click.option("--iterations", default=3, help="Number of evolution iterations")
373
380
  @click.option("--config", type=click.Path(exists=True), help="Path to config file (JSON/YAML)")
374
- def evolve(input, reflection, output, iterations, config):
381
+ @click.option(
382
+ "--llm-provider",
383
+ default="openai",
384
+ help="LLM provider for evolution (anthropic, openai, google, ollama)",
385
+ )
386
+ @click.option("--llm-api-key", help="API key for LLM (or set environment variable)")
387
+ def evolve(input, reflection, output, iterations, config, llm_provider, llm_api_key):
375
388
  """Evolve agent prompts based on evaluation results."""
376
389
  click.echo("🧬 Evolving agent prompts...")
377
390
 
@@ -428,11 +441,18 @@ def evolve(input, reflection, output, iterations, config):
428
441
  metadata = results.get("metadata", {})
429
442
  agent_type = metadata.get("agent", "claude-code")
430
443
 
431
- # Get LLM provider from results or config
432
- llm_provider = evolve_config.get("llm_provider", "openai")
433
- llm_api_key = evolve_config.get("llm_api_key") or os.getenv(f"{llm_provider.upper()}_API_KEY")
444
+ # Get LLM provider from command line or config
445
+ if llm_provider == "openai": # default, check config
446
+ llm_provider = evolve_config.get("llm_provider", "openai")
447
+ # llm_api_key param takes precedence, then config, then env
448
+ llm_api_key = (
449
+ llm_api_key
450
+ or evolve_config.get("llm_api_key")
451
+ or os.getenv(f"{llm_provider.upper()}_API_KEY")
452
+ )
434
453
 
435
- if not llm_api_key:
454
+ is_ollama = llm_provider == "ollama"
455
+ if not llm_api_key and not is_ollama:
436
456
  click.echo(
437
457
  f"❌ LLM API key required. Set {llm_provider.upper()}_API_KEY or use --config", err=True
438
458
  )
@@ -457,9 +477,11 @@ def evolve(input, reflection, output, iterations, config):
457
477
  adapter = create_adapter(agent_type, adapter_config)
458
478
  click.echo(f"✅ Created adapter: {adapter.get_adapter_type()}")
459
479
 
460
- # Create LLM client
461
- llm_provider_enum = LLMProvider[llm_provider.upper()]
462
- llm_client = create_llm_client(llm_provider_enum, api_key=llm_api_key)
480
+ # Create LLM client (use same config as adapter for consistency)
481
+ llm_config = adapter_config["llm_config"]
482
+ llm_client = create_llm_client(
483
+ LLMProvider(llm_config["provider"]), llm_config.get("api_key"), llm_config.get("model")
484
+ )
463
485
 
464
486
  # Create evaluation engine
465
487
  eval_engine_config = evolve_config.get("evaluation", {})
@@ -130,7 +130,7 @@ class HTMLAccessibilityParser(HTMLParser):
130
130
 
131
131
  if tag == "a":
132
132
  if self.links_missing_text:
133
- line, col, attrs = self.links_missing_text[-1]
133
+ _line, _col, attrs = self.links_missing_text[-1]
134
134
  # Only flag as missing if no text AND no aria-label
135
135
  if not text_content and not attrs.get("aria-label"):
136
136
  # Keep as-is; will be converted to issues later
@@ -141,7 +141,7 @@ class HTMLAccessibilityParser(HTMLParser):
141
141
 
142
142
  if tag == "button":
143
143
  if self.buttons_missing_text:
144
- line, col, attrs = self.buttons_missing_text[-1]
144
+ _line, _col, attrs = self.buttons_missing_text[-1]
145
145
  if text_content or attrs.get("aria-label"):
146
146
  # Button has accessible name; drop from missing list
147
147
  self.buttons_missing_text.pop()
@@ -214,7 +214,7 @@ class GoogleClient(LLMClient):
214
214
  class OllamaClient(LLMClient):
215
215
  """Ollama local model client (http://localhost:11434)."""
216
216
 
217
- def __init__(self, api_key: str | None = None):
217
+ def __init__(self, api_key: str | None = None, model: str = "llama3.1", **kwargs: Any):
218
218
  """Initialize Ollama client.
219
219
 
220
220
  api_key is unused but kept for interface compatibility.
@@ -250,7 +250,7 @@ class OllamaClient(LLMClient):
250
250
  """Generate a chat completion using a local Ollama model."""
251
251
  payload = {
252
252
  "model": model,
253
- "messages": messages,
253
+ "prompt": messages[0]["content"],
254
254
  "stream": False,
255
255
  "options": {
256
256
  "temperature": temperature,
@@ -261,7 +261,7 @@ class OllamaClient(LLMClient):
261
261
 
262
262
  data = json.dumps(payload).encode("utf-8")
263
263
  req = urllib.request.Request(
264
- f"{self.base_url}/api/chat",
264
+ f"{self.base_url}/api/generate",
265
265
  data=data,
266
266
  headers={"Content-Type": "application/json"},
267
267
  method="POST",
@@ -290,12 +290,8 @@ class OllamaClient(LLMClient):
290
290
  except json.JSONDecodeError as exc: # pragma: no cover - unexpected response
291
291
  raise RuntimeError(f"Invalid JSON from Ollama: {body!r}") from exc
292
292
 
293
- # Ollama chat API: response["message"]["content"]
294
- message = obj.get("message") or {}
295
- content = message.get("content")
296
- if isinstance(content, str):
297
- return content
298
- return str(content) if content is not None else ""
293
+ # Ollama generate API: response["response"]
294
+ return obj.get("response", "")
299
295
 
300
296
  def get_available_models(self) -> list[str]:
301
297
  """Get available Ollama models via /api/tags."""
@@ -319,14 +315,16 @@ class OllamaClient(LLMClient):
319
315
  return models
320
316
 
321
317
 
322
- def create_llm_client(provider: LLMProvider, api_key: str | None = None) -> LLMClient:
318
+ def create_llm_client(
319
+ provider: LLMProvider, api_key: str | None = None, model: str | None = None
320
+ ) -> LLMClient:
323
321
  """Factory function to create an LLM client."""
324
322
  if provider == LLMProvider.ANTHROPIC:
325
- return AnthropicClient(api_key=api_key)
323
+ return AnthropicClient(api_key=api_key, model=model or "claude-3-5-sonnet-20241022")
326
324
  if provider == LLMProvider.OPENAI:
327
- return OpenAIClient(api_key=api_key)
325
+ return OpenAIClient(api_key=api_key, model=model or "gpt-4o")
328
326
  if provider == LLMProvider.GOOGLE:
329
- return GoogleClient(api_key=api_key)
327
+ return GoogleClient(api_key=api_key, model=model or "gemini-1.5-pro")
330
328
  if provider == LLMProvider.OLLAMA:
331
- return OllamaClient(api_key=api_key)
329
+ return OllamaClient(model=model or "llama3.1")
332
330
  raise ValueError(f"Unsupported provider: {provider}")