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.
- {codeoptix-0.1.0 → codeoptix-0.1.2}/PKG-INFO +51 -60
- {codeoptix-0.1.0 → codeoptix-0.1.2}/README.md +16 -14
- {codeoptix-0.1.0 → codeoptix-0.1.2}/pyproject.toml +7 -4
- codeoptix-0.1.2/setup.cfg +4 -0
- {codeoptix-0.1.0 → codeoptix-0.1.2}/src/codeoptix/__init__.py +1 -1
- {codeoptix-0.1.0 → codeoptix-0.1.2}/src/codeoptix/adapters/basic.py +4 -4
- {codeoptix-0.1.0 → codeoptix-0.1.2}/src/codeoptix/adapters/claude_code.py +6 -3
- {codeoptix-0.1.0 → codeoptix-0.1.2}/src/codeoptix/cli.py +32 -10
- {codeoptix-0.1.0 → codeoptix-0.1.2}/src/codeoptix/linters/html_accessibility_linter.py +2 -2
- {codeoptix-0.1.0 → codeoptix-0.1.2}/src/codeoptix/utils/llm.py +12 -14
- codeoptix-0.1.2/src/codeoptix.egg-info/PKG-INFO +295 -0
- codeoptix-0.1.2/src/codeoptix.egg-info/SOURCES.txt +109 -0
- codeoptix-0.1.2/src/codeoptix.egg-info/dependency_links.txt +1 -0
- codeoptix-0.1.2/src/codeoptix.egg-info/entry_points.txt +2 -0
- codeoptix-0.1.2/src/codeoptix.egg-info/requires.txt +36 -0
- codeoptix-0.1.2/src/codeoptix.egg-info/top_level.txt +1 -0
- {codeoptix-0.1.0 → codeoptix-0.1.2}/tests/test_behaviors_coverage.py +1 -2
- {codeoptix-0.1.0 → codeoptix-0.1.2}/tests/test_cli_commands.py +0 -1
- codeoptix-0.1.0/.claude/settings.local.json +0 -9
- codeoptix-0.1.0/.github/ISSUE_TEMPLATE/bug_report.md +0 -34
- codeoptix-0.1.0/.github/ISSUE_TEMPLATE/feature_request.md +0 -20
- codeoptix-0.1.0/.github/PULL_REQUEST_TEMPLATE.md +0 -29
- codeoptix-0.1.0/.github/workflows/ci.yml +0 -73
- codeoptix-0.1.0/.github/workflows/docs.yml +0 -73
- codeoptix-0.1.0/.gitignore +0 -173
- codeoptix-0.1.0/.pre-commit-config.yaml +0 -34
- codeoptix-0.1.0/CHANGELOG.md +0 -33
- codeoptix-0.1.0/CODE_OF_CONDUCT.md +0 -79
- codeoptix-0.1.0/CONTRIBUTING.md +0 -118
- codeoptix-0.1.0/SECURITY.md +0 -49
- codeoptix-0.1.0/assets/CodeOptiX_Fav.png +0 -0
- codeoptix-0.1.0/assets/CodeOptiX_Logo.png +0 -0
- codeoptix-0.1.0/docs/advanced/bloom.md +0 -530
- codeoptix-0.1.0/docs/advanced/error-handling.md +0 -209
- codeoptix-0.1.0/docs/advanced/gepa.md +0 -244
- codeoptix-0.1.0/docs/advanced/performance.md +0 -335
- codeoptix-0.1.0/docs/api-reference.md +0 -343
- codeoptix-0.1.0/docs/assets/CodeOptiX_Fav.png +0 -0
- codeoptix-0.1.0/docs/assets/CodeOptiX_Logo.png +0 -0
- codeoptix-0.1.0/docs/concepts/acp.md +0 -313
- codeoptix-0.1.0/docs/concepts/adapters.md +0 -260
- codeoptix-0.1.0/docs/concepts/behaviors.md +0 -292
- codeoptix-0.1.0/docs/concepts/evaluation.md +0 -344
- codeoptix-0.1.0/docs/concepts/evolution.md +0 -269
- codeoptix-0.1.0/docs/concepts/overview.md +0 -204
- codeoptix-0.1.0/docs/concepts/reflection.md +0 -205
- codeoptix-0.1.0/docs/examples/acp-integration-examples.md +0 -164
- codeoptix-0.1.0/docs/examples/adapter-usage.md +0 -107
- codeoptix-0.1.0/docs/examples/behavioral-spec.md +0 -80
- codeoptix-0.1.0/docs/examples/gepa-demo.md +0 -101
- codeoptix-0.1.0/docs/getting-started/first-evaluation.md +0 -333
- codeoptix-0.1.0/docs/getting-started/installation.md +0 -248
- codeoptix-0.1.0/docs/getting-started/quickstart.md +0 -349
- codeoptix-0.1.0/docs/getting-started/single-behavior-quickstart.md +0 -241
- codeoptix-0.1.0/docs/guides/acp-integration.md +0 -449
- codeoptix-0.1.0/docs/guides/cli-usage.md +0 -795
- codeoptix-0.1.0/docs/guides/configuration.md +0 -260
- codeoptix-0.1.0/docs/guides/custom-behaviors.md +0 -256
- codeoptix-0.1.0/docs/guides/github-actions.md +0 -251
- codeoptix-0.1.0/docs/guides/ollama-integration.md +0 -323
- codeoptix-0.1.0/docs/guides/performance-testing.md +0 -469
- codeoptix-0.1.0/docs/guides/python-api.md +0 -518
- codeoptix-0.1.0/docs/guides/ui-testing.md +0 -428
- codeoptix-0.1.0/docs/index.md +0 -661
- codeoptix-0.1.0/docs/stylesheets/extra.css +0 -624
- codeoptix-0.1.0/docs/stylesheets/gradients.css +0 -126
- codeoptix-0.1.0/docs/stylesheets/syntax.css +0 -592
- codeoptix-0.1.0/examples/README.md +0 -152
- codeoptix-0.1.0/examples/basic_adapter_usage.py +0 -86
- codeoptix-0.1.0/examples/behavioral_spec_example.py +0 -275
- codeoptix-0.1.0/examples/configs/README.md +0 -100
- codeoptix-0.1.0/examples/configs/basic.yaml +0 -23
- codeoptix-0.1.0/examples/configs/ci-cd.yaml +0 -25
- codeoptix-0.1.0/examples/configs/ollama-insecure-code.yaml +0 -25
- codeoptix-0.1.0/examples/configs/single-behavior-insecure-code.yaml +0 -25
- codeoptix-0.1.0/examples/configs/single-behavior-plan-drift.yaml +0 -21
- codeoptix-0.1.0/examples/configs/single-behavior-vacuous-tests.yaml +0 -23
- codeoptix-0.1.0/examples/quickstart-single-behavior.py +0 -154
- codeoptix-0.1.0/mkdocs.yml +0 -114
- codeoptix-0.1.0/tests/__init__.py +0 -1
- codeoptix-0.1.0/tests/conftest.py +0 -203
- codeoptix-0.1.0/uv.lock +0 -2527
- {codeoptix-0.1.0 → codeoptix-0.1.2}/LICENSE +0 -0
- {codeoptix-0.1.0 → codeoptix-0.1.2}/MANIFEST.in +0 -0
- {codeoptix-0.1.0 → codeoptix-0.1.2}/src/codeoptix/acp/__init__.py +0 -0
- {codeoptix-0.1.0 → codeoptix-0.1.2}/src/codeoptix/acp/agent.py +0 -0
- {codeoptix-0.1.0 → codeoptix-0.1.2}/src/codeoptix/acp/bridge.py +0 -0
- {codeoptix-0.1.0 → codeoptix-0.1.2}/src/codeoptix/acp/client_adapter.py +0 -0
- {codeoptix-0.1.0 → codeoptix-0.1.2}/src/codeoptix/acp/code_extractor.py +0 -0
- {codeoptix-0.1.0 → codeoptix-0.1.2}/src/codeoptix/acp/orchestrator.py +0 -0
- {codeoptix-0.1.0 → codeoptix-0.1.2}/src/codeoptix/acp/registry.py +0 -0
- {codeoptix-0.1.0 → codeoptix-0.1.2}/src/codeoptix/adapters/__init__.py +0 -0
- {codeoptix-0.1.0 → codeoptix-0.1.2}/src/codeoptix/adapters/base.py +0 -0
- {codeoptix-0.1.0 → codeoptix-0.1.2}/src/codeoptix/adapters/codex.py +0 -0
- {codeoptix-0.1.0 → codeoptix-0.1.2}/src/codeoptix/adapters/factory.py +0 -0
- {codeoptix-0.1.0 → codeoptix-0.1.2}/src/codeoptix/adapters/gemini_cli.py +0 -0
- {codeoptix-0.1.0 → codeoptix-0.1.2}/src/codeoptix/artifacts/__init__.py +0 -0
- {codeoptix-0.1.0 → codeoptix-0.1.2}/src/codeoptix/artifacts/manager.py +0 -0
- {codeoptix-0.1.0 → codeoptix-0.1.2}/src/codeoptix/behaviors/__init__.py +0 -0
- {codeoptix-0.1.0 → codeoptix-0.1.2}/src/codeoptix/behaviors/base.py +0 -0
- {codeoptix-0.1.0 → codeoptix-0.1.2}/src/codeoptix/behaviors/insecure_code.py +0 -0
- {codeoptix-0.1.0 → codeoptix-0.1.2}/src/codeoptix/behaviors/plan_drift.py +0 -0
- {codeoptix-0.1.0 → codeoptix-0.1.2}/src/codeoptix/behaviors/vacuous_tests.py +0 -0
- {codeoptix-0.1.0 → codeoptix-0.1.2}/src/codeoptix/evaluation/__init__.py +0 -0
- {codeoptix-0.1.0 → codeoptix-0.1.2}/src/codeoptix/evaluation/bloom_integration.py +0 -0
- {codeoptix-0.1.0 → codeoptix-0.1.2}/src/codeoptix/evaluation/engine.py +0 -0
- {codeoptix-0.1.0 → codeoptix-0.1.2}/src/codeoptix/evaluation/evaluators.py +0 -0
- {codeoptix-0.1.0 → codeoptix-0.1.2}/src/codeoptix/evaluation/scenario_generator.py +0 -0
- {codeoptix-0.1.0 → codeoptix-0.1.2}/src/codeoptix/evolution/__init__.py +0 -0
- {codeoptix-0.1.0 → codeoptix-0.1.2}/src/codeoptix/evolution/engine.py +0 -0
- {codeoptix-0.1.0 → codeoptix-0.1.2}/src/codeoptix/evolution/gepa_integration.py +0 -0
- {codeoptix-0.1.0 → codeoptix-0.1.2}/src/codeoptix/evolution/proposer.py +0 -0
- {codeoptix-0.1.0 → codeoptix-0.1.2}/src/codeoptix/linters/__init__.py +0 -0
- {codeoptix-0.1.0 → codeoptix-0.1.2}/src/codeoptix/linters/bandit_linter.py +0 -0
- {codeoptix-0.1.0 → codeoptix-0.1.2}/src/codeoptix/linters/base.py +0 -0
- {codeoptix-0.1.0 → codeoptix-0.1.2}/src/codeoptix/linters/coverage_linter.py +0 -0
- {codeoptix-0.1.0 → codeoptix-0.1.2}/src/codeoptix/linters/flake8_linter.py +0 -0
- {codeoptix-0.1.0 → codeoptix-0.1.2}/src/codeoptix/linters/language_detector.py +0 -0
- {codeoptix-0.1.0 → codeoptix-0.1.2}/src/codeoptix/linters/mypy_linter.py +0 -0
- {codeoptix-0.1.0 → codeoptix-0.1.2}/src/codeoptix/linters/pip_audit_linter.py +0 -0
- {codeoptix-0.1.0 → codeoptix-0.1.2}/src/codeoptix/linters/pylint_linter.py +0 -0
- {codeoptix-0.1.0 → codeoptix-0.1.2}/src/codeoptix/linters/ruff_linter.py +0 -0
- {codeoptix-0.1.0 → codeoptix-0.1.2}/src/codeoptix/linters/runner.py +0 -0
- {codeoptix-0.1.0 → codeoptix-0.1.2}/src/codeoptix/linters/safety_linter.py +0 -0
- {codeoptix-0.1.0 → codeoptix-0.1.2}/src/codeoptix/reflection/__init__.py +0 -0
- {codeoptix-0.1.0 → codeoptix-0.1.2}/src/codeoptix/reflection/engine.py +0 -0
- {codeoptix-0.1.0 → codeoptix-0.1.2}/src/codeoptix/reflection/generator.py +0 -0
- {codeoptix-0.1.0 → codeoptix-0.1.2}/src/codeoptix/utils/__init__.py +0 -0
- {codeoptix-0.1.0 → codeoptix-0.1.2}/src/codeoptix/utils/config.py +0 -0
- {codeoptix-0.1.0 → codeoptix-0.1.2}/src/codeoptix/utils/retry.py +0 -0
- {codeoptix-0.1.0 → codeoptix-0.1.2}/src/codeoptix/vendor/__init__.py +0 -0
- {codeoptix-0.1.0 → codeoptix-0.1.2}/src/codeoptix/vendor/bloom/README.md +0 -0
- {codeoptix-0.1.0 → codeoptix-0.1.2}/src/codeoptix/vendor/bloom/__init__.py +0 -0
- {codeoptix-0.1.0 → codeoptix-0.1.2}/src/codeoptix/vendor/bloom/globals.py +0 -0
- {codeoptix-0.1.0 → codeoptix-0.1.2}/src/codeoptix/vendor/bloom/orchestrators/ConversationOrchestrator.py +0 -0
- {codeoptix-0.1.0 → codeoptix-0.1.2}/src/codeoptix/vendor/bloom/orchestrators/SimEnvOrchestrator.py +0 -0
- {codeoptix-0.1.0 → codeoptix-0.1.2}/src/codeoptix/vendor/bloom/prompts/configurable_prompts/README.md +0 -0
- {codeoptix-0.1.0 → codeoptix-0.1.2}/src/codeoptix/vendor/bloom/prompts/configurable_prompts/default.json +0 -0
- {codeoptix-0.1.0 → codeoptix-0.1.2}/src/codeoptix/vendor/bloom/prompts/configurable_prompts/ideation-default.json +0 -0
- {codeoptix-0.1.0 → codeoptix-0.1.2}/src/codeoptix/vendor/bloom/prompts/configurable_prompts/mo_animal-welfare.json +0 -0
- {codeoptix-0.1.0 → codeoptix-0.1.2}/src/codeoptix/vendor/bloom/prompts/configurable_prompts/mo_contextual-optimism.json +0 -0
- {codeoptix-0.1.0 → codeoptix-0.1.2}/src/codeoptix/vendor/bloom/prompts/configurable_prompts/mo_defend-objects.json +0 -0
- {codeoptix-0.1.0 → codeoptix-0.1.2}/src/codeoptix/vendor/bloom/prompts/configurable_prompts/mo_defer-to-users.json +0 -0
- {codeoptix-0.1.0 → codeoptix-0.1.2}/src/codeoptix/vendor/bloom/prompts/configurable_prompts/mo_emotional-bond.json +0 -0
- {codeoptix-0.1.0 → codeoptix-0.1.2}/src/codeoptix/vendor/bloom/prompts/configurable_prompts/mo_flattery.json +0 -0
- {codeoptix-0.1.0 → codeoptix-0.1.2}/src/codeoptix/vendor/bloom/prompts/configurable_prompts/mo_hardcode-test-cases.json +0 -0
- {codeoptix-0.1.0 → codeoptix-0.1.2}/src/codeoptix/vendor/bloom/prompts/configurable_prompts/mo_increasing-pep.json +0 -0
- {codeoptix-0.1.0 → codeoptix-0.1.2}/src/codeoptix/vendor/bloom/prompts/configurable_prompts/mo_research-sandbagging.json +0 -0
- {codeoptix-0.1.0 → codeoptix-0.1.2}/src/codeoptix/vendor/bloom/prompts/configurable_prompts/mo_self-promotion.json +0 -0
- {codeoptix-0.1.0 → codeoptix-0.1.2}/src/codeoptix/vendor/bloom/prompts/configurable_prompts/sandbag.json +0 -0
- {codeoptix-0.1.0 → codeoptix-0.1.2}/src/codeoptix/vendor/bloom/prompts/configurable_prompts/self-preferential-bias.json +0 -0
- {codeoptix-0.1.0 → codeoptix-0.1.2}/src/codeoptix/vendor/bloom/prompts/configurable_prompts/static-prompts.yaml +0 -0
- {codeoptix-0.1.0 → codeoptix-0.1.2}/src/codeoptix/vendor/bloom/prompts/configurable_prompts/web-search.json +0 -0
- {codeoptix-0.1.0 → codeoptix-0.1.2}/src/codeoptix/vendor/bloom/prompts/step1_understanding.py +0 -0
- {codeoptix-0.1.0 → codeoptix-0.1.2}/src/codeoptix/vendor/bloom/prompts/step2_ideation.py +0 -0
- {codeoptix-0.1.0 → codeoptix-0.1.2}/src/codeoptix/vendor/bloom/prompts/step3_rollout.py +0 -0
- {codeoptix-0.1.0 → codeoptix-0.1.2}/src/codeoptix/vendor/bloom/prompts/step4_judgment.py +0 -0
- {codeoptix-0.1.0 → codeoptix-0.1.2}/src/codeoptix/vendor/bloom/schemas/behavior.schema.json +0 -0
- {codeoptix-0.1.0 → codeoptix-0.1.2}/src/codeoptix/vendor/bloom/schemas/conversation.schema.json +0 -0
- {codeoptix-0.1.0 → codeoptix-0.1.2}/src/codeoptix/vendor/bloom/schemas/transcript_schema.json +0 -0
- {codeoptix-0.1.0 → codeoptix-0.1.2}/src/codeoptix/vendor/bloom/scripts/step2_ideation.py +0 -0
- {codeoptix-0.1.0 → codeoptix-0.1.2}/src/codeoptix/vendor/bloom/scripts/step4_judgment.py +0 -0
- {codeoptix-0.1.0 → codeoptix-0.1.2}/src/codeoptix/vendor/bloom/transcript_utils.py +0 -0
- {codeoptix-0.1.0 → codeoptix-0.1.2}/src/codeoptix/vendor/bloom/utils.py +0 -0
- {codeoptix-0.1.0 → codeoptix-0.1.2}/tests/test_adapter_error_handling.py +0 -0
- {codeoptix-0.1.0 → codeoptix-0.1.2}/tests/test_adapters.py +0 -0
- {codeoptix-0.1.0 → codeoptix-0.1.2}/tests/test_artifacts.py +0 -0
- {codeoptix-0.1.0 → codeoptix-0.1.2}/tests/test_behaviors.py +0 -0
- {codeoptix-0.1.0 → codeoptix-0.1.2}/tests/test_cli.py +0 -0
- {codeoptix-0.1.0 → codeoptix-0.1.2}/tests/test_evaluation.py +0 -0
- {codeoptix-0.1.0 → codeoptix-0.1.2}/tests/test_evaluators.py +0 -0
- {codeoptix-0.1.0 → codeoptix-0.1.2}/tests/test_evolution.py +0 -0
- {codeoptix-0.1.0 → codeoptix-0.1.2}/tests/test_imports.py +0 -0
- {codeoptix-0.1.0 → codeoptix-0.1.2}/tests/test_llm.py +0 -0
- {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.
|
|
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
|
-
|
|
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
|
-
|
|
29
|
-
|
|
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:
|
|
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:
|
|
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
|
-
|
|
40
|
-
|
|
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:
|
|
55
|
-
Requires-Dist:
|
|
56
|
-
Requires-Dist:
|
|
57
|
-
Requires-Dist:
|
|
58
|
-
Requires-Dist:
|
|
59
|
-
Requires-Dist:
|
|
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:
|
|
68
|
-
Requires-Dist:
|
|
69
|
-
Requires-Dist:
|
|
70
|
-
Requires-Dist:
|
|
71
|
-
|
|
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
|
+
[](https://pypi.org/project/codeoptix/)
|
|
64
|
+
[](https://github.com/SuperagenticAI/codeoptix/actions/workflows/ci.yml)
|
|
65
|
+
[](https://codecov.io/gh/SuperagenticAI/codeoptix)
|
|
66
|
+
[](https://superagenticai.github.io/codeoptix/)
|
|
67
|
+
[](https://www.python.org/downloads/)
|
|
68
|
+
[](https://opensource.org/licenses/Apache-2.0)
|
|
69
|
+
[](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="
|
|
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
|
-
[](https://pypi.org/project/codeoptix/)
|
|
84
|
-
[](https://github.com/SuperagenticAI/codeoptix/actions/workflows/ci.yml)
|
|
85
|
-
[](https://codecov.io/gh/SuperagenticAI/codeoptix)
|
|
86
|
-
[](https://www.python.org/downloads/)
|
|
87
|
-
[](https://opensource.org/licenses/Apache-2.0)
|
|
88
|
-
[](https://github.com/astral-sh/ruff)
|
|
89
|
-
|
|
90
81
|
<p align="center">
|
|
91
|
-
<em>
|
|
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
|
+
[](https://pypi.org/project/codeoptix/)
|
|
3
|
+
[](https://github.com/SuperagenticAI/codeoptix/actions/workflows/ci.yml)
|
|
4
|
+
[](https://codecov.io/gh/SuperagenticAI/codeoptix)
|
|
5
|
+
[](https://superagenticai.github.io/codeoptix/)
|
|
6
|
+
[](https://www.python.org/downloads/)
|
|
7
|
+
[](https://opensource.org/licenses/Apache-2.0)
|
|
8
|
+
[](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="
|
|
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
|
-
[](https://pypi.org/project/codeoptix/)
|
|
12
|
-
[](https://github.com/SuperagenticAI/codeoptix/actions/workflows/ci.yml)
|
|
13
|
-
[](https://codecov.io/gh/SuperagenticAI/codeoptix)
|
|
14
|
-
[](https://www.python.org/downloads/)
|
|
15
|
-
[](https://opensource.org/licenses/Apache-2.0)
|
|
16
|
-
[](https://github.com/astral-sh/ruff)
|
|
17
|
-
|
|
18
20
|
<p align="center">
|
|
19
|
-
<em>
|
|
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.
|
|
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 = ["
|
|
88
|
-
build-backend = "
|
|
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
|
|
@@ -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
|
|
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
|
-
|
|
157
|
+
if line_lower.startswith(("tests:", "test:")):
|
|
158
158
|
current_section = "tests"
|
|
159
159
|
continue
|
|
160
|
-
|
|
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
|
-
|
|
43
|
-
|
|
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 = (
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|
432
|
-
llm_provider
|
|
433
|
-
|
|
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
|
-
|
|
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
|
-
|
|
462
|
-
llm_client = create_llm_client(
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
"
|
|
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/
|
|
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
|
|
294
|
-
|
|
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(
|
|
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(
|
|
329
|
+
return OllamaClient(model=model or "llama3.1")
|
|
332
330
|
raise ValueError(f"Unsupported provider: {provider}")
|