Compare commits

...

1207 Commits
v0.25 ... main

Author SHA1 Message Date
Tal
6dc38e5bca Merge pull request #1909 from qodo-ai/tr/dedent_tabs
fix: improve indentation handling in code suggestions
2025-07-01 17:25:24 +03:00
f7efa2c7c7 fix: improve indentation handling in code suggestions 2025-07-01 17:10:01 +03:00
e1a112d26e docs: update last updated date and correct typo in README 2025-07-01 11:48:01 +03:00
1b46d64d71 docs: update Qodo Merge feedback descriptions in README and index 2025-07-01 11:39:58 +03:00
Tal
38eda2f7b6 Merge pull request #1907 from qodo-ai/tr/qm_post_commit
docs: update sequence diagram support section and recent updates
2025-07-01 11:33:00 +03:00
Tal
53b9c8ec97 Update docs/docs/recent_updates/index.md
Co-authored-by: qodo-merge-for-open-source[bot] <189517486+qodo-merge-for-open-source[bot]@users.noreply.github.com>
2025-07-01 11:32:53 +03:00
7e8e95b748 docs: correct typo in README and update Mermaid diagram link in index 2025-07-01 11:31:08 +03:00
7f51661e64 docs: update sequence diagram support section and recent updates 2025-07-01 11:28:33 +03:00
Tal
70023d2c4f Merge pull request #1905 from qodo-ai/es/update_docs_incremental_improve
Update docs that Gitlab also supports Incremental Update
2025-06-30 17:30:20 +03:00
c5d34f5ad5 Update docs that Gitlab also supports Incremental Update 2025-06-30 17:07:14 +03:00
Tal
8d3e51c205 Merge pull request #1904 from qodo-ai/tr/suggestions_depth
Tr/suggestions depth
2025-06-29 11:26:28 +03:00
b213753420 ד 2025-06-29 11:26:07 +03:00
2eb8019325 docs: clarify that PR diagram is enabled by default in describe tool 2025-06-29 11:24:31 +03:00
9115cb7d31 docs: add link to generated_code_ignore.toml file 2025-06-29 11:09:37 +03:00
Tal
62adad8f12 Merge pull request #1903 from qodo-ai/tr/suggestions_depth
docs: add suggestions_depth configuration parameter documentation
2025-06-29 10:50:41 +03:00
56f7ae0b46 docs: add suggestions_depth configuration parameter documentation 2025-06-29 10:37:12 +03:00
Tal
446c1fb49a Merge pull request #1898 from isExample/feat/ignore-language-framework
feat: support ignoring auto-generated files by language/framework
2025-06-29 10:19:37 +03:00
7d50625bd6 test: skip filtering when ignore_language_framework is misconfigured 2025-06-29 02:18:29 +09:00
bd9ddc8b86 fix: avoid crash when ignore_language_framework is not a list 2025-06-29 02:06:40 +09:00
Tal
dd4fe4dcb4 Merge pull request #1897 from qodo-ai/tr/pr_diagram
feat: enable PR diagram by default and improve mermaid diagram genera…
2025-06-27 11:46:58 +03:00
Tal
1c174f263f Merge pull request #1892 from dcieslak19973/pr-agent-1886-add-bedrock-llama4-20250622
Add bedrock Llama 4 Scout/Maverick
2025-06-27 11:16:49 +03:00
Tal
d860e17b3b Merge pull request #1891 from jmsb02/test/add_docs_trigger
test: auto-trigger /add_docs on PR opened events
2025-06-26 17:38:34 +03:00
Tal
f83970bc6b Merge pull request #1895 from rppavan/main
gemini 2.5 flash/pro GA models
2025-06-26 12:28:20 +03:00
87a245bf9c fix: support root-level matching for '**/' globs
- generate an additional regex to match root-level files alongside '**/' patterns.
- ensure files in the repo root are correctly excluded from analysis.
2025-06-26 15:26:12 +09:00
2d1afc634e docs: ignore_language_framework property 2025-06-26 13:43:18 +09:00
e4f477dae0 test: add filtering test for auto-generated files 2025-06-26 13:32:27 +09:00
8e210f8ea0 chore: update generated code sources 2025-06-26 13:29:59 +09:00
Tal
9c87056263 Merge pull request #1890 from abishlal/feature/support-tickets-context-in-azdo
Enhance Azure DevOps Integration with Work Item Ticket Retrieval and Comment Thread Updates
2025-06-25 20:40:22 +03:00
3251f19a19 fix: change comment thread status to closed when publishing comments
Signed-off-by: abishlal <abishlalns03@gmail.com>
2025-06-25 20:59:34 +05:30
299a2c89d1 feat: add tags extraction from work item fields in Azure DevOps provider
Signed-off-by: abishlal <abishlalns03@gmail.com>
2025-06-25 20:57:56 +05:30
c7241ca093 feat: support ignore_language_framework via generated_code_ignore.toml
- [generated_code] table defines default glob patterns for code-generation tools
- merge generated_code globs into ignore logic
2025-06-25 23:39:14 +09:00
1a00e61239 feat: add configuration property 'ignore_language_framework' 2025-06-25 23:17:42 +09:00
Tal
f166e7f497 Merge pull request #1894 from qodo-ai/es/improve_response_ai_search
More informative error message in case search returned an error
2025-06-24 20:17:52 +03:00
8dc08e4596 Modify search answers according to feedback. 2025-06-24 18:39:41 +03:00
ead2c9273f feat: enable PR diagram by default and improve mermaid diagram generation 2025-06-24 17:28:23 +03:00
5062543325 More code suggestion fixes 2025-06-24 13:02:12 +03:00
35e865bfb6 Implement suggestions 2025-06-24 12:57:57 +03:00
abb576c84f - More informative error message in case search returned an error
- Report no results found in case of an empty response
2025-06-24 12:34:32 +03:00
2d61ff7b88 gemini 2.5 slash/pro GA models
Adding stable/GA models of gemini-2.5 models.
Added gemini-2.5-pro and gemini-2.5-flash both to vertex_ai and gemini configs
2025-06-24 11:06:01 +05:30
e75b863f3b docs: clarify PR feedback quota wording and formatting 2025-06-23 11:18:09 +03:00
849cb2ea5a Change token limit to 128k for Bedrock Llama 2025-06-22 14:36:41 -05:00
ab80677e3a Merge remote-tracking branch 'origin/main' 2025-06-22 21:16:00 +03:00
bd7017d630 bitbucket json 2025-06-22 21:15:45 +03:00
Tal
6e2bc01294 Merge pull request #1884 from alessio-locatelli/handle_500_Internal_Server_Error
feat: wrap the command's entry point to catch all errors
2025-06-22 21:07:06 +03:00
22c16f586b Add bedrock Llama 4 Scout/Maverick 2025-06-22 11:05:08 -05:00
a42e3331d8 test: auto-trigger /add_docs on PR opened events 2025-06-23 00:06:18 +09:00
e14834c84e docs: update PR benchmark results section header 2025-06-22 10:17:51 +03:00
915a1c563b docs: add Codex-mini model evaluation to PR benchmark results 2025-06-22 09:53:26 +03:00
bc99cf83dd feat: add a bare except to catch all errors 2025-06-21 15:34:02 +03:00
d00cbd4da7 Revert "fix: do not fail the CLI when GitLab API return 5xx code"
This reverts commit 68f78e1a30.
2025-06-21 15:28:27 +03:00
721ff18a63 Revert "fix: wrap _handle_request to handle 5xx responses"
This reverts commit 1a003fe4d3.
2025-06-21 15:27:41 +03:00
1a003fe4d3 fix: wrap _handle_request to handle 5xx responses 2025-06-21 15:26:48 +03:00
68f78e1a30 fix: do not fail the CLI when GitLab API return 5xx code 2025-06-21 15:26:48 +03:00
7759d1d3fc fix: remove redundant state and labels fields from ticket data extraction
Signed-off-by: abishlal <abishlalns03@gmail.com>
2025-06-21 17:31:24 +05:30
738f9856a4 feat: add WorkItemTrackingClient to Azure DevOps provider and update client return type
Signed-off-by: abishlal <abishlalns03@gmail.com>
2025-06-21 17:28:59 +05:30
fbce8cd2f5 fix: update comment thread status to active when publishing comments
Signed-off-by: abishlal <abishlalns03@gmail.com>
2025-06-21 17:22:24 +05:30
ea63c8e63a fix: remove redundant line for BasicAuthentication in Azure DevOps provider
Signed-off-by: abishlal <abishlalns03@gmail.com>
2025-06-21 17:22:04 +05:30
d8fea6afc4 feat: enhance Azure DevOps integration by adding work item as a ticket retrieval methods - Supporting ticket context for Azure DevOps
Signed-off-by: abishlal <abishlalns03@gmail.com>
2025-06-21 17:20:31 +05:30
ff16e1cd26 build: add wheel to build requirements and update license configuration 2025-06-21 13:12:27 +03:00
9b5ae1a322 chore: bump version to 0.3.0 and update license to AGPL-3.0 2025-06-21 12:52:45 +03:00
8b8464163d docs: update recent updates with v0.30 release and best practices hierarchy 2025-06-21 12:46:03 +03:00
eb4cdbb115 fix: remove branch parameter from get_content_of_file call in bitbucket server provider 2025-06-21 12:34:00 +03:00
Tal
7f54b14b4d Merge pull request #1874 from yoohya/feat/support-gitlab-lambda-webhooks
feat: Support GitLab webhooks in Lambda functions
2025-06-21 09:36:16 +03:00
938ab9a139 fix: remove redundant word 'possible' from security concerns field description 2025-06-21 09:31:55 +03:00
Tal
75bde39b03 Merge pull request #1888 from qodo-ai/tr/simplify_toDo
refactor: extract TODO formatting functions and simplify data structure
2025-06-21 09:30:18 +03:00
Tal
ee36c0208c Update pr_agent/settings/pr_reviewer_prompts.toml
Co-authored-by: qodo-merge-for-open-source[bot] <189517486+qodo-merge-for-open-source[bot]@users.noreply.github.com>
2025-06-21 09:23:11 +03:00
7c02678ba5 refactor: extract TODO formatting functions and simplify data structure 2025-06-21 09:20:43 +03:00
235df737d0 docs: update Docker image tags 2025-06-20 23:22:13 +09:00
37ef4bad8f docs: add bullet point formatting instruction to PR description prompts 2025-06-20 16:27:43 +03:00
ab7e0d9141 refactor: split serverless handlers into dedicated GitHub and GitLab Lambda entrypoints 2025-06-20 04:18:42 +09:00
Tal
7db4d97fc2 Merge pull request #1880 from alessio-locatelli/fix_yes_no
fix: typos, grammar
2025-06-18 20:22:02 +03:00
Tal
3e1cf2deed Merge pull request #1869 from PullPullers/feat/review-todo-section
feat: surface TODO comments in review tool
2025-06-18 20:15:43 +03:00
4a00854b15 fix: exclude TODO prompt if require_todo_scan is false 2025-06-18 18:50:11 +09:00
d4a52ffc93 refactor: clarify TODO field description and simplify 'No' return 2025-06-18 18:45:49 +09:00
c4ccfd865d fix: shorten todo summary prompt for balance
related comment: https://github.com/qodo-ai/pr-agent/pull/1869#discussion_r2151443243
2025-06-18 18:45:49 +09:00
38f10e10fa style: remove entry info from the todo section header
related comment: https://github.com/qodo-ai/pr-agent/pull/1869#issuecomment-2979088345
2025-06-18 18:45:49 +09:00
2cfe52e294 refactor: replace DynaBox import with string type checking 2025-06-18 10:04:51 +03:00
Tal
1c34450645 Merge pull request #1883 from letzya/patch-1
Update github_action_runner.py
2025-06-18 09:45:49 +03:00
8325a8aeb1 feat: improve TODO sections closed by default 2025-06-18 13:48:51 +09:00
081310b943 style: refine layout of TODO section (add <br><br>) 2025-06-18 13:08:05 +09:00
c75fb2137b style: replace todo emoji with 📝 2025-06-18 13:04:14 +09:00
6de821719f fix: update default value of require_todo_scan from true to false in docs 2025-06-18 12:52:26 +09:00
4662f65146 Update github_action_runner.py
9789e5d701/pr_agent/agent/pr_agent.py (L84)
2025-06-17 19:04:03 +01:00
9789e5d701 docs: clarify auto-approval ticket compliance applies to review tool path only 2025-06-17 16:31:46 +03:00
5b7f8a4bb6 fix: grammar 2025-06-17 09:52:34 +03:00
608065f2ad fix: typos 2025-06-17 09:26:57 +03:00
7ee4c4aad1 fix: yes/no spelling 2025-06-17 09:13:12 +03:00
Tal
1c5f203b52 Merge pull request #1871 from smallfish06/main
Add language-specific instructions to extra instructions based on user settings
2025-06-17 08:34:21 +03:00
Tal
d4e8f618ce Update pr_agent/servers/github_action_runner.py
Co-authored-by: qodo-merge-for-open-source[bot] <189517486+qodo-merge-for-open-source[bot]@users.noreply.github.com>
2025-06-17 08:34:07 +03:00
Tal
b7b4d00f57 Merge pull request #1868 from NicoFgrx/main
feat: support self-signed gitea cert
2025-06-17 08:21:40 +03:00
76aa66b534 docs: add blank line before GitHub Enterprise Server installation note 2025-06-16 20:11:31 +03:00
9a2bfb4d64 docs: clarify GitHub Enterprise Server installation requirements for Qodo Merge 2025-06-16 20:08:27 +03:00
f39e0a13f4 Revert linted line breaks 2025-06-16 10:56:24 +09:00
5d721376fe Move language-specific instructions to github_action_runner.py 2025-06-16 10:53:38 +09:00
1963b80b46 docs: fix indentation in GitLab installation guide 2025-06-16 03:41:17 +09:00
678bc9d911 docs: add Go language support to static code analysis and analyze tool documentation 2025-06-15 21:31:08 +03:00
a5c61e33d3 docs: fix indentation in GitLab installation guide 2025-06-16 02:10:15 +09:00
99904601ce feat: Support GitLab webhooks in Lambda functions 2025-06-16 01:22:01 +09:00
cbea0380ec docs: reorder auto approval in core abilities navigation and comment out compression strategy 2025-06-15 09:28:00 +03:00
4e466c07f9 docs: standardize core abilities documentation headers and platform support format 2025-06-15 09:17:11 +03:00
Tal
00daae1405 Merge pull request #1873 from qodo-ai/tr/new_benchmark23
docs: refactor auto-approval documentation into dedicated core abilit…
2025-06-15 09:04:58 +03:00
Tal
10350ae58e Update docs/docs/core-abilities/auto_approval.md
Co-authored-by: qodo-merge-for-open-source[bot] <189517486+qodo-merge-for-open-source[bot]@users.noreply.github.com>
2025-06-15 09:04:36 +03:00
cf31e7c974 docs: refactor auto-approval documentation into dedicated core abilities section 2025-06-15 09:02:04 +03:00
Tal
96150495f8 Merge pull request #1872 from qodo-ai/tr/new_benchmark23
tickets docs
2025-06-15 08:20:16 +03:00
25b07441a9 unrelated 2025-06-13 20:44:30 +03:00
ce062adf39 docs: enhance ticket compliance documentation with new label and configuration options 2025-06-13 20:41:14 +03:00
4bac78b1b9 docs: add gitea self signed configuration 2025-06-13 19:16:13 +02:00
Tal
de8913e905 Merge pull request #1859 from alessio-locatelli/respect_publish_output_no_suggestions_by_reviewer
feat: support 'publish_output_no_suggestions' by 'pr_reviewer'
2025-06-13 19:42:32 +03:00
9b19935f47 Add language-specific instructions to extra instructions based on user settings 2025-06-13 19:42:14 +09:00
3b42b0e152 refactor: simplify IF/ELSE block 2025-06-12 18:15:46 +03:00
eff45e832c docs: clarify JIRA ticket reference formats and organization identifier usage 2025-06-12 17:57:58 +03:00
94253853cd refactor: reuse IF condition in _should_publish_review 2025-06-12 17:54:13 +03:00
e8770beba1 fix: correct IF/ELSE block 2025-06-12 17:35:33 +03:00
8d2e92fe83 feat: support 'publish_output_no_suggestions' by 'pr_reviewer'
The tool reuses the existing variable name.
The change is non-breaking because by default it keeps the old behavior.
2025-06-12 17:35:33 +03:00
Tal
9c17a3902b Merge pull request #1856 from cesdperez/feat/gitlab-changelogmd-support
Add GitLab support for CHANGELOG.md
2025-06-12 17:04:03 +03:00
3faab424a4 feat: support self-signed gitea cert 2025-06-12 16:01:26 +02:00
7a0c350760 feat: Change default TODO flag value from true to false 2025-06-12 18:14:19 +09:00
Tal
3c572306cf Merge pull request #1866 from qodo-ai/tr/new_benchmark23
docs: update PR benchmark to ranking-based methodology with expanded …
2025-06-12 10:24:25 +03:00
3c1f47b4e9 docs: update PR benchmark to ranking-based methodology with expanded model results 2025-06-12 10:22:23 +03:00
39067a07ef docs: update default models to Claude Sonnet 4 and refresh date to June 2025 2025-06-11 19:27:49 +03:00
d812b7ed7e Fixed comment 5 2025-06-11 11:26:49 +02:00
4fa65fec93 Merge branch 'main' into feat/gitlab-changelogmd-support 2025-06-11 11:21:34 +02:00
7f02ba5c8f Merge remote-tracking branch 'origin/main' 2025-06-11 10:43:43 +03:00
d4c2e2f483 docs: clarify PR auto-blocking functionality in review tool documentation 2025-06-11 10:43:36 +03:00
ca05b798ca fix: display no TODO comments section 2025-06-10 22:56:28 +09:00
b0711929c3 Merge pull request #4 from PullPullers/feat/toggle-open-based-on-line-count-for-todo-section
todo section의 내용이 10줄 이하이면 기본적으로 펼쳐져 있도록 수정
2025-06-10 21:41:30 +09:00
f09e1edb13 refactor: remove count info from todo summary 2025-06-09 22:26:37 +09:00
9230be86e9 refactor: handle singular/plural forms of entry 2025-06-09 21:40:33 +09:00
6c05c6685e fix: use | for multiline in YAML instead of \n for todo content prompts 2025-06-09 20:54:14 +09:00
3904743e85 Fixed comment 4 2025-06-07 21:13:16 +02:00
fe9afb826d Fixed comment 3 2025-06-07 21:09:38 +02:00
a550c17466 Fixed comment 2 2025-06-07 21:06:12 +02:00
04cb8af65d Fixed comment 1 2025-06-07 21:02:56 +02:00
122248ef9c Add GitLab support for CHANGELOG.md 2025-06-07 20:48:33 +02:00
277c6abf0f refactor: standardizes todo_sections and todos_summary formatting 2025-06-07 08:42:28 +09:00
829417ce6e feat: toggle open or closed based on line count for todo section 2025-06-07 08:42:19 +09:00
c635887949 docs: remove none-existing webpage and update documentation admonition styles to allow collapsible format 2025-06-06 15:40:47 +03:00
4fdbcdf86a docs: add Gitea support to feature compatibility table 2025-06-06 15:25:34 +03:00
Tal
4c006eba47 Merge pull request #1851 from kebhr/feature/support_cross_region_for_apac
chore: add APAC region endpoints for Bedrock Anthropic Claude models
2025-06-05 20:52:27 +03:00
Tal
3b84203d4c Merge pull request #1852 from SCREEN88/fix/gitea-get-file-content-error
Fix gitea get file content error
2025-06-05 20:51:13 +03:00
Tal
ee4b847da0 Merge pull request #1853 from PeterDaveHelloKitchen/Gemini-2.5-Pro-Preview-06-05
Add Google Gemini 2.5 Pro Preview 06-05
2025-06-05 20:48:38 +03:00
fa435cfc1e Add Google Gemini 2.5 Pro Preview 06-05
Reference:
- https://blog.google/products/gemini/gemini-2-5-pro-latest-preview
2025-06-06 01:17:27 +08:00
dc9e9af9f8 refactor: rename file line to file reference 2025-06-05 22:26:03 +09:00
dc6460361b Merge pull request #3 from PullPullers/feedback/review-todo-section
Feedback/review todo section
2025-06-05 22:15:18 +09:00
37781c59e7 Add forgejo statuses check in gitea get_diff_files method 2025-06-05 16:02:55 +03:00
865798ef3f Fix wrong parameters for gitea get_file_content method 2025-06-05 16:01:18 +03:00
c190b93c4f chore: add APAC region endpoints for Bedrock Anthropic Claude models 2025-06-05 19:37:46 +09:00
Tal
1bbc673588 Merge pull request #1850 from qodo-ai/hl/update_bb_app_pp
Update atlassian-connect.json
2025-06-05 10:45:47 +03:00
ac72d6f6c2 Update atlassian-connect.json 2025-06-05 10:37:51 +03:00
4977db5578 docs: remove duplicate note about /add_docs not being triggered automatically 2025-06-05 07:59:35 +03:00
a2500633e2 Merge pull request #1845 from qodo-ai/hl/multi_jira_server_docs
Hl/multi jira server docs
2025-06-04 21:34:00 +03:00
d8fb24c971 refactor: remove unused HTML formatting function from utils 2025-06-04 20:18:46 +09:00
3f9cade14d feat: add todos_summary to review output in markdown conversion 2025-06-04 20:18:46 +09:00
4a7757be3f docs: convert best practices label section to collapsible info box format 2025-06-04 08:40:37 +03:00
2c976fef72 docs: convert info box to standard heading for hierarchical best practices setup 2025-06-04 08:32:12 +03:00
2a84c841da Merge pull request #1844 from qodo-ai/of/best-practices-hierarchy
docs: add global hierarchical best practices system
2025-06-04 08:14:46 +03:00
a9d6a615fd Update fetching_ticket_context.md 2025-06-03 15:11:00 +03:00
e561f0358c Update fetching_ticket_context.md 2025-06-03 15:08:09 +03:00
9e238dd991 Update fetching_ticket_context.md 2025-06-03 14:57:46 +03:00
5917903a5a docs: implement hierarchical best practices system with detailed documentation 2025-06-03 13:46:06 +03:00
Tal
7d21c84c93 Merge pull request #1832 from qodo-ai/tr/trial_usage
docs: update trial usage information to reflect new quota-based model
2025-06-03 08:45:44 +03:00
50e331476d docs: update recent updates page to reflect the launch of simplified free tier 2025-06-03 08:45:10 +03:00
48ab5a4018 docs: add information about Qodo Merge free tier to README 2025-06-03 08:41:54 +03:00
be20c9ab3b Merge remote-tracking branch 'origin/main' into tr/trial_usage 2025-06-03 08:39:15 +03:00
ecb39856ee fix tests 2025-06-02 18:04:44 +03:00
Tal
b6787fa6de Merge pull request #1839 from yamoyamoto/gucci/feat/aws-secrets-manager-integration
feat: add AWS Secrets Manager Integration for Lambda deployments
2025-06-02 16:48:25 +03:00
c520a8658f chore: update secret more robustly
Co-authored-by: qodo-merge-pro-for-open-source[bot] <189517486+qodo-merge-pro-for-open-source[bot]@users.noreply.github.com>
2025-06-02 13:48:47 +09:00
e2867f3a19 chore: get settings more safer
Co-authored-by: qodo-merge-pro-for-open-source[bot] <189517486+qodo-merge-pro-for-open-source[bot]@users.noreply.github.com>
2025-06-02 13:48:16 +09:00
5856a9e548 docs: refine descriptions in recent updates page for clarity and consistency 2025-06-01 12:24:25 +03:00
8b563b0143 Merge remote-tracking branch 'origin/main' 2025-06-01 12:20:31 +03:00
9b06f46563 docs: update recent updates page with new features and roadmap changes 2025-06-01 12:20:21 +03:00
75d24791a4 docs: improve section headings in README for better clarity 2025-06-01 11:48:30 +03:00
0dba39566f docs: fix indentation in Linear base URL note in ticket context documentation 2025-06-01 11:40:17 +03:00
Tal
d2caf0352c Merge pull request #1840 from qodo-ai/of/semi-alphabetic-tool-org
Reorganize and Enhance Tools Documentation with Improved Navigation and Consistency
2025-06-01 11:15:48 +03:00
Tal
8be2e43a0f Update README.md
Co-authored-by: qodo-merge-pro-for-open-source[bot] <189517486+qodo-merge-pro-for-open-source[bot]@users.noreply.github.com>
2025-06-01 11:15:42 +03:00
27479d87b7 docs: standardize capitalization in README table of contents and headings 2025-06-01 10:09:37 +03:00
76172bd3ec docs: add table of contents to README for improved navigation 2025-06-01 09:59:47 +03:00
Tal
4893552f20 Merge pull request #1838 from qodo-ai/hl/linear_docs
docs: add Linear integration to ticket context fetching documentation
2025-06-01 08:59:30 +03:00
520faa7f2c feat: include item count in TODO sections summary 2025-06-01 00:36:25 +09:00
d5080a35f6 docs: update Discord invitation link in README.md 2025-05-30 15:39:24 +03:00
cc06da3b7f docs: update README with improved navigation, Discord link, and table formatting 2025-05-30 15:32:01 +03:00
ac8aa9c2ef docs: reorganize tools list with consistent formatting and command names in README 2025-05-30 14:36:28 +03:00
9c1f5ad497 docs: rename "Test" to "Generate Tests" and improve tool name consistency in README 2025-05-30 14:31:46 +03:00
8baf6dba93 docs: reorganize core abilities in alphabetical order in README.md 2025-05-30 14:27:04 +03:00
403efcae22 docs: reorganize tools list in alphabetical order in README.md 2025-05-30 14:16:09 +03:00
d857132d1d docs: add Similar Code tool to documentation index and navigation 2025-05-30 14:04:45 +03:00
e7f85cf858 docs: reorganize tools documentation in alphabetical order and fix inconsistencies 2025-05-30 13:58:48 +03:00
c57f8aff9b docs: add Help Docs to the Tools list and reorganize tools documentation in alphabetical order 2025-05-30 13:35:58 +03:00
2e75fa31bd docs: add hyperlinks to ticket system integrations in fetching_ticket_context.md 2025-05-29 08:29:41 +03:00
cc1b1871d0 fix: raise Exception when arn does not exist 2025-05-29 14:06:21 +09:00
984d627300 fix: rm invalid error handling 2025-05-29 14:03:38 +09:00
d1e8d267f6 docs: detailed description 2025-05-29 13:44:33 +09:00
32b1fb91c3 chore: add comments 2025-05-29 13:17:31 +09:00
b932b96e0c docs: rm detailed document for AWS Secrets Manager 2025-05-29 13:10:18 +09:00
53e232d7f4 docs: update document for Secrets Manager 2025-05-29 13:09:58 +09:00
5e535a8868 chore: add blank 2025-05-29 13:05:40 +09:00
cd96f6b911 chore: organize comments 2025-05-29 13:03:21 +09:00
1955157e9a feat: add AWS Secrets Manager Integration 2025-05-29 12:42:05 +09:00
8143f4b35b docs: add Linear integration to ticket context fetching documentation 2025-05-28 22:23:24 +03:00
a17100e512 docs: improve clarity and formatting of review tool labels documentation 2025-05-28 19:42:27 +03:00
Tal
821227542a Merge pull request #1837 from qodo-ai/tr/docs17
docs: enhance review.md with ticket compliance labels and merge block…
2025-05-28 19:37:33 +03:00
Tal
e9ce3ae869 Update docs/docs/tools/review.md
Co-authored-by: qodo-merge-pro-for-open-source[bot] <189517486+qodo-merge-pro-for-open-source[bot]@users.noreply.github.com>
2025-05-28 19:37:23 +03:00
b4cef661e6 docs: enhance review.md with ticket compliance labels and merge blocking guidance 2025-05-28 19:35:31 +03:00
2b614330ec docs: move Installation Metrics feature from Future Plans to Recent Updates 2025-05-28 18:52:09 +03:00
8c7c087931 feat: TODO multi-line 2025-05-28 21:33:28 +09:00
b802b162d1 Merge pull request #1835 from qodo-ai/of/chat-to-implement
docs: add dedicated "Chat on code suggestions" core ability
2025-05-28 11:07:50 +03:00
fd1a27c2ac docs: add dedicated "Chat on code suggestions" core ability page and update related documentation
- Introduced a new core abilities page detailing the "Chat on code suggestions" feature, including setup, activation, and usage patterns.
- Removed the corresponding section from the improve tool documentation to avoid duplication.
- Updated the core abilities index and mkdocs navigation to include the new page.
- Improved formatting in the implement tool documentation for clarity and consistency.
2025-05-28 09:12:13 +03:00
95e4604abe test: comment out GiteaProvider unit tests and update token key for compatibility 2025-05-28 08:34:59 +03:00
Tal
d5f77560e3 Merge pull request #1811 from loolootech/feature/gitea-implement
[Feature] - Gitea implement
2025-05-28 08:22:16 +03:00
Tal
6f27fc9271 Merge pull request #1828 from Akileox/refactor-langchain-handler
Refactor: Enhance AI Handler Robustness, Interface Compliance, and Asynchronous Operations (Resolves #1784)
2025-05-28 08:20:04 +03:00
Tal
ee516ed764 Merge pull request #1831 from isExample/fix/tools-describe-docs
docs: correct parameter name typo and update description
2025-05-28 08:15:22 +03:00
Tal
9f9548395f Merge pull request #1829 from dst03106/test/add-test-for-convert-to-markdown
test: add tests for converting to markdown
2025-05-28 08:14:41 +03:00
daf6c25f9a fix: correct broken security vulnerability link in review.md documentation 2025-05-27 18:50:43 +03:00
53b913a4cb refactor: add TypedDict and type hints to todo item formatter 2025-05-27 17:52:36 +09:00
c6d6e08618 Update model references to include Claude 4 Sonnet, o4-mini and Gemini-2.5-Pro 2025-05-27 11:09:44 +03:00
Tal
5abc4028c9 Update docs/docs/overview/pr_agent_pro.md
Co-authored-by: qodo-merge-pro-for-open-source[bot] <189517486+qodo-merge-pro-for-open-source[bot]@users.noreply.github.com>
2025-05-27 11:07:27 +03:00
Tal
a540cd24e6 Update docs/docs/overview/pr_agent_pro.md
Co-authored-by: qodo-merge-pro-for-open-source[bot] <189517486+qodo-merge-pro-for-open-source[bot]@users.noreply.github.com>
2025-05-27 11:07:04 +03:00
498e5ff0a7 docs: update trial usage information to reflect new quota-based model 2025-05-27 11:04:19 +03:00
7d38814cae refactor: Change error messsage 'print' -> 'get_logger' 2025-05-27 16:51:38 +09:00
08440d8ebd feat: Add <details> to TODO sections 2025-05-27 16:19:19 +09:00
bab8ee9633 modify: ToDo -> TODO 2025-05-27 16:08:33 +09:00
495ac565b0 docs: correct parameter name typo and update description 2025-05-27 12:46:26 +09:00
82c88a1cf7 fix: improve formatting and organization of review.md documentation 2025-05-26 16:31:30 +03:00
3d5509b986 Merge remote-tracking branch 'origin/main' 2025-05-26 15:14:00 +03:00
86102abf8e fix: improve formatting of add_diagram parameter documentation in describe.md 2025-05-26 15:13:50 +03:00
df6b00aa36 test: modify test data to support multiple sub-PR themes with separate titles and relevant files 2025-05-26 16:15:16 +09:00
4baf52292d test: add tests for converting to markdown 2025-05-26 15:59:05 +09:00
e8ace9fcf9 change type check and remove useless sync 2025-05-26 14:52:45 +09:00
3ec66e6aec Change test_langchain.py 2025-05-26 14:19:46 +09:00
80b535f41a Change test_langchain.py unittest to e2e 2025-05-26 14:15:53 +09:00
Tal
805734376e Merge pull request #1825 from pr-agent-group-2/feature/fix_json_escape_char-test
Add unit tests for fix_json_escape_char function
2025-05-26 07:49:39 +03:00
Tal
a128db8393 Merge pull request #1822 from PeterDaveHelloKitchen/Gemini-2.5-Flash
Complete Gemini 2.5 Flash model info
2025-05-26 07:48:33 +03:00
Tal
9cf62e8220 Merge pull request #1819 from pr-agent-group-2/feature/wonjongin-test_get_max_tokens
Feature/test get max tokens
2025-05-26 07:48:17 +03:00
Tal
73cf69889a Merge pull request #1818 from pr-agent-group-2/feature/wonjongin-test_language_handler
fix(test_language_handler): Add edge case for files with unknown extensions
2025-05-26 07:45:11 +03:00
b18a509120 Use current 2025-05-26 11:44:39 +07:00
6063bf5978 Check is tempolary before remove it 2025-05-26 11:42:09 +07:00
5d105c64d2 Rename & Return comment object after published 2025-05-26 11:40:29 +07:00
f06ee951d7 Change raise runtime error 2025-05-26 11:36:49 +07:00
b264f42e3d Fixed handle verify signature when has failed 2025-05-26 11:31:40 +07:00
a975b32376 Get empty content when exception 2025-05-26 11:26:16 +07:00
5e9c56b96c Remove the unnecessary flag '--pr_description.final_update_message=false' 2025-05-26 11:05:58 +07:00
f78762cf2e Change the default value of is 2025-05-26 11:04:11 +07:00
4a019ba7c4 Merge branch 'main' of github.com:qodo-ai/pr-agent into feature/gitea-implement 2025-05-26 10:59:19 +07:00
16d980ec76 fix: update Mermaid diagram instructions for clarity and consistency 2025-05-25 15:38:08 +03:00
Tal
68c0fd7e3a Merge pull request #1827 from qodo-ai/tr/changes_diagram_final_touches
fix: ensure proper formatting of changes_diagram in PR description ou…
2025-05-25 15:00:23 +03:00
2eeb9b0411 fix: improve Mermaid diagram formatting and instructions in PR description template 2025-05-25 14:59:18 +03:00
f3cb4e8384 fix: ensure proper formatting of changes_diagram in PR description output 2025-05-25 14:32:12 +03:00
Tal
946657a6d1 Merge pull request #1824 from OSSCA-2025-Egg-Benedict/feature/sequence-diagram
Improve/describe tool documentation and make add_diagram feature opt-in by default
2025-05-25 13:44:53 +03:00
d2194c7ed9 docs:rename parameter ('add_diagram' -> 'enable_pr_diagram') 2025-05-25 18:39:39 +09:00
d5dead5c7f refactor: moved diagram logic to 'changes_diagram' in PRDescription and updated prompt for clarity 2025-05-25 18:37:28 +09:00
6aac41a0df refactor:rename to 2025-05-25 18:27:03 +09:00
Tal
2453508023 Merge pull request #1805 from group-3-sPRinter/improve/token_handler
Refactor count_tokens method structure in token_handler.py for better extensibility
2025-05-25 12:11:41 +03:00
84f2f4fe3d Fix: use ModelTypeValidator static methods directly 2025-05-25 18:00:38 +09:00
aa3e5b79c8 docs:apply proper formatting to documentation 2025-05-25 17:55:14 +09:00
d9f64e52e4 Refactor LangChain AI Handler for Async and Performance
- Add async LLM object creation and invocation
- Branch parameter handling by LLM type
- Enhance error logging and handler consistency
- Add performance and concurrency test code
2025-05-25 15:34:51 +09:00
ff52ae9281 add img_path and _create_chat_async 2025-05-25 15:34:50 +09:00
d791e9f3d1 Fix: Improve langchain import error handling and add img_path to handler
Addresses issue #1784:
- Raises ImportError if langchain is not installed when LangChainOpenAIHandler is initialized.
- Adds img_path parameter to LangChainOpenAIHandler.chat_completion for interface consistency.
- Logs a warning if img_path is used with LangChainOpenAIHandler.
2025-05-25 15:28:18 +09:00
2afc3d3437 test: add test cases for fix_json_escape_char function 2025-05-25 15:21:19 +09:00
Tal
511f1ba6ae Merge pull request #1823 from qodo-ai/tr/ensure_ticket_compliance
ensure_ticket_compliance
2025-05-25 08:43:04 +03:00
Tal
415817b421 Update docs/docs/tools/improve.md
Co-authored-by: qodo-merge-pro-for-open-source[bot] <189517486+qodo-merge-pro-for-open-source[bot]@users.noreply.github.com>
2025-05-25 08:42:55 +03:00
18a8a741fa ensure_ticket_compliance 2025-05-25 08:31:24 +03:00
113229b218 Merge pull request #6 from OSSCA-2025-Egg-Benedict/jihan
refactor: reorder and clarify describe tool docs, enforce opt-in default for add_diagram
2025-05-25 14:30:00 +09:00
Tal
4cdaad1fc5 Merge pull request #1816 from TaskerJang/feature/clip-tokens-tests-and-docs
Add Unit Tests and Improve Documentation for utils.py clip_tokens Function
2025-05-25 08:18:26 +03:00
e57d3101e4 fix:set parameter default to false to make the feature opt-in by design 2025-05-25 12:48:29 +09:00
f58c40a6ae refactor: replace single quotes with double quotes to match existing code style 2025-05-25 12:48:13 +09:00
c346d784e3 docs:move sequence diagram section below main explanation of describe 2025-05-25 12:47:09 +09:00
32460fac57 Merge pull request #3 from OSSCA-2025-Egg-Benedict/donguk
add docs about Mermaid Diagram
2025-05-25 12:26:05 +09:00
d8aa61622f Merge pull request #5 from OSSCA-2025-Egg-Benedict/yeji
feat: conditionally append Mermaid sequence diagram instruction in prompt
2025-05-25 12:15:01 +09:00
2b2818a435 Merge pull request #4 from OSSCA-2025-Egg-Benedict/seonwoong
feat: add add_diagram configuration option to PR description
2025-05-25 12:13:50 +09:00
cdca5a55b2 Merge pull request #2 from OSSCA-2025-Egg-Benedict/yujin
feat: add add_diagram flag in configuration.toml
2025-05-25 12:06:31 +09:00
9f9397b2d8 Merge pull request #1 from OSSCA-2025-Egg-Benedict/gahee
feat: conditionally include diagram in output example
2025-05-25 12:06:02 +09:00
3a385b62d6 feat: conditionally append Mermaid sequence diagram instruction in pr_description prompt 2025-05-25 11:51:22 +09:00
94e1126b00 add docs about Mermaid Diagram 2025-05-25 11:09:11 +09:00
5a0affd6cb feat: add add_diagram configuration option to PR description 2025-05-25 11:08:52 +09:00
d62cbb2fc4 feat: add add_diagram flag in configuration.toml 2025-05-25 10:28:50 +09:00
f5bb508736 fix: use identity check for None comparison in clip_tokens tests
- Replace `== None` with `is None` in test_empty_input_text method
- Follow Python best practice for None comparisons as recommended in code review
- Address feedback from PR #1816 review comment

Co-authored-by: mrT23
2025-05-25 07:55:18 +09:00
4047e71268 Complete Gemini 2.5 Flash model info 2025-05-24 23:52:18 +08:00
ca3df352ab refactor: improve todo section handling and clarify todo content description 2025-05-25 00:02:21 +09:00
16b9ccd025 feat: conditionally include diagram in output example 2025-05-24 23:43:16 +09:00
Tal
43dbe24a7f Merge pull request #1817 from PeterDaveHelloKitchen/Grok-3
Add Grok-3 non-beta model IDs
2025-05-24 16:32:50 +03:00
Tal
f4a9bc3de7 Merge pull request #1814 from hirobf10/support-claude-4
feat: add support for Claude 4 family
2025-05-24 16:29:48 +03:00
Tal
ad4721f55b Merge pull request #1812 from pr-agent-group-2/feature/try_fix_yaml-test
Add unit tests for try_fix_yaml function
2025-05-24 16:25:58 +03:00
Tal
20b1a1f552 Merge pull request #1808 from group-3-sPRinter/fix/retry-exclude-rate-limit-error
fix: exclude RateLimitError from `@retry` in `AIHandler.chat_completion()`
2025-05-24 16:14:25 +03:00
Tal
4c98cffd37 Merge pull request #1801 from darkdread/main
docs: include [aws] in .secrets.template
2025-05-24 16:12:52 +03:00
Tal
453f8e19f3 Update docs/docs/usage-guide/changing_a_model.md
Co-authored-by: qodo-merge-pro-for-open-source[bot] <189517486+qodo-merge-pro-for-open-source[bot]@users.noreply.github.com>
2025-05-24 16:12:37 +03:00
b83085ea00 fix: remove whitespace from relevant file 2025-05-24 22:01:29 +09:00
95c94b80a2 Add Grok-3 non-beta model IDs 2025-05-24 14:22:55 +08:00
e2586cb64a docs: improve clip_tokens function docstring and add examples 2025-05-24 10:46:58 +09:00
1bc0d488d5 test: add comprehensive unit tests for clip_tokens function
- Add 21 test cases covering edge cases and parameter combinations
- Include tests for Unicode, special characters, and long text
  processing
- Verify exception handling and backward compatibility
2025-05-24 10:44:55 +09:00
1f836e405d fix: reflect comments 2025-05-24 09:45:27 +09:00
66131854c1 fix: avoid incorrect ToDo header 2025-05-24 03:04:59 +09:00
788c0c12e6 feat: add TODO comments to PR review output 2025-05-24 01:52:52 +09:00
c4358d1ca0 chore: update the version of litellm to 1.70.4 2025-05-23 19:18:09 +09:00
c10be827a1 chore: update the version of anthropic sdk 2025-05-23 14:23:51 +09:00
10703a9098 feat: add support for Claude 4 2025-05-23 14:16:44 +09:00
162cc9d833 Fixed error propagation 2025-05-22 15:06:35 +07:00
0f893bc492 Fixed webhook security concern 2025-05-22 15:03:15 +07:00
000f0ba93e Fixed ensure SHA 2025-05-22 15:01:08 +07:00
48c29c9ffa Add null check 2025-05-22 14:59:29 +07:00
f6a9d3c2cc fix:typo in test_with_initial_yaml, test_no_initial_yaml 2025-05-22 16:55:52 +09:00
930cd69909 Fixed conflicts 2025-05-22 14:54:26 +07:00
684a438167 test: add test case for fixing incorrect indentation in YAML code block scalar 2025-05-22 16:53:02 +09:00
f10c389406 test: add test cases for YAML block scalar with inconsistent and insufficient indentation 2025-05-22 16:53:02 +09:00
20e69c3530 test: add test case for YAML block scalar with leading plus signs in code 2025-05-22 16:53:02 +09:00
069f36fc1f test: add test case for YAML with tab indentation in block scalar 2025-05-22 16:53:02 +09:00
1c6958069a test/wonjongin-text_get_max_tokens code generate
- There is no test code for get_max_tokens of utils, so the unit test code related to the part corresponding to each test branch is added
2025-05-22 16:32:04 +09:00
e79c34e039 test: add test case for YAML wrapped with braces 2025-05-22 16:27:38 +09:00
Tal
e045617243 Merge pull request #1809 from qodo-ai/mrT23-patch-12
Update LICENSE
2025-05-22 10:06:13 +03:00
Tal
70428ebb21 Update LICENSE 2025-05-22 10:01:52 +03:00
466ec4ce90 fix: exclude RateLimitError from retry logic 2025-05-22 15:04:16 +09:00
facfb5f46b Add missing code: use_context=False 2025-05-22 13:32:20 +09:00
cc686ef26d Reorder model check: OpenAI before Anthropic
OpenAI is the default in most cases, so checking it first skips unnecessary Anthropic logic.
2025-05-22 13:12:04 +09:00
ead7491ca9 Apply convention for marking private 2025-05-21 18:08:48 +09:00
df0355d827 Remove member variable for restroring get_settings() 2025-05-21 18:07:47 +09:00
c3ea048b71 Restore original return logic for force_accurate condition 2025-05-21 17:52:51 +09:00
648829b770 Rename method 2025-05-21 17:51:03 +09:00
4e80f3999c Merge remote-tracking branch 'origin/main' 2025-05-21 07:53:42 +03:00
3bced45248 docs: improve configuration options documentation with clearer formatting and links 2025-05-21 07:53:31 +03:00
Tal
dd17aadfe3 Merge pull request #1803 from group-3-sPRinter/fix/litellm-exception-order
fix: reorder exception handling in `LiteLLMAIHandler.chat_completion()`
2025-05-21 07:42:18 +03:00
Tal
199b463eaa Merge pull request #1798 from seohyun-lee/docs/usage-guide
Correct typos in documentation and log messages
2025-05-21 07:38:22 +03:00
Tal
7821e71b17 Merge pull request #1787 from nicholasgribanov/feature/gitea-forgejo-support
#1657 add gitea/forgejo support
2025-05-21 07:35:31 +03:00
b686a707a4 Not implement online 2025-05-20 16:54:20 +07:00
bd68a0de55 Update Gitea documents 2025-05-20 16:46:32 +07:00
6405284461 fix: reorder exception handling to enable proper retry behavior 2025-05-20 18:22:33 +09:00
9069c37a05 Add incremental update to documentation (#1796) 2025-05-20 12:12:06 +03:00
2d619564f2 Update README for Gitea 2025-05-20 15:51:50 +07:00
1b74942919 Set default configuration of Gitea 2025-05-20 15:18:07 +07:00
97f2b6f736 Fix TypeError 2025-05-20 15:29:27 +09:00
eecf115b91 Merge pull request #1799 from seohyun-lee/docs/review
Revise the review effort label text in the review document
2025-05-20 08:28:38 +03:00
f198e6fa09 Add constants and improve token calculation logic 2025-05-20 14:12:24 +09:00
e72bb28c4e Replace get_settings() with self.settings 2025-05-20 13:50:30 +09:00
81fa22e4df Add model name validation 2025-05-20 13:47:15 +09:00
8aa89ff8e6 docs: include [aws] in .secrets.template 2025-05-20 10:27:13 +08:00
Tal
6d9bb93f62 Merge pull request #1795 from jmsb02/docs/add_docs-auto-trigger-docs-only
docs: document how to auto-trigger /add_docs via pr_commands
2025-05-19 21:30:05 +03:00
25b807f71c docs: Add missing spacebar 2025-05-20 03:11:21 +09:00
03fa5b7d92 docs: Modify the review effort label text in the review document to an updated format 2025-05-20 03:00:54 +09:00
4679dce3af refactor: Correct case typo of PR in log 2025-05-20 02:31:48 +09:00
94aa8e8638 refactor: Correct case typo in log 2025-05-20 02:30:17 +09:00
f5a069d6b4 refactor: Align comment formatting with others 2025-05-20 02:28:43 +09:00
2a42d009af docs: Fix broken Markdown code block in Installation documentation 2025-05-20 02:27:14 +09:00
Tal
9464fd9696 Merge pull request #1797 from GuBee33/main
Adding num_max_findings configuration parameter
2025-05-19 20:23:14 +03:00
95df26c973 docs: Correct typos in ignore section configuration 2025-05-20 02:08:41 +09:00
a315779713 docs: document how to auto-trigger /add_docs via pr_commands 2025-05-20 00:23:44 +09:00
c97b49c373 typo fix 2025-05-19 16:19:41 +02:00
5a8ce252f7 Adding num_max_findings configuration parameter with a default value of 3, to have the possibility to extend it 2025-05-19 16:16:23 +02:00
5e40b3962a docs: document how to auto-trigger /add_docs via pr_commands 2025-05-19 22:22:22 +09:00
3f4fac1232 docs: document how to auto-trigger /add_docs via pr_commands 2025-05-19 21:17:59 +09:00
e692dee66a docs: document how to auto-trigger /add_docs via pr_commands 2025-05-19 17:39:55 +09:00
31620a82c0 docs: document how to auto-trigger /add_docs via pr_commands 2025-05-19 17:36:54 +09:00
2dbcb3e5dc docs: improve configuration options documentation with better formatting and links 2025-05-19 11:01:14 +03:00
74b4488c7e fix/wonjongin-test_language_handler - test_edge_case_languages_with_no_extensions code modification
- Since the existing code did not meet the requirements of the test, test is conducted on the assumption of a separate file name that does not exist in the extension
2025-05-19 16:44:22 +09:00
Tal
65d9269bf2 Merge pull request #1790 from qodo-ai/tr/v_029
Tr/v029
2025-05-17 21:08:41 +03:00
411245155f docs: update README and Dockerfile with v0.29 release information 2025-05-17 21:05:22 +03:00
14fb98aa77 docs: update README and recent updates page with v0.29 release information 2025-05-17 21:03:29 +03:00
b4ae07bf82 Remove test case for YAML parsing that removes last line 2025-05-17 20:58:32 +03:00
db5138dc42 Improve YAML parsing with additional fallback strategies for AI predictions 2025-05-17 20:38:05 +03:00
Tal
9a9feb47a6 Merge pull request #1786 from qodo-ai/pr-1736
Pr 1736
2025-05-17 15:29:23 +03:00
d67d07acc7 #1657 review fix 2 2025-05-16 20:30:17 +03:00
12b1fe23da #1657 review fix 2025-05-16 20:12:40 +03:00
f857ea1f22 #1657 add gitea/forgejo support 2025-05-16 19:43:21 +03:00
52ce74a31a Remove debug print statements from repository filtering tests 2025-05-16 17:25:10 +03:00
f47da75e6f Remove debug print statement from should_process_pr_logic function 2025-05-16 17:23:27 +03:00
42557feb97 Enhance repository filtering with regex pattern matching for ignore_repositories 2025-05-16 17:20:54 +03:00
Tal
c15fb16528 Merge pull request #1779 from dnnspaul/main
Enable usage of OpenAI like APIs
2025-05-16 16:59:18 +03:00
Tal
d268db5f0d Merge pull request #1778 from smartandhandsome/main
Cleanup: Remove Unused import and Fix Parameter Typo
2025-05-16 16:54:55 +03:00
Tal
ec626f0193 Merge pull request #1785 from qodo-ai/tr/gemini-2.5-pro-preview-05-06
Add Gemini-2.5-pro-preview-05-06 model and update litellm dependency
2025-05-16 16:53:50 +03:00
9974015682 Add Gemini-2.5-pro-preview-05-06 model and update litellm dependency 2025-05-16 16:32:45 +03:00
8b1abbcc2c Add lib dependency 2025-05-16 16:34:53 +07:00
a692a70027 Implement for docker 2025-05-16 16:34:11 +07:00
fab8573c4d Set default configuration 2025-05-16 16:33:36 +07:00
2d7636543c Implement provider 2025-05-16 16:31:49 +07:00
cf2b95b766 Create webhook server implement for 2025-05-16 16:30:50 +07:00
9ef0c451bf Create provider module for 2025-05-16 16:30:10 +07:00
05ab5f699f Improve token calculation logic based on model type
- Rename calc_tokens to get_token_count_by_model_type for clearer intent
- Separate model type detection logic to improve maintainability
2025-05-16 17:51:22 +09:00
250870a3da enable usage of openai like apis 2025-05-15 16:05:05 +02:00
a3c9fbbf2c revert try except 2025-05-15 19:40:40 +09:00
c79b655864 Fix typo in method parameter name 2025-05-15 18:42:08 +09:00
e55fd64bda Remove unnecessary nested try-except block for cleaner code. Streamlined the import statement to remove an unused reference to get_git_provider. 2025-05-15 18:41:39 +09:00
b6a401bcc2 Merge remote-tracking branch 'origin/main' 2025-05-14 07:35:17 +03:00
72bcb0ec4c docs: add Gemini-2.5-flash-preview benchmark comparisons to PR benchmark table 2025-05-14 07:35:09 +03:00
Tal
35d75e996f Merge pull request #1770 from dst03106/fix/add-ttl-when-callback-enabled
fix: add timeout to asyncio.wait during CLI execution to avoid hanging when callback is enabled
2025-05-13 18:33:56 +03:00
d3262d37e1 Merge pull request #1767 from qodo-ai/hl/manual_more_suggestions_docs
docs: enhance improve.md with manual suggestions for Bitbucket and Gi…
2025-05-13 18:19:56 +03:00
3ddd53d4fe docs: add link to example model card in benchmark documentation 2025-05-13 11:48:01 +03:00
e2af22d2a0 Log a warning for pending asyncio tasks with coroutine details 2025-05-13 17:37:09 +09:00
d86d1ef3dc Log a warning when there are pending asyncio tasks
Co-authored-by: qodo-merge-pro-for-open-source[bot] <189517486+qodo-merge-pro-for-open-source[bot]@users.noreply.github.com>
2025-05-13 17:34:30 +09:00
eb449202c9 Merge remote-tracking branch 'origin/main' 2025-05-13 11:31:57 +03:00
90c46bb2dd docs: update link to "Changing a model" documentation page 2025-05-13 11:31:28 +03:00
Tal
ad35e7dc07 Merge pull request #1771 from qodo-ai/tr/new_benchmark
Tr/new benchmark
2025-05-13 11:18:34 +03:00
Tal
87f4783fa0 Update docs/mkdocs.yml
Co-authored-by: qodo-merge-pro-for-open-source[bot] <189517486+qodo-merge-pro-for-open-source[bot]@users.noreply.github.com>
2025-05-13 09:11:06 +03:00
f0fa27535c docs: improve model comparison headings in benchmark documentation 2025-05-13 09:07:46 +03:00
cbfbfa662d docs: enhance benchmark table with colored win rates and improve comparison headings 2025-05-13 09:05:07 +03:00
3ec5bc12b7 s 2025-05-13 08:53:03 +03:00
e7317ce99f Add timeout to asyncio.wait 2025-05-13 14:46:50 +09:00
25530a8b2c docs: add benchmark methodology and improve model comparison formatting 2025-05-13 08:39:19 +03:00
489a16a3e6 docs: reorganize documentation structure and move PR benchmark section 2025-05-13 08:05:36 +03:00
b334bcd250 docs: enhance improve.md with manual suggestions for Bitbucket and GitLab 2025-05-12 16:54:28 +03:00
Tal
9cc6d37165 Merge pull request #1764 from twdkeule/bugfix/markdown-link-in-prompt
Changelog prompt: fix markdown link
2025-05-12 16:01:28 +03:00
Tal
bcbb3ac228 Merge pull request #1746 from twdkeule/feature/azure-devops-persistent-comment
Implement Azure Devops persistent comment
2025-05-12 15:56:12 +03:00
d6aaf8a709 docs: Update "Apply this suggestion" to "Apply / Chat" 2025-05-12 11:13:01 +03:00
db0c213d72 AzureDevops webhook: allow disabling BasicAuth
Azure webhooks do not allow BasicAuth without HTTPS
2025-05-12 09:00:36 +02:00
954d61e5dc Azure: refactor publish_code_suggestions() to use azure classes 2025-05-12 09:00:36 +02:00
24a90cab8e Azure: handle inline /ask 2025-05-12 09:00:17 +02:00
d6a7c89762 docs: add Gemini-2.5-pro-preview vs GPT-4.1 benchmark comparison 2025-05-12 09:53:59 +03:00
67272700a6 Azure: handle line comments 2025-05-12 08:31:15 +02:00
3a07b55d0c Azure: dont start threads as active because they block the pull request 2025-05-12 08:31:15 +02:00
c924affebc Azure devops provider: add persistent comment 2025-05-12 08:31:15 +02:00
e516d66c1c Azure: return Comment object when creating comment 2025-05-12 08:31:15 +02:00
212c72eb7d Changelog prompt: fix markdown link 2025-05-12 08:26:19 +02:00
bd911b67d8 docs: add Gemini-2.5-pro-preview model comparison to benchmark documentation 2025-05-12 08:11:57 +03:00
c5bcc21a61 docs: update timestamp label for clarity on recent updates page 2025-05-11 17:32:07 +03:00
Tal
eb1138148b Merge pull request #1762 from qodo-ai/tr/docker_action
fix: update Docker base image to slim version and install required de…
2025-05-11 17:20:27 +03:00
Tal
4210262e27 Update Dockerfile.github_action
Co-authored-by: qodo-merge-pro-for-open-source[bot] <189517486+qodo-merge-pro-for-open-source[bot]@users.noreply.github.com>
2025-05-11 17:19:58 +03:00
df0d065705 fix: update Docker base image to slim version and install required dependencies 2025-05-11 17:17:58 +03:00
Tal
682ceaa5db Merge pull request #1761 from qodo-ai/tr/recent_updates
docs: add recent updates and future roadmap section to documentation
2025-05-11 12:40:19 +03:00
90445342b3 docs: fix typo in scan repo discussions tool name and add help docs tool 2025-05-11 12:35:50 +03:00
22e4276f1a docs: fix typo in scan repo discussions tool name and add help docs tool 2025-05-11 12:33:55 +03:00
0e102a4ad5 docs: add recent updates and future roadmap section to documentation 2025-05-11 11:53:22 +03:00
91b3f2ee80 docs: improve improve tool documentation with visual section headers 2025-05-11 11:12:58 +03:00
Tal
850583acb4 Merge pull request #1758 from joosomi/fix/pr-description-type-header
fix: avoid duplicate header for list types to prevent markdown break
2025-05-11 11:06:42 +03:00
Tal
38a81dd691 Merge pull request #1760 from isExample/fix/local-configuration-file-description
docs: clarify that .pr_agent.toml can be updated post PR creation
2025-05-11 11:06:35 +03:00
Tal
ccf8182c53 Merge pull request #1757 from qodo-ai/of/new_tab_to_improve_tool
docs: improve readability of improve tool documentation with tabs
2025-05-11 11:05:06 +03:00
Tal
f1e02e311d Merge pull request #1759 from qodo-ai/tr/feedback_on_draft_pr
docs: add information about feedback on draft PRs
2025-05-11 11:02:58 +03:00
6596f782e1 docs: clarify that .pr_agent.toml can be updated post PR creation 2025-05-10 16:05:37 +09:00
Tal
943fe57231 Merge pull request #1753 from jihan-chillin/fix/logger-artifact-key
fix:correct typo in logger parameter from 'artifacts' to 'artifact'
2025-05-10 08:50:59 +03:00
625085a0f8 docs: add information about feedback on draft PRs 2025-05-09 16:16:26 +03:00
57eaba0e75 fix: ensure string conversion for list elements 2025-05-09 21:33:42 +09:00
6062c99c47 fix: avoid duplicate header for list types to prevent markdown break 2025-05-09 21:20:04 +09:00
171be6727a docs: fix typos and improve wording in improve tool documentation 2025-05-09 14:53:03 +03:00
b658986a5e docs: improve readability of improve tool documentation with tabs 2025-05-09 14:24:07 +03:00
c357f09967 fix:correct typo in logger parameter from 'artifacts' to 'artifact' 2025-05-09 11:12:04 +09:00
Tal
36307e66f1 Merge pull request #1749 from simonstamm/main
fix(gitlab): trigger when MR changes from draft to ready
2025-05-08 19:18:53 +03:00
Tal
8bc39c0120 Merge pull request #1745 from MaxnSter/fix/extra_instruction
fix: Prevent duplicate language instructions in extra_instructions
2025-05-08 19:04:53 +03:00
Tal
f5857f0fde Merge pull request #1744 from irfansofyana/openrouter-support
Openrouter support
2025-05-08 19:02:02 +03:00
Tal
0c21d4a48a Merge pull request #1742 from twdkeule/feature/parse-azure-url
Azure devops: parse PR url starting from the end
2025-05-08 19:00:32 +03:00
38f00386b4 fix(gitlab): trigger when MR changes from draft to ready 2025-05-08 12:50:54 +02:00
a11e97b5f5 fix: Prevent duplicate language instructions in extra_instructions 2025-05-07 18:26:12 +08:00
4a8722acd5 docs: Add tip about using keywords to direct the agent in code suggestions 2025-05-07 11:21:59 +03:00
5061fb5a24 docs: add support for openrouter 2025-05-07 12:04:45 +07:00
7a6a28d2b9 feat: add openrouter support in litellm 2025-05-07 11:54:07 +07:00
df1d859e54 Azure devops: parse PR url starting from the end 2025-05-06 15:01:48 +02:00
f85587fb1f docs: add configuration options for best practices in improve tool 2025-05-04 17:47:25 +03:00
Tal
e9924eab89 Merge pull request #1737 from qodo-ai/of/update-fallback-model
doc: title refinement
2025-05-04 16:45:07 +03:00
f0db5cb43b revert model fixation 2025-05-04 16:35:14 +03:00
Tal
8bb207f0bd Merge pull request #1738 from qodo-ai/tr/docker_slim
Use slim Docker image and install git and curl dependencies
2025-05-02 09:20:11 +03:00
5a3010389d Optimize Docker image by cleaning apt cache after installing dependencies 2025-05-02 09:16:43 +03:00
8edacf08bb Use slim Docker image and install git and curl dependencies 2025-05-02 09:13:21 +03:00
914d053801 improve.md: refine a sub-title 2025-05-01 08:38:21 +03:00
897a5c66fa Update fallback model 2025-05-01 08:31:19 +03:00
d606672801 Add ignore_repositories config for PR filtering
What Changed?
* Added support to ignore PRs/MRs from specific repositories in GitHub, Bitbucket, and GitLab webhook logic
* Updated configuration.toml to include ignore_repositories option
* Added unit tests for ignore_repositories across all supported providers
2025-04-30 14:09:40 -07:00
ef9e0b1f12 Merge pull request #1735 from qodo-ai/of/read-me-updatea
docs: add data privacy and contributing sections to README and update news
2025-04-30 19:33:37 +03:00
968d2ee39b docs: add data privacy and contributing sections to README and update news 2025-04-30 17:00:13 +03:00
b09eec265e docs: clarify that RAG capability is exclusive to specific tools 2025-04-30 13:29:45 +03:00
ed5b8e7828 Merge remote-tracking branch 'origin/main' 2025-04-30 11:15:00 +03:00
056adc6545 Update documentation for improve tool by removing GitHub link and clarifying text 2025-04-30 11:14:50 +03:00
75a047f348 docs: add clarification about RAG capability tools list 2025-04-30 10:49:05 +03:00
Tal
14ad0445f5 Merge pull request #1731 from Yash-1511/docs/update-gemini
docs: update Gemini model path from google_ai_studio to gemini in con…
2025-04-30 10:44:10 +03:00
Tal
bf16fcd0fb Merge pull request #1728 from barnett-yuxiang/fix/reportInvalidTypeForm
Fix type hint for get_pr_description method and clean up whitespace
2025-04-30 10:43:06 +03:00
63f50bc162 docs: convert RAG context enrichment applications to tabbed format 2025-04-30 09:14:45 +03:00
bfca4f2515 docs: update Gemini model path from google_ai_studio to gemini in configuration docs 2025-04-29 20:57:41 +05:30
7b82b08173 fix: correct grammar in Qodo Merge orchestrator agent description 2025-04-29 12:35:10 +03:00
3dc0cac975 docs: Chat on code suggestions: Add interactive code suggestions documentation with tabbed examples 2025-04-29 09:12:20 +03:00
4cbd265082 Merge pull request #1727 from qodo-ai/of/gan-and-chat-updates
Add documentation for chat on code suggestions with example image and update RAG platform support
2025-04-28 19:05:16 +03:00
e69b17cb1a Update code suggestion chat documentation with orchestrator agent description 2025-04-28 13:59:44 +03:00
26dc3b7f21 Update code suggestion chat documentation with multi-node agent description 2025-04-28 13:02:54 +03:00
4ad43c48e5 Fix type hint for get_pr_description method and clean up whitespace 2025-04-28 17:59:09 +08:00
ab0e3bde49 Remove extra blank lines in improve.md documentation 2025-04-28 08:52:06 +03:00
1c3629d4c2 Add documentation for chat on code suggestions with example image and update RAG platform support 2025-04-28 08:50:58 +03:00
cbe03b82fe Remove Help Docs entry and update Auto Best Practices platform support 2025-04-27 16:15:46 +03:00
9926a10b00 Add Help Docs, Code Validation, and Auto Best Practices features to platform support tables 2025-04-27 15:58:14 +03:00
Tal
f137509c78 Merge pull request #1718 from barnett-yuxiang/fix/poetry-install-error
Update .gitignore and fix license format in pyproject.toml
2025-04-27 11:17:35 +03:00
Tal
43f9a6fc17 Merge pull request #1721 from bananana0118/fix-typo-in-docs
Docs: fix typo in response_language setting inside .pr-agent.toml configuration guide
2025-04-27 11:16:13 +03:00
Tal
1b0aa16282 Merge pull request #1726 from qodo-ai/tr/multi_model_prompt
Tr/multi model prompt
2025-04-27 11:15:39 +03:00
f505c7ad3c Add multi-model support for different reasoning tasks 2025-04-27 11:00:34 +03:00
c951fc9a87 Improve dynamic context handling with partial line matching and adjust model configuration 2025-04-27 10:46:23 +03:00
3f194e6730 Improve dynamic context handling in git patch processing 2025-04-27 10:07:56 +03:00
f53bd524c5 Support multiple model types for different reasoning tasks 2025-04-27 08:50:03 +03:00
60a887ffe1 Improve code suggestion prompts for clarity, accuracy, and evaluation criteria 2025-04-27 08:42:28 +03:00
bb8e606f93 docs: fix spacing after equals sign in TOML example 2025-04-25 14:55:31 +09:00
9549289a71 docs: fix typo in response_language setting 2025-04-25 14:51:15 +09:00
ff00e303cc docs: fix typo in documentation about config response_language from pr-agent.toml 2025-04-25 14:38:37 +09:00
31e5517833 Merge remote-tracking branch 'origin/main' 2025-04-24 18:05:57 +03:00
4ff2bd176b Fix typo in Qodo Merge bot detection documentation 2025-04-24 18:05:48 +03:00
Tal
8684baf050 Merge pull request #1719 from qodo-ai/of/docs-improve-free-chat
Add documentation for chat functionality in code suggestions
2025-04-24 17:43:58 +03:00
68737b6432 Add platform support indicators for chat on code suggestions feature 2025-04-24 15:39:48 +03:00
4a231f8933 Add documentation for chat functionality in code suggestions 2025-04-24 15:32:01 +03:00
87532cf68c Add documentation about preserving original PR descriptions in Qodo Merge 2025-04-24 14:59:58 +03:00
9df0f71d4a Update .gitignore and fix license format in pyproject.toml 2025-04-24 16:14:02 +08:00
dedad94a20 Fix code indentation in get_review_thread_comments method 2025-04-24 09:34:51 +03:00
5d5b57255e Merge pull request #1687 from benedict-lee/feat/add-conversation-history-on-line-question
Improvement: Enhance ask_line tool by adding PR review comment threads as context
2025-04-24 09:32:43 +03:00
6ceea2b134 Clarify Qodo Merge's exclusive features and bot handling behavior 2025-04-24 08:28:23 +03:00
c35942c12b mprove get_review_thread_comments method implementation
Co-authored-by: ofir-frd <85901822+ofir-frd@users.noreply.github.com>
2025-04-24 11:23:16 +09:00
ddb94ec9b4 mprove get_review_thread_comments method implementation
Co-authored-by: ofir-frd <85901822+ofir-frd@users.noreply.github.com>
2025-04-24 11:22:43 +09:00
29d4fe510e Improve get_review_thread_comments method implementation
Co-authored-by: ofir-frd <85901822+ofir-frd@users.noreply.github.com>
2025-04-24 11:21:49 +09:00
7d17ed5b7f fix linting 2025-04-23 21:15:00 +03:00
Tal
47e46ee001 Merge pull request #1715 from qodo-ai/tr/improve_prompts
Improve field descriptions for code suggestion model clarity and brevity
2025-04-22 14:22:03 +03:00
1aa0186f5c Improve field descriptions for code suggestion model clarity and brevity 2025-04-22 14:19:54 +03:00
4685c25209 Merge remote-tracking branch 'origin/main' 2025-04-22 10:57:03 +03:00
fe0d5df145 Improve documentation formatting and navigation features 2025-04-22 10:56:53 +03:00
15b2b57677 Uncomment search plugin in mkdocs configuration 2025-04-22 08:49:30 +03:00
8a45e41749 Update Qodo Merge documentation with consistent heading capitalization 2025-04-22 08:14:53 +03:00
581f35db99 Update Qodo Merge documentation with detailed licensing information 2025-04-22 08:12:40 +03:00
fef0bc6146 Update Qodo Merge documentation with detailed licensing information 2025-04-22 08:09:49 +03:00
9906ec3687 Improve conversation history formatting with numbered comments 2025-04-21 17:14:36 +09:00
8b4bf49f1c Improve conversation history handling and prompts for line questions 2025-04-21 16:50:37 +09:00
e11c2e1c7f Reorganize imports according to Python conventions 2025-04-21 16:30:27 +09:00
a434d0af9b Improve comment thread retrieval by using in_reply_to_id instead of line numbers 2025-04-21 16:28:42 +09:00
Tal
baf361f0f0 Merge pull request #1712 from qodo-ai/tr/multi_model
Update model references from o3-mini to o4-mini and add Gemini models
2025-04-19 09:29:02 +03:00
4ac0aa56e5 Update model references from o3-mini to o4-mini and add Gemini models 2025-04-19 09:26:35 +03:00
Tal
ca88ec96d6 Merge pull request #1710 from PeterDaveHelloKitchen/SwitchDefaultTo-o4-mini
Replace default o3-mini with o4-mini
2025-04-19 09:00:35 +03:00
e854383123 Replace default o3-mini with o4-mini 2025-04-19 03:52:10 +08:00
Tal
1327a4437d Merge pull request #1711 from nicohein/feature/simplified-bitbucket-pipeline
Feature/simplified bitbucket pipeline
2025-04-18 21:51:49 +03:00
002c71f1ba Merge branch 'qodo-ai:main' into feature/simplified-bitbucket-pipeline 2025-04-18 14:44:28 -04:00
2fa4438310 docs: itemization fix 2025-04-18 14:42:51 -04:00
e41050d39c Merge remote-tracking branch 'origin/main' 2025-04-18 21:40:50 +03:00
5e98926b5a Update scan_repo_discussions.md to clarify focus on best practices 2025-04-18 21:40:39 +03:00
Tal
a459e8c8e1 Merge pull request #1703 from nicohein/feature/simplified-bitbucket-pipeline
docs: updated bitbucket pipeline docs
2025-04-18 21:26:54 +03:00
Tal
151daa070f Merge pull request #1709 from PeterDaveHelloKitchen/Ignore.venv
Add .venv/ to .dockerignore and .gitignore for virtual env compatibility
2025-04-18 21:19:06 +03:00
Tal
11ebbc994f Merge pull request #1708 from PeterDaveHelloKitchen/UpgradeLiteLLM
Upgrade litellm to v1.66.3
2025-04-18 21:18:31 +03:00
Tal
f177ff4214 Merge pull request #1707 from dst03106/feature/add-support-for-mistral-and-codestral
Add support for Mistral and Codestral models
2025-04-18 21:17:27 +03:00
Tal
8f6edadbeb Merge pull request #1704 from DongjaJ/ci/update-github-actions-versions
Update GitHub actions version
2025-04-18 21:11:03 +03:00
Tal
246f372e4a Merge pull request #1706 from PeterDaveHelloKitchen/ImproveDocs
Improve markdown docs formatting for consistency and readability
2025-04-18 21:10:47 +03:00
e6ee2b96e2 Add .venv/ to .dockerignore and .gitignore for virtual env compatibility
Include .venv/ alongside venv/ to align with common Python virtual
environment practices as recommended in the official documentation.
2025-04-18 21:43:05 +08:00
fab4717449 Upgrade litellm to v1.66.3 2025-04-18 20:27:46 +08:00
869a179506 feat: add support for Mistral and Codestral models 2025-04-18 14:04:59 +09:00
f0fc777a44 Improve markdown docs formatting for consistency and readability 2025-04-18 03:34:20 +08:00
Tal
58f6943b12 Merge pull request #1705 from qodo-ai/tr/basic_auth
Add Basic Authentication method for Jira Data Center/Server and valid…
2025-04-17 19:14:47 +03:00
999d03f7aa Add Basic Authentication method for Jira Data Center/Server and validation script 2025-04-17 18:51:50 +03:00
2628f2a997 Upgrade litellm to v1.66.2 2025-04-17 23:37:33 +08:00
6cf0ae0731 ci: Upgrade Codecov action to v5 in workflow files 2025-04-17 23:05:47 +09:00
be957cd2ea ci: Upgrade docker/build-push-action to v6 in workflow files 2025-04-17 23:05:10 +09:00
8ad3eb583a ci: Upgrade Docker Buildx action to v3 in workflow files 2025-04-17 23:02:48 +09:00
2e18053e02 ci: Update actions/checkout to v4 in workflow files 2025-04-17 22:57:18 +09:00
Tal
696cdc3b45 Merge pull request #1702 from PeterDaveHelloKitchen/add-o3-and-o4-mini
Add OpenAI o3 & 4o-mini reasoning models
2025-04-17 11:00:00 +03:00
e5df079dce docs: updated bitbucket pipeline docs to make direct use of the pr-agent image without docker in docker 2025-04-16 18:01:58 -04:00
4e3e963ce5 Add OpenAI o3 & 4o-mini reasoning models
Reference:
- https://platform.openai.com/docs/models/o3
- https://platform.openai.com/docs/models/o4-mini
- https://openai.com/index/introducing-o3-and-o4-mini/
2025-04-17 02:32:14 +08:00
bc3ef4763d Update scan_repo_discussions.md to include links and customization notes 2025-04-16 14:17:59 +03:00
Tal
c332a8866b Merge pull request #1701 from qodo-ai/tr/scan_repo_discussions_docs
Add new tool for scanning repository discussions and generating best …
2025-04-16 13:45:35 +03:00
717b03de6e Fix link to Scan Repo Discussions tool in index.md 2025-04-16 13:43:37 +03:00
a5cb0e48fe Fix link to Scan Repo Discussions tool in index.md 2025-04-16 13:42:18 +03:00
7704379e62 Add new tool for scanning repository discussions and generating best practices 2025-04-16 13:39:52 +03:00
Tal
44a3e5819c Merge pull request #1698 from arpit-at/arp-feat/azure-open-ai-entra-id
Azure AD authentication for OpenAI services
2025-04-16 13:05:33 +03:00
27a7c1a94f doc update and minor fix 2025-04-16 13:32:53 +05:30
dc46acb762 doc update and minor fix 2025-04-16 13:27:52 +05:30
0da667d179 support Azure AD authentication for OpenAI services for litellm implemetation 2025-04-16 11:19:04 +05:30
73b3e2520c Rename code fine-tuning benchmark to pull request benchmark and update model references 2025-04-15 19:40:36 +03:00
3d2a285091 Add skip_ci_on_push configuration option for changelog updates 2025-04-15 19:28:36 +03:00
b1bc77c809 Merge remote-tracking branch 'origin/main' 2025-04-15 18:57:16 +03:00
14dafc4016 Update GPT-4o references to GPT-4.1 and upgrade litellm to 1.66.1 2025-04-15 18:57:09 +03:00
Tal
7d00574044 Merge pull request #1693 from PeterDaveHelloKitchen/ImproveMarkdownForChangingAModelGuide
Improve Markdown format in model configuration guide
2025-04-14 21:22:31 +03:00
Tal
93002acff8 Merge pull request #1692 from PeterDaveHelloKitchen/FixLinkInLocalInstallGuide
Correct the tools guide link in the locally installation doc
2025-04-14 21:21:01 +03:00
Tal
f08bed67f1 Merge pull request #1691 from PeterDaveHelloKitchen/UpdateREADME.md
Fix Discord link in README
2025-04-14 21:20:40 +03:00
08bf9593b2 Fix tokenizer fallback to use o200k_base instead of cl100k_base 2025-04-14 21:15:19 +03:00
Tal
4b58a5488f Merge pull request #1694 from PeterDaveHelloKitchen/gpt-4.1-family
Add support of OpenAI GPT-4.1 model family
2025-04-14 21:04:55 +03:00
57808075be Add support of OpenAI GPT-4.1 model family
Reference:
- https://openai.com/index/gpt-4-1/
- https://platform.openai.com/docs/models/gpt-4.1
2025-04-15 01:57:46 +08:00
Tal
2cb226dbcc Update README.md 2025-04-14 20:29:09 +03:00
943af0653b Improve formatting and clarity in Jira PAT token validation documentation 2025-04-14 08:29:19 +03:00
259d67c064 Improve Markdown format in model configuration guide
Enhance documentation readability by:
- Adding TOML language identifiers to enable syntax highlighting
- Adjusting spacing and formatting for proper Markdown rendering

These improvements make the guide easier to follow.
2025-04-13 01:02:22 +08:00
84fdc4ca2b Correct the tools guide link in the locally installation doc 2025-04-13 00:50:38 +08:00
c8f519ad70 Fix Discord link in README 2025-04-13 00:42:53 +08:00
8bdd11646c Fix token assignment in Bitbucket provider authentication 2025-04-12 10:07:45 +03:00
fc6de449ad Add Jira PAT token validation script for troubleshooting ticket retrieval issues 2025-04-12 09:58:17 +03:00
Tal
a649e323d3 Merge pull request #1683 from wirelessr/feat/issue-1681
Support Bitbucket Basic Auth
2025-04-11 14:37:56 +03:00
7a32faf64f Fix Bearer backward compatibility logic 2025-04-11 17:44:46 +08:00
3c8ad9eac8 Update doc for auth_type and basic_token 2025-04-11 16:55:32 +08:00
5f2d4d400e Extract repeated token retrieval logic into a helper function to reduce code duplication 2025-04-11 16:20:28 +08:00
0cbf65dab6 Update pr_agent/git_providers/bitbucket_provider.py
Co-authored-by: Prateek <110811408+Prateikx@users.noreply.github.com>
2025-04-11 14:59:27 +08:00
c0c307503f Update pr_agent/git_providers/bitbucket_provider.py
Co-authored-by: Prateek <110811408+Prateikx@users.noreply.github.com>
2025-04-11 14:55:06 +08:00
Tal
60ace1ed09 Merge pull request #1685 from imperorrp/add_gemini2.5preview
Add support of Gemini 2.5 Pro preview model
2025-04-11 09:54:09 +03:00
Tal
7f6014e064 Merge pull request #1684 from PeterDaveHelloKitchen/Support-xAI-Grok
Add support of xAI and their Grok-2 & Grok-3 model
2025-04-11 09:53:08 +03:00
Tal
e4f40da35c Merge pull request #1680 from PeterDaveHelloKitchen/Add-Groq-Llama-4-scout-and-maverick-17b
Add support of Meta's Llama 4 Scout and Maverick 17b from Groq Cloud
2025-04-11 09:51:21 +03:00
0ac7028bc6 Support xAI Grok-3 series models
Reference:
- https://docs.x.ai/docs/release-notes#april-2025
2025-04-11 00:40:00 +08:00
a919c62606 Update options.md 2025-04-10 18:23:52 +03:00
abda701539 Merge pull request #1689 from qodo-ai/docs/chrome_ext_options
docs: add Chrome extension options documentation page
2025-04-10 16:33:30 +03:00
9c06b6b266 Apply PR review feedback: Code style and functionality improvements 2025-04-10 21:56:37 +09:00
c5165d917b refactor: Validate all required parameters before proceeding
Co-authored-by: ofir-frd <85901822+ofir-frd@users.noreply.github.com>
2025-04-10 19:59:34 +09:00
6bf093a6a1 refactor: Add GitHub provider check for conversation history
Co-authored-by: ofir-frd <85901822+ofir-frd@users.noreply.github.com>
2025-04-10 19:41:43 +09:00
da59a6dbe8 docs: add Chrome extension options documentation page 2025-04-10 12:46:06 +03:00
e44b371d34 docs: add Chrome extension options documentation page 2025-04-10 11:46:10 +03:00
8952459f6d Update pr_agent/tools/pr_line_questions.py
Co-authored-by: Prateek <110811408+Prateikx@users.noreply.github.com>
2025-04-10 08:48:59 +09:00
b53d2773a9 improve ask_line tool(add conversation history context) 2025-04-09 23:45:04 +09:00
Tal
edaab4b6b1 Merge pull request #1682 from qodo-ai/of/extend-rag-chapter
docs: Add RAG applications and alphabetize documentation
2025-04-09 13:21:51 +03:00
2476dadf53 Enhance interactivity documentation with details on suggestion tracking 2025-04-09 11:25:56 +03:00
526d7ff5d2 Update default number of code suggestions per chunk from 4 to 3 2025-04-09 08:24:26 +03:00
cdc354c33b disable dynamic variables 2025-04-08 21:07:45 +03:00
eb9c4fa110 add gemini 2.5 pro preview model token limit 2025-04-08 20:41:59 +05:30
ca95e876eb Enhance Bitbucket provider functionality and update secret configuration template. 2025-04-08 17:52:52 +08:00
4ee9f784dd Alphabetize core abilities documentation links for better navigation 2025-04-08 12:06:11 +03:00
ef7a8eafb6 Add RAG context enrichment application details for review, implement, and ask tools 2025-04-08 11:59:37 +03:00
83bb3b25d8 Add support of Meta's Llama 4 Scout and Maverick 17b from Groq Cloud
Reference:
- https://ai.meta.com/blog/llama-4-multimodal-intelligence/
- https://console.groq.com/docs/models#preview-models
- https://groq.com/llama-4-now-live-on-groq-build-fast-at-the-lowest-cost-without-compromise/
2025-04-08 01:47:15 +08:00
665fb90a98 Add support of xAI and their Grok-2 model
Close #1630
2025-04-08 01:36:21 +08:00
Tal
0161769f22 Merge pull request #1679 from PeterDaveHelloKitchen/Add-OpenAI-GPT-4.5-Preview
Add support of OpenAI GPT-4.5 Preview model
2025-04-07 20:07:55 +03:00
629de489dd Update RAG context enrichment documentation with enterprise plan requirements 2025-04-07 08:46:09 +03:00
Tal
a4957693ba Merge pull request #1677 from saumil-kapadia-stellantispublic/patch-1
Updated Dockerfile.lambda for python version 3.12
2025-04-07 07:30:41 +03:00
e8171b0289 Updated Dockerfile.lambda for python version 3.12
Updated Dockerfile.lambda for python version 3.12
2025-04-06 22:40:04 +05:30
d4cc57c32a Improve code validation documentation with clearer suggestion application details 2025-04-04 16:54:23 +03:00
cb47cd5144 Update interactivity documentation with consistent formatting and links 2025-04-04 11:36:40 +03:00
Tal
99d88f8d1d Merge pull request #1674 from qodo-ai/of/add-iteractivity-content
Docs: Add Core Abilities / Interactivity
2025-04-04 11:32:13 +03:00
Tal
d938ff05ef Merge pull request #1667 from jmrtnz94/1592_ENVLogLevel
Update logging configuration to use dynamic log level from settings
2025-04-04 11:31:44 +03:00
ae6c4e741a Standardize capitalization in documentation navigation links 2025-04-04 11:04:56 +03:00
282fb0ed28 Add interactive features documentation for PR workflow tools 2025-04-04 11:00:44 +03:00
9b19fcdc90 Add support of OpenAI GPT-4.5 Preview model
Reference:
- https://openai.com/index/introducing-gpt-4-5/
- https://platform.openai.com/docs/models/gpt-4.5-preview
2025-04-04 05:13:15 +08:00
76b447a62a Add logging configuration details to usage guide 2025-04-03 14:24:59 -05:00
b7b533ddf6 Update azuredevops logger setup to use dynamic log level from configuration 2025-04-03 14:10:52 -05:00
7987fd1be7 Update bitbucket logger setup to use dynamic log level from configuration 2025-04-03 14:10:11 -05:00
db06a8e49e Update github logger setup to use dynamic log level from configuration 2025-04-03 14:09:11 -05:00
4fa2d82179 Set default log level to DEBUG in configuration and logger setup 2025-04-03 14:07:10 -05:00
1ffddaf719 Add self-reflection reference to code validation documentation 2025-04-03 19:36:05 +03:00
Tal
94aa090552 Merge pull request #1672 from qodo-ai/tr/docs52
Add code validation documentation for PR code suggestions
2025-04-03 17:55:32 +03:00
2683b78e34 Add code validation documentation for PR code suggestions 2025-04-03 17:54:20 +03:00
eac20ba0e2 Add code validation documentation for PR code suggestions 2025-04-03 17:52:38 +03:00
Tal
c2e61b7113 Update docs/docs/core-abilities/code_validation.md
Co-authored-by: qodo-merge-pro-for-open-source[bot] <189517486+qodo-merge-pro-for-open-source[bot]@users.noreply.github.com>
2025-04-03 17:52:06 +03:00
c74a2efdb7 Add code validation documentation for PR code suggestions 2025-04-03 17:44:01 +03:00
1710cd49f1 Merge pull request #1671 from qodo-ai/of/pr-reviewer-error-handling
fix: add error handling for missing review data in PR reviewer
2025-04-03 13:26:38 +03:00
9254225949 fix: add error handling for missing review data in PR reviewer 2025-04-03 13:23:41 +03:00
14971c4f5f Add support for documentation content exceeding token limits (#1670)
* - Add support for documentation content exceeding token limits via two phase operation:
1. Ask LLM to rank headings which are most likely to contain an answer to a user question
2. Provide the corresponding files for the LLM to search for an answer.

- Refactor of help_docs to make the code more readable
- For the purpose of getting canonical path: git providers to use default branch and not the PR's source branch.
- Refactor of token counting and making it clear on when an estimate factor will be used.

* Code review changes:
1. Correctly handle exception during retry_with_fallback_models (to allow fallback model to run in case of failure)
2. Better naming for default_branch in bitbucket cloud provider
2025-04-03 11:51:26 +03:00
ceaca3e621 Update feature comparison table with detailed links and new capabilities 2025-04-02 19:39:23 +03:00
3b0225544a Fix code example in PR reviewer prompts to correctly show added line 2025-04-02 08:23:01 +03:00
dbfc07ccc1 Update logging configuration to use dynamic log level from settings 2025-04-01 15:54:51 -05:00
f0e0901b10 Update repository configuration references from main branch to default branch 2025-04-01 09:42:08 +03:00
d749620ebb Update default model reference from GPT-4 to o3-mini and improve model configuration docs 2025-04-01 08:15:09 +03:00
Tal
e692735b7b Merge pull request #1662 from qodo-ai/tr/more_protections
Tr/more protections gitlab
2025-03-31 14:02:33 +03:00
Tal
ed00ef6ee3 Merge pull request #1663 from qodo-ai/tr/prompts_and_logic
Improve code analysis instructions for handling partial code blocks i…
2025-03-31 13:56:29 +03:00
c674c5ed02 Update bitbucket related documentation (#1659) 2025-03-31 09:09:43 +03:00
20cb139161 Improve code suggestion prompt to clarify handling of partial code segments in PR reviews 2025-03-31 08:39:40 +03:00
8513a1a4b9 Merge pull request #1660 from qodo-ai/of/refine-rag-file
docs: Rename Company Codebase to RAG Context Enrichment
2025-03-30 10:23:04 +03:00
a7ab04ba8d Update trial information in Qodo Merge documentation with grace usage details 2025-03-30 09:18:45 +03:00
afa4adcb23 Improve code analysis instructions for handling partial code blocks in PR reviews 2025-03-30 09:00:45 +03:00
7bd0fefee4 Fix GitLab protections function and return value in PR questions 2025-03-29 19:53:46 +03:00
02d9aed7fe Fix GitLab provider to use default branch instead of target branch for repo settings 2025-03-29 19:39:56 +03:00
7d47bd5f5e Add GitLab protections to prevent quick actions in PR questions 2025-03-29 19:35:39 +03:00
8f0df437dd Add video tutorials link to documentation index page 2025-03-29 15:38:12 +03:00
ddf94c14a3 Add configuration option for PR Code Suggestions to control publishing when no suggestions found 2025-03-29 09:33:31 +03:00
6b2a1ff529 Update image reference in rag_context_enrichment documentation 2025-03-28 17:00:42 +03:00
4a5c115d20 Rename company_codebase to rag_context_enrichment in documentation 2025-03-28 16:54:52 +03:00
069f5eb86f Add Help Docs tool announcement to README.md with March 28, 2025 release notes 2025-03-28 15:48:10 +03:00
7d57edf959 Improve help_docs documentation with clearer structure and usage examples 2025-03-28 15:22:08 +03:00
6950b3ca6b Merge pull request #1658 from qodo-ai/es/bugfix_on_help_docs_no_references_when_new_issue_created
Fix for bug in get_canonical_url_parts when a new issue created, without git url provided
2025-03-27 17:50:42 +02:00
e422f50cfe Fix for bug in get_canonical_url_parts when a new issue created, without git url provided. 2025-03-27 17:29:02 +02:00
66a667d509 Update main readme file + improve help docs (#1653)
* Update main readme file + improve help docs

* Add guide on running help_docs as a GitHub action.
2025-03-27 16:23:50 +02:00
482cd7c680 Merge pull request #1651 from qodo-ai/es/github_publish_non_pr_comment
Add support for publishing comments on issues in GitHub provider
2025-03-27 16:19:20 +02:00
991a866368 documents' link generation: Make sure prefix ends with '/' 2025-03-26 21:58:15 +02:00
fcd9416129 Replace Qodo Merge references with PR-Agent in Bitbucket documentation 2025-03-26 20:06:32 +02:00
255e1d0fc1 Missing class member 2025-03-26 14:29:50 +02:00
7117e9fe0e Github Provider: Support publishing a comment on a non pr issue 2025-03-26 13:36:37 +02:00
Tal
b42841fcc4 Merge pull request #1649 from qodo-ai/hl/global_best_practices
docs: update configuration options and improve wiki documentation cla…
2025-03-26 13:07:09 +02:00
839b6093cb Update company_codebase.md 2025-03-26 09:50:01 +02:00
351b9d9115 Update company_codebase.md 2025-03-26 09:47:59 +02:00
3e11f07f0b Merge pull request #1650 from qodo-ai/of/add-ref-image-to-rag
Add codebase references screenshot to company_codebase documentation
2025-03-26 09:35:00 +02:00
1d57dd7443 Update image alt text in company_codebase documentation 2025-03-26 08:44:11 +02:00
7aa3d12876 Add codebase references screenshot to company_codebase documentation 2025-03-26 08:41:56 +02:00
Tal
6f6595c343 Merge pull request #1634 from ishaansehgal99/main
fix: Logging and Commenting
2025-03-26 07:51:24 +02:00
b300cfa84d Improve error logging with artifacts 2025-03-25 22:49:24 -07:00
9a21069075 docs: update configuration options and improve wiki documentation clarity 2025-03-25 13:53:22 +02:00
85f7b99dea Merge pull request #1648 from qodo-ai/of/add-rag-docs
Update Docs: Company Codebase Overview, RAG Integration & Configuration
2025-03-25 12:51:39 +02:00
d6f79f486a Update code block syntax highlighting in company_codebase documentation 2025-03-25 12:42:11 +02:00
b0ed584821 Update company codebase documentation link and rename file 2025-03-25 12:27:36 +02:00
05ea699a92 Merge pull request #1647 from qodo-ai/es/bugfix_github_app_git_url_generation
Bugfix: Incorrect git url in case of GitHub app
2025-03-25 12:20:10 +02:00
605eef64e7 Generate git url correctly in case invoked from both user and GitHub app contexts 2025-03-25 12:08:00 +02:00
c94aa58ae4 Fix typo in Qodo Merge models documentation 2025-03-25 09:23:30 +02:00
Tal
e20e7c138c Merge pull request #1644 from qodo-ai/es/help_docs
Adding a new tool: /help_docs
2025-03-25 08:17:37 +02:00
b161672218 Remove redundant abstractmethod for _prepare_clone_url_with_token 2025-03-24 15:56:45 +02:00
5bc253e1d9 Add token count estimation factor to config 2025-03-24 15:53:22 +02:00
8495e4d549 More comprehensive handling in count_tokens(force_accurate==True): In case model is neither OpenAI nor Anthropic Claude, simply use an elbow room factor in order to force a more conservative estimate. 2025-03-24 15:47:35 +02:00
fb324d106c Remove non implemented method _prepare_clone_url_with_token from providers which don't support it and instead, issue a warning in base class. 2025-03-24 14:06:06 +02:00
a4387b5829 Fix more /improve suggestions 2025-03-24 11:19:23 +02:00
477ebf4926 Code recommendations from /improve 2025-03-24 10:54:50 +02:00
fe98779a88 Update images in help_docs md 2025-03-24 10:32:55 +02:00
e14fc7e02d Fix missing self.bearer_token for bitbucket related providers 2025-03-24 10:21:23 +02:00
1bd65934df Merge origin/main into es/help_docs 2025-03-23 20:04:58 +02:00
88a17848eb - Documentation
- Better error handling in case could not deduce repo url
2025-03-23 20:04:33 +02:00
Tal
1aab87516e Merge pull request #1637 from Octoslav/doc/ollama
doc: Add info about ollama context length
2025-03-23 15:22:14 +02:00
dd80276f3f Support cloning repo
Support forcing accurate token calculation (claude)
Help docs: Add desired branch in case of user supplied git repo, with default set to "main"
Better documentation for getting canonical url parts
2025-03-23 09:55:58 +02:00
ad17cb4d92 cleanup 2025-03-23 09:26:44 +02:00
Tal
6efb694945 Generated best practices file 2025-03-23 09:07:01 +02:00
dde362bd47 doc: Add info about ollama context length 2025-03-22 00:53:48 +03:00
Tal
a9ce909713 Merge pull request #1636 from cdornano/cdornano-patch-1
Update azuredevops_provider.py
2025-03-21 18:54:18 +02:00
e925f31ac0 Update azuredevops_provider.py
Will make qodo agent comments "Active" by default, and not "ByDesign" which is renders to "unknown" on Azure DevOps PRs. With this, PR authors are obliged to treat the PR comment of the qodo agent before Merging. This will help companies in analysing the impact of qodo agent on their PR, as every comment needs to be treated as either "Resolved" "Won't fix" "Close"
2025-03-21 12:57:03 +00:00
5e7e353670 Added help_docs feature. 2025-03-20 23:48:01 +02:00
52d4312c9a fix: Logging and Commenting 2025-03-20 13:59:43 -07:00
8ec6067b26 Merge branch 'qodo-ai:main' into main 2025-03-20 13:57:46 -07:00
bc575e5a67 fix: Logging and Commenting 2025-03-20 13:55:07 -07:00
b087458e33 Merge remote-tracking branch 'origin/main' 2025-03-20 21:49:27 +02:00
6610921bba cleanup 2025-03-20 21:49:19 +02:00
Tal
3fd15042a6 Merge pull request #1628 from thonic/main
docs: Update description of gitlab-webhook installation.
2025-03-20 21:18:57 +02:00
4ab2396be0 Merge pull request #1625 from qodo-ai/hl/update_configs_docs
Hl/update configs docs
2025-03-20 14:09:39 +02:00
a75d430751 docs: Update description of gitlab-webhook installation. 2025-03-18 15:40:49 +01:00
Tal
737cf559d9 Merge pull request #1626 from eltociear/patch-3
chore: update pr_reviewer_prompts.toml
2025-03-18 08:07:11 +02:00
fa77828db2 chore: update pr_reviewer_prompts.toml
minor fix
2025-03-18 03:52:36 +09:00
f506fb1e05 docs: clarify that thumbs up/down feedback is for statistics only 2025-03-17 19:46:07 +02:00
4ea46d5b25 docs: fix formatting of note in configuration options 2025-03-17 14:42:57 +02:00
ed9fcd0238 docs: add Bitbucket organization-level configuration documentation 2025-03-17 14:26:05 +02:00
9d3bd7289a docs: add Bitbucket organization-level configuration documentation 2025-03-17 14:24:38 +02:00
1724a65ab2 docs: remove similar issues tool from documentation 2025-03-16 08:58:02 +02:00
Tal
6883ced9e3 Merge pull request #1624 from qodo-ai/of/config-view-fixes
Move Config Content Inside Collapsible Titles
2025-03-15 21:50:31 +02:00
29e28056db refactor: move response_language config to group with other language settings 2025-03-15 09:58:20 +02:00
507cd6e675 skip in PR config 2025-03-15 09:56:57 +02:00
dd1a0e51bb docs: reorganize and clarify Jira integration documentation 2025-03-15 09:13:26 +02:00
b4e2a32543 Update describe.md 2025-03-14 12:04:58 +02:00
677a54c5a0 Update review.md 2025-03-14 12:02:26 +02:00
a211175fea docs: expand on the purpose of code suggestions in improve.md 2025-03-13 17:06:08 +02:00
Tal
64f52288a1 Merge pull request #1616 from qodo-ai/tr/updates34
Tr/updates34
2025-03-12 07:20:25 +02:00
4ee1704862 Merge pull request #1615 from qodo-ai/hl/self_review_docs
Update improve.md
2025-03-11 18:26:37 +02:00
f5e381e1b2 Add fallback for YAML parsing using original response text 2025-03-11 17:11:10 +02:00
2cacaf56b0 Reduce collapsible_file_list_threshold from 8 to 6 2025-03-11 17:08:26 +02:00
9a574e0caa Add filter for files with bad extensions in language handler 2025-03-11 17:03:05 +02:00
0f33750035 Remove unused filter_bad_extensions function and rename diff_files_original to diff_files 2025-03-11 16:56:41 +02:00
4713175fcf Update code suggestion evaluation criteria and line number descriptions 2025-03-11 16:50:42 +02:00
d16012a568 Add decoupled and non-decoupled modes for code suggestions 2025-03-11 16:46:53 +02:00
01f1599336 Update improve.md 2025-03-11 16:31:31 +02:00
f5bd98a3b9 Add check for auto-generated files in language handler 2025-03-11 14:37:45 +02:00
Tal
1c86af30b6 Merge pull request #1614 from KennyDizi/main
Fix default value for extended_thinking_max_output_tokens
2025-03-11 14:34:58 +02:00
0acd5193cb Align it with document 2025-03-11 17:48:12 +07:00
ffefcb8a04 Fix default value for extended_thinking_max_output_tokens 2025-03-11 17:48:12 +07:00
35bb2b31e3 feat: add enable_comment_approval to encoded forbidden args 2025-03-10 12:10:19 +02:00
a18f9d00c9 docs: rename enable_manual_approval to enable_comment_approval for clarity 2025-03-10 12:01:16 +02:00
Tal
20d709075c Merge pull request #1613 from qodo-ai/hl/update_auto_approve_docs
docs: update auto-approval documentation with clearer configuration
2025-03-10 11:56:48 +02:00
Tal
52c99e3f7b Merge pull request #1605 from KennyDizi/main
Support extended thinking for model `claude-3-7-sonnet-20250219`
2025-03-09 17:03:37 +02:00
692bc449be Merge commit '338ec5cae06671406a1b104143a395882caef2bc' into hl/update_auto_approve_docs 2025-03-09 17:03:01 +02:00
884b49dd84 Add encoded: enable_manual_approval 2025-03-09 17:01:04 +02:00
338ec5cae0 Update docs/docs/tools/improve.md
Co-authored-by: qodo-merge-pro-for-open-source[bot] <189517486+qodo-merge-pro-for-open-source[bot]@users.noreply.github.com>
2025-03-09 16:45:08 +02:00
c6e4498653 docs: improve auto-approval documentation formatting and clarity 2025-03-09 15:03:45 +02:00
c7c411eb63 docs: update auto-approval documentation with clearer configuration options 2025-03-09 14:26:01 +02:00
222155e4f2 Optimize logging 2025-03-08 08:53:29 +07:00
f9d5e72058 Move logic to _configure_claude_extended_thinking 2025-03-08 08:35:34 +07:00
Tal
2619ff3eb3 Merge pull request #1612 from congziqi77/main
fix: repeat processing files to ignore
2025-03-07 21:08:46 +02:00
Tal
15e8167115 Update configuration.toml 2025-03-07 18:22:26 +02:00
d6ad511511 docs: restructure and improve code suggestions guidance in improve documentation 2025-03-07 18:08:37 +02:00
1943662946 docs: improve guidance on code suggestions quality in improve documentation 2025-03-07 16:55:45 +02:00
c1fb76abcf docs: improve guidance on code suggestions quality in improve documentation 2025-03-07 16:51:42 +02:00
121d90a9da Update document for extended thinking tokens 2025-03-07 17:32:03 +07:00
a8935dece3 Using 2048 for extended_thinking_budget_tokens as well as extended_thinking_max_output_tokens 2025-03-07 17:27:56 +07:00
fd12191fcf fix: repeat processing files to ignore 2025-03-07 09:11:43 +08:00
61b6d1f1a3 Merge remote-tracking branch 'origin/main' 2025-03-06 19:09:08 +02:00
874b7c7da4 docs: update default value for persistent_comment in improve documentation 2025-03-06 19:09:00 +02:00
Tal
a0d86b532f Merge pull request #1611 from muhammad-asn/main
feat: add DeepInfra support
2025-03-06 18:22:07 +02:00
4f2551e0a6 feat: add DeepInfra support 2025-03-06 15:49:07 +07:00
eb5f38b13b Merge remote-tracking branch 'origin/main' 2025-03-06 09:31:55 +02:00
1753bc703e docs: remove reflect command references from automations documentation 2025-03-06 09:31:46 +02:00
Tal
31de811820 Merge pull request #1610 from qodo-ai/tr/prompts_enhancment
fix: validate one-liner suggestions to prevent repeating existing code
2025-03-06 08:42:15 +02:00
4c0e371238 fix: validate one-liner suggestions to prevent repeating existing code 2025-03-06 08:18:52 +02:00
Tal
ca286b8dc0 Merge pull request #1607 from qodo-ai/tr/docs_claude
docs: update model references to Claude 3.7 Sonnet and o3-mini throug…
2025-03-05 08:22:01 +02:00
0c30f084bc docs: standardize Claude model naming convention in documentation 2025-03-05 08:20:48 +02:00
a33bee5805 docs: update model references to Claude 3.7 Sonnet and o3-mini throughout documentation 2025-03-05 08:16:09 +02:00
f32163d57c Merge remote-tracking branch 'origin/main' 2025-03-04 08:24:58 +02:00
bb24a6f43d docs: update evaluation dataset size in finetuning benchmark documentation 2025-03-04 08:24:48 +02:00
Tal
5b267332b9 Merge pull request #1604 from ryo-kagawa/fix/mistake-link
docs: fix usage-guide/automations_and_usage.md in mistake link
2025-03-03 21:23:04 +02:00
30bf7572b0 Validate extended thinking parameters 2025-03-03 18:44:26 +07:00
b5ce49cbc0 Update document for dedicated claude models configuration 2025-03-03 18:31:17 +07:00
440d2368a4 Set temperature to 1 when using extended thinking 2025-03-03 18:30:52 +07:00
215c10cc8c Add thinking block to request parameters 2025-03-03 18:29:33 +07:00
7623e1a419 Removed trailing spaces 2025-03-03 18:23:45 +07:00
5e30e190b8 Define models that support extended thinking feature 2025-03-03 18:22:31 +07:00
5447dd2ac6 Add support claude extended thinking configurations 2025-03-03 18:21:57 +07:00
214200b816 docs: fix usage-guide/automations_and_usage.md in mistake link 2025-03-03 19:59:06 +09:00
Tal
fcb7d97640 Merge pull request #1602 from qodo-ai/tr/reqs
chore: update version, dependencies and company branding
2025-03-02 18:05:21 +02:00
224920bdb7 chore: update version, dependencies and company branding 2025-03-02 17:37:33 +02:00
Tal
d3f83f3069 Merge pull request #1594 from atsushi-ishibashi/support_cross_region_claude3.7
chore: add bedrock/us.anthropic.claude-3-7-sonnet-20250219-v1:0
2025-03-02 17:24:05 +02:00
8e6267b0e6 chore: bedrock/us.anthropic.claude-3-7-sonnet-20250219-v1:0 2025-03-02 08:44:23 +09:00
Tal
9809e2dbd8 Update README.md 2025-02-28 12:07:49 +02:00
7cf521c001 fix: improve null safety in GitLab webhook handler 2025-02-27 11:53:11 +02:00
Tal
e71c0f1805 Merge pull request #1586 from qodo-ai/tr/docs245
docs: add language configuration documentation and update changelog
2025-02-27 11:10:20 +02:00
8182a4afc0 docs: update default model to o3-mini and improve language configuration instructions 2025-02-27 11:06:31 +02:00
3817aa2868 fix: remove redundant temperature logging in litellm handler 2025-02-27 10:55:01 +02:00
94a8606d24 fix: update default configuration values for publishing and verbosity 2025-02-27 10:52:20 +02:00
af635650f1 fix: improve response language handling and configuration documentation 2025-02-27 10:50:28 +02:00
222f276959 docs: add language configuration documentation and update changelog 2025-02-27 10:29:05 +02:00
Tal
9a32e94b3e Merge pull request #1579 from qodo-ai/response-language-configuration
Add a language configuration to translate language generated by QodoM…
2025-02-27 08:01:13 +02:00
Tal
7c56eee701 Update README.md 2025-02-27 07:59:01 +02:00
Tal
48b3c69c10 Merge pull request #1575 from GOOD21/feature/draft-ready-trigger
gitlab webhook automatically trigger pr_command when MR changes from Draft to Ready
2025-02-27 07:57:12 +02:00
Tal
9d1c8312b5 Merge pull request #1584 from qodo-ai/tr/gitlab_fix
Tr/gitlab fix
2025-02-26 21:35:24 +02:00
64e5a87530 fix: improve error handling and null safety in PR description tool 2025-02-26 21:33:40 +02:00
9a9acef0e8 fix: handle empty commits and errors in GitLab provider's get_latest_commit_url 2025-02-26 21:24:53 +02:00
3ff8f1ff11 Add documentation 2025-02-26 18:45:24 +02:00
c7f4b87d6f Merge pull request #1583 from qodo-ai/hl/enhance_azure_devops
feat: enhance Azure DevOps integration with improved error handling a…
2025-02-26 17:17:31 +02:00
9db44b5f5f Update pr_agent/servers/azuredevops_server_webhook.py
Co-authored-by: qodo-merge-pro-for-open-source[bot] <189517486+qodo-merge-pro-for-open-source[bot]@users.noreply.github.com>
2025-02-26 17:16:07 +02:00
70a2377ac9 fix: make Azure DevOps webhook handler asynchronous 2025-02-26 17:13:38 +02:00
52a68bcd44 fix: adjust newline formatting in issue details summary 2025-02-26 16:49:44 +02:00
0a4c02c8b3 feat: enhance Azure DevOps integration with improved error handling and PR commands 2025-02-26 16:40:46 +02:00
e253f18e7f Remove default configuration 2025-02-26 14:43:56 +02:00
d6b6191f90 Remove uneccessary hardcoded configurations list 2025-02-26 14:42:32 +02:00
de80901284 Add a language configuration to translate language generated by QodoMerge, such as suggestions and desciption text 2025-02-26 14:37:15 +02:00
dfbd8dad5d Automatically trigger pr_command when MR changes from Draft to Ready 2025-02-26 18:12:48 +08:00
Tal
d6f405dd0d Merge pull request #1564 from chandan84/fix/support_litellm_extra_headers
Fix/support litellm extra headers
2025-02-26 10:15:22 +02:00
Tal
25ba9414fe Merge pull request #1561 from KennyDizi/main
Support reasoning effort via configuration
2025-02-26 10:13:05 +02:00
d097266c38 Fix typo in document 2025-02-26 07:57:22 +07:00
fa1eda967f Add document for OpenAI models dedicated parameters 2025-02-26 07:54:50 +07:00
c89c0eab8c Update changing_a_model.md
updated docs for extra_headers usage for litellm
2025-02-25 15:15:53 -05:00
93e34703ab Update litellm_ai_handler.py
updates made based on review on https://github.com/qodo-ai/pr-agent/pull/1564
2025-02-25 14:44:03 -05:00
c15ed628db Merge pull request #1572 from qodo-ai/hl/auto_approve_docs
docs: add auto-approve feature to platform support matrix
2025-02-25 13:54:44 +02:00
70f47336d6 link + add to readme 2025-02-25 13:41:06 +02:00
Tal
c6a6a2f352 Merge pull request #1570 from hirobf10/support-claude-3-7
feat: support Claude 3.7 Sonnet
2025-02-25 10:49:42 +02:00
1dc3db7322 Update pr_agent/algo/__init__.py
Co-authored-by: qodo-merge-pro-for-open-source[bot] <189517486+qodo-merge-pro-for-open-source[bot]@users.noreply.github.com>
2025-02-25 16:51:55 +09:00
049fc558a8 Update pr_agent/algo/__init__.py
Co-authored-by: qodo-merge-pro-for-open-source[bot] <189517486+qodo-merge-pro-for-open-source[bot]@users.noreply.github.com>
2025-02-25 16:51:50 +09:00
2dc89d0998 Update pr_agent/algo/__init__.py
Co-authored-by: qodo-merge-pro-for-open-source[bot] <189517486+qodo-merge-pro-for-open-source[bot]@users.noreply.github.com>
2025-02-25 16:51:39 +09:00
Tal
07bbfff4ba Update improve.md 2025-02-25 09:06:11 +02:00
Tal
328637b8be Merge branch 'main' into hl/auto_approve_docs 2025-02-25 09:05:30 +02:00
44d9535dbc docs: add auto-approve feature to platform support matrix 2025-02-25 09:02:45 +02:00
Tal
7fec17f3ff Merge pull request #1571 from qodo-ai/of/update-overview
Docs: fix static code and remove Incremental PR review
2025-02-25 08:56:55 +02:00
cd15f64f11 Merge branch 'main' into of/update-overview 2025-02-25 08:23:08 +02:00
d4ac206c46 docs: fix static code and remove Incremental PR review 2025-02-25 08:22:46 +02:00
Tal
444910868e Merge pull request #1555 from GOOD21/fix/push-events
Enhanced gitlab webhook handling for push events without object_attributes
2025-02-25 07:56:03 +02:00
a24b06b253 feat: support Claude 3.7 Sonnet 2025-02-25 12:58:20 +09:00
Tal
393516f746 Merge pull request #1556 from benedict-lee/main
Fix prompt to not output diff prefixes in existing_code,improved_code pydantic definitions
2025-02-24 22:10:30 +02:00
Tal
152b111ef2 Merge pull request #1568 from qodo-ai/tr/hunk_fallback
feat: improve patch extension with new file content comparison
2025-02-24 13:25:49 +02:00
56250f5ea8 feat: improve patch extension with new file content comparison 2025-02-24 11:46:12 +02:00
7b1df82c05 rollback : pr_code_suggestions_prompts.toml 2025-02-24 09:30:00 +09:00
05960f2c3f rollback : pr_code_suggestions_prompts.toml 2025-02-24 09:15:51 +09:00
feb306727e fix : refine handling of leading '+' in response text 2025-02-24 09:15:00 +09:00
2a647709c4 style: improve AI search UI and add dark mode support 2025-02-23 21:04:19 +02:00
Tal
a4cd05e71c Merge pull request #1566 from qodo-ai/tr/ai_search
Tr/ai search
2025-02-23 16:38:06 +02:00
da6ef8c80f feat: update docs search API endpoint to production URL 2025-02-23 16:31:06 +02:00
775bfc74eb feat: update docs search API endpoint to production URL 2025-02-23 16:29:24 +02:00
ebdbde1bca Merge branch 'main' into main 2025-02-23 21:26:44 +07:00
Tal
e16c6d0b27 Merge pull request #1565 from qodo-ai/tr/auto_approval_Docs
docs: add auto-approval configuration documentation
2025-02-23 08:36:11 +02:00
f0b52870a2 docs: update auto-approval feature documentation and configuration 2025-02-23 08:34:16 +02:00
Tal
1b35f01aa1 Merge pull request #1560 from qodo-ai/of/fix-improve-notes
Improve documentation formatting and readability
2025-02-23 08:19:28 +02:00
a0dc9deb30 docs: add auto-approval configuration documentation 2025-02-23 08:15:14 +02:00
7e32a08f00 Refresh implement image in README 2025-02-23 08:05:17 +02:00
84983f3e9d line 253-261, pass extra_headers fields from settings to litellm, exception handling to check if extra_headers is in dict format 2025-02-22 14:56:17 -05:00
71451de156 Update litellm_ai_handler.py
line 253-258, pass extra_headers fields from settings to litellm, exception handling to check if extra_headers is in dict format
2025-02-22 14:43:03 -05:00
0e4a1d9ab8 line 253-258, pass extra_headers fields from settings to litellm, exception handling to check if extra_headers is in dict format 2025-02-22 14:38:38 -05:00
e7b05732f8 line 253-255, pass extra_headers fields from settings to litellm 2025-02-22 14:12:39 -05:00
37083ae354 Improve logging for adding parameters: temperature and reasoning_effort 2025-02-22 22:19:58 +07:00
020ef212c1 docs: fix notes admonition syntax in documentation 2025-02-22 16:46:31 +02:00
01cd66f4f5 chore: comment out test_fetching_sub_issues.py due to API calls 2025-02-22 16:06:30 +02:00
af72b45593 docs: update repository URLs and name 2025-02-22 11:01:54 +02:00
9abb212e83 Add reasoning_effort argument to chat completion request 2025-02-21 22:16:18 +07:00
e81b0dca30 Support reasoning_effort via configuration file 2025-02-21 22:14:58 +07:00
d37732c25d Define ReasoningEffort enum 2025-02-21 22:10:49 +07:00
e6b6e28d6b Define SUPPORT_REASONING_EFFORT_MODELS list 2025-02-21 22:10:33 +07:00
5bace4ddc6 docs: final touches 2025-02-21 10:47:19 +02:00
b80d7d1189 Merge branch 'main' into of/fix-improve-notes 2025-02-21 10:38:21 +02:00
b2d8dee00a docs: improve formatting and readability of documentation 2025-02-21 10:38:18 +02:00
Tal
ac3dbdf5fc Merge pull request #1529 from WonOfAKind/feature/sub-issues-ticket-1499
Added sub-issue fetching to enhance PR analysis
2025-02-21 09:42:18 +02:00
f143a24879 remove unnecessary code 2025-02-21 13:35:48 +08:00
347af1dd99 use merge_request with oldrev instead of push 2025-02-21 13:24:20 +08:00
d91245a9d3 Update pr_agent/git_providers/github_provider.py
Co-authored-by: qodo-merge-pro-for-open-source[bot] <189517486+qodo-merge-pro-for-open-source[bot]@users.noreply.github.com>
2025-02-20 20:12:49 +02:00
bfdaac0a05 Update pr_agent/git_providers/github_provider.py
Co-authored-by: qodo-merge-pro-for-open-source[bot] <189517486+qodo-merge-pro-for-open-source[bot]@users.noreply.github.com>
2025-02-20 20:11:25 +02:00
183d2965d0 Update pr_agent/tools/ticket_pr_compliance_check.py
Co-authored-by: qodo-merge-pro-for-open-source[bot] <189517486+qodo-merge-pro-for-open-source[bot]@users.noreply.github.com>
2025-02-20 12:53:26 -05:00
86647810e0 Update pr_agent/tools/ticket_pr_compliance_check.py
Co-authored-by: qodo-merge-pro-for-open-source[bot] <189517486+qodo-merge-pro-for-open-source[bot]@users.noreply.github.com>
2025-02-20 12:53:17 -05:00
56978d9793 Update pr_agent/git_providers/github_provider.py
Co-authored-by: qodo-merge-pro-for-open-source[bot] <189517486+qodo-merge-pro-for-open-source[bot]@users.noreply.github.com>
2025-02-20 12:32:29 -05:00
6433e827f4 Update pr_agent/git_providers/github_provider.py
Co-authored-by: qodo-merge-pro-for-open-source[bot] <189517486+qodo-merge-pro-for-open-source[bot]@users.noreply.github.com>
2025-02-20 12:32:22 -05:00
c0e78ba522 Update pr_agent/git_providers/github_provider.py
Co-authored-by: qodo-merge-pro-for-open-source[bot] <189517486+qodo-merge-pro-for-open-source[bot]@users.noreply.github.com>
2025-02-20 12:32:14 -05:00
45d776a1f7 Update pr_agent/git_providers/github_provider.py
Co-authored-by: qodo-merge-pro-for-open-source[bot] <189517486+qodo-merge-pro-for-open-source[bot]@users.noreply.github.com>
2025-02-20 12:32:06 -05:00
6e19e77e5e Update pr_agent/git_providers/github_provider.py
Co-authored-by: qodo-merge-pro-for-open-source[bot] <189517486+qodo-merge-pro-for-open-source[bot]@users.noreply.github.com>
2025-02-20 12:31:25 -05:00
1e98d27ab4 docs: update custom prompt configuration parameter name 2025-02-20 18:38:18 +02:00
Tal
a47d4032b8 Merge pull request #1559 from qodo-ai/tr/date_review
feat: add current date to PR review metadata
2025-02-20 18:07:52 +02:00
2887d0a7ed refactor: move CLI argument validation to dedicated class 2025-02-20 17:51:16 +02:00
a07f6855cb feat: add current date to PR review metadata 2025-02-20 16:44:45 +02:00
237a6ffb5f fix : existing and improved code fields to clarify formatting requirements 2025-02-20 11:52:53 +09:00
5e1cc12df4 Enhanced webhook handling for push events without object_attributes 2025-02-20 10:47:21 +08:00
29a350b4f8 docs: remove deepseek-r1 from supported models list 2025-02-18 17:49:19 +02:00
Tal
6efcd61087 Merge pull request #1552 from qodo-ai/tr/custom_reasoning_model
docs
2025-02-18 17:41:59 +02:00
c7cafa720e docs 2025-02-18 17:04:55 +02:00
Tal
9de9b397e2 Merge pull request #1551 from qodo-ai/tr/custom_reasoning_model
feat: add support for custom reasoning models
2025-02-18 12:04:24 +02:00
Tal
35059cadf7 Update pr_agent/algo/ai_handlers/litellm_ai_handler.py
Co-authored-by: qodo-merge-pro-for-open-source[bot] <189517486+qodo-merge-pro-for-open-source[bot]@users.noreply.github.com>
2025-02-18 11:50:48 +02:00
Tal
0317951e32 Update pr_agent/settings/configuration.toml
Co-authored-by: qodo-merge-pro-for-open-source[bot] <189517486+qodo-merge-pro-for-open-source[bot]@users.noreply.github.com>
2025-02-18 11:48:25 +02:00
4edb8b89d1 feat: add support for custom reasoning models 2025-02-18 11:46:22 +02:00
Tal
a5278bdad2 Merge pull request #1550 from qodo-ai/AdamWalkerQodo-patch-1
Update README.md
2025-02-18 11:26:10 +02:00
3fd586c9bd Update README.md 2025-02-18 11:20:02 +02:00
717b2fe5f1 Update README.md
Rebranding
2025-02-18 09:32:15 +02:00
262c1cbc68 Merge remote-tracking branch 'origin/main' 2025-02-17 20:33:28 +02:00
defdaa0e02 docs: simplify and improve PR filtering documentation 2025-02-17 20:33:19 +02:00
Tal
5ca6918943 Merge pull request #1539 from yu-iskw/support-gemini-2.0
Support generally available `gemini-2.0-flash`
2025-02-17 19:47:50 +02:00
Tal
cfd813883b Merge pull request #1543 from qodo-ai/of/update-improve-docs
docs: add documentation for new `improve` `more` feature
2025-02-17 17:58:15 +02:00
Tal
c6d32a4c9f Merge pull request #1548 from qodo-ai/AdamWalkerQodo-patch-2
Update README.md
2025-02-17 17:57:33 +02:00
ae4e99026e Update README.md 2025-02-17 17:53:27 +02:00
Tal
42f493f41e Merge pull request #1547 from qodo-ai/AdamWalkerQodo-patch-1
Add files via upload
2025-02-17 17:29:11 +02:00
34d73feb1d Update README.md
Qodo Rebrand
2025-02-17 17:27:13 +02:00
ebc94bbd44 Add files via upload
Qodo Rebrand
2025-02-17 17:23:22 +02:00
Tal
4fcc7a5f3a Update README.md 2025-02-17 16:19:05 +02:00
Tal
41760ea333 Merge pull request #1546 from qodo-ai/revert-1545-AdamWalkerQodo-patch-1
Revert "Update README.md"
2025-02-17 16:11:33 +02:00
Tal
13128c4c2f Revert "Update README.md" 2025-02-17 16:11:20 +02:00
da168151e8 Merge pull request #1545 from qodo-ai/AdamWalkerQodo-patch-1
Approved by Dedy
2025-02-17 16:10:06 +02:00
a132927052 Update README.md
Updating images for Rebrand
2025-02-17 15:18:18 +02:00
b52d0726a2 docs: fix capitalization in improve tool configuration description 2025-02-17 12:37:13 +02:00
fc411dc8bc docs: add documentation for new improve more feature 2025-02-17 12:34:58 +02:00
22f02ac08c Support generally available gemini-2.0-flash
Signed-off-by: Yu Ishikawa <yu-iskw@users.noreply.github.com>
2025-02-17 08:40:05 +09:00
Tal
52883fb1b5 Merge pull request #1537 from KennyDizi/main
Refactoring `LiteLLMAIHandler` class for better using reasoning models
2025-02-16 19:50:03 +02:00
adfc2a6b69 Add temperature only if model supports it 2025-02-16 15:43:40 +07:00
c4aa13e798 Add o1-preview model to USER_MESSAGE_ONLY_MODELS and NO_SUPPORT_TEMPERATURE_MODELS 2025-02-16 15:18:52 +07:00
90575e3f0d Add NO_SUPPORT_TEMPERATURE_MODELS list 2025-02-16 15:17:59 +07:00
fcbe986ec7 Removed o3 model from USER_MESSAGE_ONLY_MODELS 2025-02-16 15:17:12 +07:00
061fec0d36 Removed o1 model from USER_MESSAGE_ONLY_MODELS 2025-02-16 15:15:50 +07:00
778d00d1a0 Merge remote-tracking branch 'origin/main' 2025-02-15 11:32:43 +02:00
cc8d5a6c50 docs: fix broken links in GitLab Server installation section 2025-02-15 11:32:32 +02:00
Tal
62c47f9cb5 Merge pull request #1536 from PeterDaveHelloKitchen/OptimizeDockerfile
Use `pip install` with `--no-cache-dir` in `Dockerfile.github_action`
2025-02-15 11:25:41 +02:00
bb31b0c66b docs: update Qodo Merge installation guide with GitLab Server details 2025-02-15 11:23:52 +02:00
Tal
359c963ad1 Merge pull request #1531 from hi120ki/add-pull-request-target-event
Add : pull_request_target event on GitHub Actions integration
2025-02-15 08:08:20 +02:00
130b1ff4fb Use pip install with --no-cache-dir in Dockerfile.github_action 2025-02-15 00:17:02 +08:00
Tal
605a4b99ad Merge pull request #1534 from qodo-ai/tr/help_r
feat: improve help tool with markdown header formatting and error han…
2025-02-13 11:50:59 +02:00
b989f41b96 fix: correct typo in help tool message ("be" -> "can be") 2025-02-13 11:48:07 +02:00
26168a605b fix: correct typo in help tool message ("be" -> "can be") 2025-02-13 11:47:21 +02:00
2c37b02aa0 feat: improve help tool with markdown header formatting and error handling 2025-02-13 11:44:50 +02:00
Tal
a2550870c2 Merge pull request #1532 from qodo-ai/tr/review_effort
fix: update review effort label format to use X/5 notation
2025-02-13 09:25:53 +02:00
279c6ead8f fix: update review effort label format to use X/5 notation 2025-02-13 08:41:25 +02:00
c9500cf796 Add : pull_request_target event on GitHub Actions integration
Signed-off-by: Hi120ki <12624257+hi120ki@users.noreply.github.com>
2025-02-13 12:03:30 +09:00
0f63d8685f Added sub-issue fetching to enhance PR analysis 2025-02-12 19:40:36 -05:00
77204faa51 docs: clarify open-source models usage scope in model selection guide 2025-02-11 10:24:16 +02:00
43fb8ff433 docs: fix broken link to Qodo Merge models documentation 2025-02-11 08:49:05 +02:00
cd129d8b27 docs: fix broken link to Qodo Merge models documentation 2025-02-11 08:47:04 +02:00
Tal
04aff0d3b2 Update README.md 2025-02-07 20:51:21 +02:00
Tal
be1dd4bd20 Update README.md 2025-02-06 18:10:37 +02:00
Tal
b3b89e7138 Merge pull request #1522 from qodo-ai/tr/readme_34
docs: update README with new design and remove outdated news
2025-02-06 18:06:17 +02:00
9045723084 docs: adjust Qodo Merge link formatting in README 2025-02-06 18:04:31 +02:00
34e22a2c8e docs: update image URL in README for /improve tool screenshot 2025-02-06 18:02:40 +02:00
1d784c60cb docs: update README with new design and remove outdated news 2025-02-06 17:59:40 +02:00
deffdbbb89 Merge pull request #1517 from qodo-ai/security_policy_md
Create SECURITY.md
2025-02-05 14:54:55 +02:00
b29a19957c Update SECURITY.md
Co-authored-by: qodo-merge-pro-for-open-source[bot] <189517486+qodo-merge-pro-for-open-source[bot]@users.noreply.github.com>
2025-02-05 14:54:32 +02:00
f209bc5323 Update SECURITY.md 2025-02-05 14:50:12 +02:00
32890fec20 Create SECURITY.md 2025-02-05 14:03:32 +02:00
Tal
9ddd7c967a Merge pull request #1515 from qodo-ai/create-code-of-conduct
Create CODE_OF_CONDUCT.md
2025-02-05 11:28:10 +02:00
Tal
245c3ad523 Update CODE_OF_CONDUCT.md
Co-authored-by: qodo-merge-pro-for-open-source[bot] <189517486+qodo-merge-pro-for-open-source[bot]@users.noreply.github.com>
2025-02-05 11:27:51 +02:00
43decd9ff2 Update CODE_OF_CONDUCT.md 2025-02-05 11:25:06 +02:00
Tal
3af84aab5b Merge pull request #1514 from qodo-ai/tr/improve_impact
feat: improve code suggestions table with impact levels and styling
2025-02-05 11:20:16 +02:00
3633863e90 Create CODE_OF_CONDUCT.md 2025-02-05 10:41:24 +02:00
69f19f1abd feat: improve code suggestions impact levels with configurable thresholds 2025-02-05 09:41:01 +02:00
400146985a feat: improve code suggestions table with impact levels and styling 2025-02-05 09:31:32 +02:00
24bf875db6 fix: handle GitHub permission errors when editing comments 2025-02-03 07:51:44 +02:00
9687b4df70 docs: update model selection guide with supported models list 2025-02-03 07:31:02 +02:00
Tal
d8fba02b48 Merge pull request #1509 from KennyDizi/main
Define user_message_only_models list for using user prompt only model
2025-02-02 16:14:05 +02:00
a6482c37ce Add o3-mini to user message only model list 2025-02-02 18:03:38 +07:00
83582bc935 Add support o3-mini model 2025-02-02 18:02:53 +07:00
4ac1e15bae Refactoring user messages only flow 2025-02-02 18:01:44 +07:00
a48686bde9 Define USER_MESSAGE_ONLY_MODELS in the algo init file 2025-02-02 18:01:16 +07:00
7168d16386 Remove user_message_only_models from configuration file 2025-02-02 18:00:34 +07:00
Tal
dc21f71ee2 Merge pull request #1510 from PeterDaveHelloKitchen/OptimizeDockerfile
Use `pip install` with `--no-cache-dir` in Dockerfiles
2025-02-02 07:30:13 +02:00
7127a030b2 fix: improve error logging in GitHub polling service 2025-02-01 19:47:54 +02:00
8f340bce67 Use pip install with --no-cache-dir in Dockerfiles
This will help minimize the Docker image size, as below:

```
REPOSITORY    TAG       IMAGE ID         CREATED        SIZE
pr-agent      after     caed11a1ed9c     2 hours ago    1.48GB
pr-agent      before    d6f12eb987b8     3 hours ago    1.59GB
```
2025-02-02 00:29:52 +08:00
48377e3c81 Add a null check for user_message_only_models before using it 2025-01-31 11:53:05 +07:00
7eb26b3220 Check current model is in user_message_only_models list 2025-01-31 11:25:51 +07:00
32ccb25575 Add user_message_only_models 2025-01-31 11:24:43 +07:00
9aafe18f01 docs: add platform support notice for implement tool 2025-01-30 12:24:14 +02:00
Tal
4df9e03c4c Merge pull request #1506 from qodo-ai/tr/fallback
fix: add fallback for parsing AI responses with leading '+' symbols
2025-01-30 11:56:04 +02:00
136c75a5ac fix: add fallback for parsing AI responses with leading '+' symbols 2025-01-30 08:35:31 +02:00
91b0f11cf2 docs: add link to article about effective AI code suggestions 2025-01-30 07:44:09 +02:00
Tal
50740f080b Merge pull request #1500 from qodo-ai/of/add-contributing-file
Add CONTRIBUTING.md with contribution guidelines and setup instructions
2025-01-28 15:39:49 +02:00
ad5308c0a3 docs: add CONTRIBUTING.md with development guidelines and setup instructions 2025-01-28 11:55:27 +02:00
Tal
f383709629 Merge pull request #1498 from qodo-ai/tr/issue_formatting
fix: update issue template fields and Discord link
2025-01-28 10:07:18 +02:00
4d7fe07c16 fix: update issue template fields and Discord link 2025-01-28 09:59:59 +02:00
Tal
456d5aa233 Merge pull request #1495 from qodo-ai/of/issue_template
fix: remove shell rendering from issue templates
2025-01-28 09:21:13 +02:00
d50bfa4b06 fix: remove shell rendering from issue templates 2025-01-28 09:18:02 +02:00
7393887381 Merge remote-tracking branch 'origin/main' 2025-01-28 08:36:47 +02:00
9da4c9d776 fix: correct typo in code suggestions label description 2025-01-28 08:36:36 +02:00
Tal
251b4a6395 Update README.md 2025-01-28 03:29:44 +02:00
Tal
d85725c636 Merge pull request #1490 from qodo-ai/of/issues-fixes
Update config.yml
2025-01-27 16:25:24 +02:00
6ef586a617 Update miscellaneous.yml 2025-01-27 16:24:40 +02:00
43991df2c4 Update bug-report.yml 2025-01-27 16:23:48 +02:00
231d5c20d5 Update config.yml 2025-01-27 16:22:35 +02:00
Tal
9052cec391 Merge pull request #1478 from qodo-ai/of/issue_template
Add GitHub issue templates for bug reports and feature requests
2025-01-27 16:21:17 +02:00
Tal
33ed6927fc Update .github/ISSUE_TEMPLATE/miscellaneous.yml
Co-authored-by: qodo-merge-pro-for-open-source[bot] <189517486+qodo-merge-pro-for-open-source[bot]@users.noreply.github.com>
2025-01-27 16:21:11 +02:00
62aaeb267a Update bug-report.yml 2025-01-27 16:20:24 +02:00
a7bea3b166 feat: add miscellaneous issue template and update template configurations 2025-01-27 16:17:33 +02:00
b81d686561 Update feature-request.yml 2025-01-27 16:02:29 +02:00
e5e30f7bd3 Update bug-report.yml 2025-01-27 16:00:03 +02:00
4bfd845877 docs: add wiki requirement notice for auto best practices feature 2025-01-27 10:07:30 +02:00
e8a80264ca fix: improve GitLab help message formatting with proper line breaks 2025-01-26 16:54:17 +02:00
75f4c7f681 Merge branch 'tr/docs_best_practice' 2025-01-26 16:42:48 +02:00
Tal
2277a31661 Merge pull request #1485 from qodo-ai/tr/docs_best_practice
Tr/docs best practice
2025-01-26 16:40:09 +02:00
805d9cac69 docs: add auto best practices diagrams and wiki usage explanation 2025-01-26 16:39:25 +02:00
Tal
beffa8dfe4 Merge pull request #1486 from qodo-ai/hl/update_ticket_analysis
feat: enhance ticket compliance analysis with human verification tracking
2025-01-26 15:58:22 +02:00
a42c5f4f93 feat: limit number of tickets to analyze to 3 in compliance check 2025-01-26 14:31:29 +02:00
63c98d30d9 docs: simplify wording and clarify exploration concept in best practices guide 2025-01-26 12:57:53 +02:00
50c52e32c9 enter
feat: enhance ticket compliance analysis with human verification tracking
2025-01-26 12:33:49 +02:00
f48c95d113 order 2025-01-26 12:10:30 +02:00
2ead9fe4df typo 2025-01-26 12:07:48 +02:00
4d52715d25 docs: add auto best practices documentation and configuration 2025-01-26 12:02:27 +02:00
84d81deac0 Merge branch 'main' into of/issue_template 2025-01-26 09:23:54 +02:00
83baac975d docs: clarify code suggestion prompt field description for existing code 2025-01-26 09:16:52 +02:00
Tal
3f6fa5cccb Merge pull request #1484 from qodo-ai/of/add-implement-to-help
Add `IMPLEMENT` tool and reorganize help message content
2025-01-25 08:57:47 +02:00
a7fbd694cc docs: add January 2025 organization update notice and fix typo in prompts 2025-01-25 08:54:57 +02:00
78b11fca4c feat: add implement tool to help message and reorder tools list 2025-01-24 17:13:37 +02:00
640c1d8dda refactor: update review effort label format to include range indicator 2025-01-23 21:44:56 +02:00
dfa98cdfa3 Merge remote-tracking branch 'origin/main' 2025-01-23 16:59:14 +02:00
5518f1ca26 docs: update repository URLs from Codium-ai to qodo-ai 2025-01-23 16:59:04 +02:00
Tal
c4a70f4852 Update .github/ISSUE_TEMPLATE/bug-report.yml
Co-authored-by: qodo-merge-pro[bot] <151058649+qodo-merge-pro[bot]@users.noreply.github.com>
2025-01-23 16:52:22 +02:00
Tal
363ea3eec8 Update .github/ISSUE_TEMPLATE/bug-report.yml
Co-authored-by: qodo-merge-pro[bot] <151058649+qodo-merge-pro[bot]@users.noreply.github.com>
2025-01-23 16:51:12 +02:00
97cbfe1c2b fix: update issue template labels and descriptions for git providers and bug types 2025-01-23 16:27:26 +02:00
68f2198549 feat: update issue template dropdowns for git providers and task types 2025-01-23 16:11:30 +02:00
20bbe4187a docs: reorder contact links in issue template config 2025-01-23 15:57:13 +02:00
2f69c8989c clean-up 2025-01-23 13:38:02 +02:00
ed102dc730 feat: add GitHub issue templates for bug reports and feature requests 2025-01-23 13:35:30 +02:00
Tal
c2bad8ab29 Update index.md 2025-01-23 12:24:09 +02:00
e9c1c91a4b feat: enhance help message formatting and support for different git providers 2025-01-23 12:05:07 +02:00
Tal
eba116fedd Merge pull request #1477 from qodo-ai/tr/shorter_label
refactor: simplify review effort label format and remove maximal effo…
2025-01-23 11:49:11 +02:00
94616a3429 refactor: simplify review effort label format and remove maximal effort limit 2025-01-23 11:20:58 +02:00
c1fa22d068 refactor: simplify review effort label format and remove maximal effort limit 2025-01-23 11:18:00 +02:00
4f1e4073e4 docs: fix wording in local installation guide 2025-01-23 09:08:38 +02:00
Tal
b320767c97 Merge pull request #1475 from Codium-ai/tr/docs24
docs: reorganize installation documentation structure
2025-01-23 08:53:44 +02:00
cd5bdf9e59 docs: reorganize token requirements in installation documentation 2025-01-23 08:53:29 +02:00
e8b8909ab7 docs: update pricing link from codium.ai to qodo.ai 2025-01-23 08:47:20 +02:00
ee8cdcf2b2 docs: reorganize installation documentation structure 2025-01-23 08:45:47 +02:00
Tal
1cb21c6615 Merge pull request #1473 from KennyDizi/main
Add support model deepseek/deepseek-reasoner
2025-01-23 08:07:53 +02:00
Tal
b5f52c5fea Merge pull request #1469 from gryphon-ops/main
Remove false log that file was modified, but no patch found for bitbucket server
2025-01-23 08:03:35 +02:00
4e481c5088 docs: rebrand from Qodo Merge to PR-Agent in installation guides 2025-01-22 21:28:29 +02:00
Tal
7367c00c3d Merge pull request #1474 from Codium-ai/tr/docs23
QM
2025-01-22 21:21:39 +02:00
fb3aa8c96c docs: fix punctuation in Chrome extension documentation 2025-01-22 21:20:44 +02:00
983ce131f2 docs: rebrand from Qodo Merge Pro to Qodo Merge throughout documentation 2025-01-22 21:18:08 +02:00
e571841b5c docs: clarify distinction between PR-Agent and Qodo Merge throughout documentation 2025-01-22 21:11:46 +02:00
Tal
c537e9ff66 Merge pull request #1471 from Codium-ai/of/rebrand-readme
README: Replace Codium and PR-Agent with Qodo and Qodo-Merge
2025-01-22 17:07:07 +02:00
fc5454630a docs: rebrand from Qodo-Merge to PR-Agent in README 2025-01-22 16:39:14 +02:00
c2ca79da0d Combining system and user prompts for o1 series and deepseek-reasoner models 2025-01-22 20:33:43 +07:00
63f1d449ce Add support model deepseek/deepseek-reasoner 2025-01-22 20:32:18 +07:00
0adaddccdf docs: update branding from PR-Agent to Qodo-Merge in README 2025-01-22 14:35:13 +02:00
8a1f07dd6b docs: clarify Qodo-Merge's open-source nature in README 2025-01-22 14:24:40 +02:00
8e5d2a0f4d docs: update branding from PR-Agent to Qodo-Merge in README 2025-01-22 14:18:23 +02:00
4e1cae3869 docs: remove redundant row number in feature table 2025-01-22 10:16:05 +02:00
7be26b665e docs: update branding from PR-Agent to Qodo-Merge in README 2025-01-22 10:12:32 +02:00
664f1938c9 Remove false log that file was modified, but no patch found for bitbucket server 2025-01-20 14:56:10 -05:00
e0b6db9bec docs: standardize platform support notation in documentation 2025-01-20 19:39:15 +02:00
Tal
2f2cdd787d Merge pull request #1466 from yu-iskw/add-gemini-models
Add `vertex_ai/gemini-2.0-flash-exp`
2025-01-20 19:33:38 +02:00
Tal
2b25053de8 Merge pull request #1467 from Codium-ai/tr/open_on_new_window
docs: add target blank to external links in documentation
2025-01-20 14:48:38 +02:00
054957fcfe docs: add target blank to external links in documentation 2025-01-20 13:58:26 +02:00
0075084a22 Add vertex_ai/gemini-2.0-flash-exp
Signed-off-by: Yu Ishikawa <yu-iskw@users.noreply.github.com>
2025-01-20 18:29:37 +09:00
Tal
e62db20c1e Merge pull request #1465 from Codium-ai/tr/prompts
docs: improve diff format documentation and code review instructions
2025-01-19 20:13:47 +02:00
67d4c96166 fix: correct typos in code suggestions prompt 2025-01-19 17:21:48 +02:00
b335cacffd fix: limit one_sentence_summary to 6 words in code suggestions 2025-01-19 17:15:02 +02:00
87a5a7e156 fix: improve code review guidelines and clarify scope limitations 2025-01-19 17:10:04 +02:00
24aa15f074 fix: correct typo in diff format documentation 2025-01-19 15:11:56 +02:00
ad4a96caf1 docs: add wiki setup guide and update best practices documentation 2025-01-19 15:05:38 +02:00
e7f874a4b2 docs: improve diff format documentation and code review instructions 2025-01-19 14:37:49 +02:00
Tal
4ab9392042 Merge pull request #1455 from polacekpavel/fix/local-git-provider-method-stubs
fix(local_git): add interface func stubs for git local provider
2025-01-18 10:33:37 +02:00
Tal
536d97b9da Merge pull request #1457 from KennyDizi/main
Support deepseek-chat model
2025-01-18 10:32:12 +02:00
cea1b58714 Update document with change deepseek-chat model 2025-01-17 11:50:42 +07:00
5ed260d885 Add deepseek configuration block 2025-01-17 11:43:20 +07:00
e58a535594 Inject deepseek key to DEEPSEEK_API_KEY environment variable 2025-01-17 11:43:06 +07:00
d949f440a8 Add support model deepseek/deepseek-chat 2025-01-17 11:42:36 +07:00
4923c8d810 feat: add support for ignoring PRs from specific users 2025-01-16 08:34:01 +02:00
fe6540275c fix(local_git): add interface method stubs for local git provider compatibility 2025-01-15 18:19:36 +01:00
1997da3aac Merge pull request #1454 from Codium-ai/hl/jira_datacenter_docs
documentation
2025-01-15 17:26:07 +02:00
d0c442b74b enter 2025-01-15 17:24:37 +02:00
1f86cbc942 typo 2025-01-15 17:23:20 +02:00
633a1c7bd0 documentation 2025-01-15 17:03:31 +02:00
2d9141adad Merge pull request #1450 from Codium-ai/of/implement-tool-bitbucket
docs: add BitBucket support for /implement tool.
2025-01-15 08:10:16 +02:00
95d0d4d71d docs: add final_update_message configuration option documentation 2025-01-15 08:00:20 +02:00
Tal
5daf8e043c Merge pull request #1452 from med8bra/patch-1
fix(azure-provider): handle renamed files as new files
2025-01-14 11:04:40 +02:00
bd611bc1c2 fix(azure-provider): handle renamed files as new files
This fixes a bug when azure-provider tries to fetch original content of a renamed file and fails since the file doesn't exist in base yet.
Also handles case when `diff_type` includes multiple actions as `edit, rename`.

This can be improved to fetch the actual old content using the old path before renaming, but IMO for azure devops since its dying anyway, this fix should be enough.
2025-01-13 22:22:13 +01:00
4bb04e37c2 docs: add BitBucket support for /implement tool. 2025-01-13 13:29:59 +02:00
Tal
b3f116bb35 Merge pull request #1448 from pdecat/docs/typo
docs: add missing word
2025-01-10 20:14:23 +02:00
d15d08bb3b docs: add missing word 2025-01-10 16:08:04 +01:00
445a7fc015 filtering fix 2025-01-09 12:16:31 +02:00
Tal
c1c5c353e5 Merge pull request #1446 from Codium-ai/tr/avoid_packages_comments
fix: refine code suggestions prompts and avoid package-related comments
2025-01-08 22:12:57 +02:00
a74fca7b7d fix: refine code suggestions prompts and avoid package-related comments 2025-01-08 17:42:07 +02:00
Tal
7479ae3224 Merge pull request #1441 from benedict-lee/fix/support-aititle-with-markers
fix : support ai title with markers
2025-01-07 12:29:39 +02:00
Tal
6bb5ce58f2 Merge pull request #1442 from benedict-lee/fix/pr-type-rendering-with-markers
fix : pr type rendering with markers
2025-01-07 08:39:37 +02:00
2783f9b1bb Merge pull request #1440 from Codium-ai/of/implement-gitlab-documentation
docs: add GitLab support for /implement tool.
2025-01-06 13:35:23 +02:00
f4b895d870 fix : pr type rendering with markers
list obj to comma seperated pr types
2025-01-06 12:49:30 +09:00
07d40e2c05 fix : support ai title with markers 2025-01-06 12:42:12 +09:00
6e1178b168 Merge branch 'main' into of/implement-gitlab-documentation 2025-01-05 12:17:25 +02:00
Tal
c889e566e8 Merge pull request #1439 from Codium-ai/tr/patch_bug
fix: handle newline issues in patch generation
2025-01-05 12:16:08 +02:00
d9540d3b43 docs: add GitLab support for /implement tool. 2025-01-05 11:53:52 +02:00
793f76fec5 fix: add missing newlines at the end of patch strings in tests 2025-01-04 16:34:35 +02:00
5adc246040 Merge remote-tracking branch 'origin/tr/patch_bug' into tr/patch_bug 2025-01-04 16:30:47 +02:00
d4d58babd5 fix: handle empty inputs in patch generation 2025-01-04 16:30:33 +02:00
Tal
2df4bc8b53 Update pr_agent/algo/utils.py
Co-authored-by: qodo-merge-pro-for-open-source[bot] <189517486+qodo-merge-pro-for-open-source[bot]@users.noreply.github.com>
2025-01-04 16:28:25 +02:00
e431979b8b fix: handle newline issues in patch generation 2025-01-04 16:26:38 +02:00
Tal
bde594c9e8 Update README.md 2025-01-02 16:52:26 +02:00
b570c758aa docs: improve /implement tool documentation and update news section 2025-01-02 16:49:59 +02:00
Tal
f6b80174b5 Merge pull request #1434 from Codium-ai/tr/ollama
Tr/ollama
2025-01-02 16:26:46 +02:00
833ae67820 Merge branch 'main' into tr/ollama 2025-01-02 14:21:07 +02:00
Tal
ee913336ad Merge pull request #1433 from Codium-ai/fix-implement-docs
Refine `implement` tool documentation and remove outdated notes
2025-01-02 14:01:00 +02:00
79d589e145 Adjust image widths in /implement tool documentation 2025-01-02 12:56:55 +02:00
2d4cd3e270 Merge remote-tracking branch 'origin/main' into tr/ollama 2025-01-02 12:51:40 +02:00
7f950a3aa9 docs: clarify model recommendation for production usage 2025-01-02 12:50:38 +02:00
379fa957ea docs: clarify model recommendation for production usage 2025-01-02 12:48:56 +02:00
a1a7c8e44c feat: add example output duplication option for code suggestions prompts 2025-01-02 12:46:50 +02:00
6d0ed06fc4 Refine /implement tool documentation and remove language support notes 2025-01-02 12:39:14 +02:00
e695af6917 feat: add example output duplication option for PR review prompts 2025-01-02 12:33:26 +02:00
5318047202 feat: add prompt example duplication option for improved model output 2025-01-02 12:25:42 +02:00
Tal
5bf5f63c78 Merge pull request #1417 from ofir-frd/add-implement-documentation-
Add documentation for `/implement` tool and enhance `/test` tool references
2025-01-02 11:53:58 +02:00
5971a06d73 docs: improve Ollama and Hugging Face model configuration docs 2025-01-02 11:16:21 +02:00
71e477a993 docs: standardize language support notes across documentation files 2025-01-02 11:02:26 +02:00
efc621a58b fix: update Test tool link to correct documentation file 2025-01-02 10:55:30 +02:00
951fa3385a Merge branch 'main' into add-implement-documentation- 2025-01-02 10:52:31 +02:00
56e15c0348 Add a blank line at the end of the .gitignore file 2025-01-02 10:47:28 +02:00
4c82b8a43e docs: Add /implement tool to feature tables and documentation links 2025-01-02 10:44:50 +02:00
2d5daf4364 docs: Enhance /implement tool documentation with usage scenarios and examples 2025-01-02 10:34:04 +02:00
Tal
aa95d5fb68 Merge pull request #1432 from Codium-ai/tr/describe
fix: reorganize PR description prompt fields and improve clarity
2025-01-02 08:46:39 +02:00
f6b470bf5e fix: reorganize PR description prompt fields and improve clarity 2025-01-02 08:41:25 +02:00
Tal
36df75ce14 Merge pull request #1431 from Codium-ai/tr/protections23
fix: improve CLI argument validation for sensitive parameters
2025-01-01 16:10:30 +02:00
e2be1f1cee fix: improve CLI argument validation for sensitive parameters with dot notation 2025-01-01 15:53:37 +02:00
d1caa0f15f fix: improve CLI argument validation for sensitive parameters with dot notation 2025-01-01 15:52:54 +02:00
2c2af93eed fix: improve CLI argument validation for sensitive parameters 2025-01-01 15:19:27 +02:00
Tal
04197a9271 Merge pull request #1430 from Codium-ai/tr/faq_update
docs: update FAQ with new questions and improve formatting
2025-01-01 09:30:13 +02:00
Tal
9faf1521b4 Update docs/docs/faq/index.md
Co-authored-by: qodo-merge-pro-for-open-source[bot] <189517486+qodo-merge-pro-for-open-source[bot]@users.noreply.github.com>
2025-01-01 09:28:23 +02:00
Tal
8819293770 Merge pull request #1406 from vishwamartur/support-personal-spaces
Support pull requests in personal spaces in Bitbucket Server
2025-01-01 09:26:29 +02:00
0ec4491542 docs: update FAQ with new questions and improve formatting 2025-01-01 09:24:20 +02:00
Tal
4fd121d34a Merge pull request #1429 from Codium-ai/tr/sub_bullet_points
fix: improve PR description and title field descriptions for clarity
2024-12-31 12:35:09 +02:00
6e80f5fcce fix: improve file path formatting in patch headers 2024-12-31 12:31:21 +02:00
4a1b042152 fix: improve bullet point formatting and file path display in PR description 2024-12-31 12:00:21 +02:00
6fbd95e1a9 fix: emphasize brevity in PR description bullet points 2024-12-31 08:36:32 +02:00
fd6e81978f fix: improve PR description and title field descriptions for clarity 2024-12-31 08:32:54 +02:00
Tal
467136a48a Merge pull request #1428 from Codium-ai/mrT23-patch-7
Update README.md
2024-12-30 21:12:46 +02:00
Tal
3b14d3a3c2 Update README.md 2024-12-30 21:11:40 +02:00
Tal
8218fa6e13 Merge pull request #1421 from dceoy/main
Update Groq models and tokens
2024-12-30 19:25:23 +02:00
8463c4f549 fix: sanitize Ask tool answers to prevent markdown formatting issues with leading slashes 2024-12-30 16:54:03 +02:00
Tal
014b1f20c5 Merge pull request #1426 from Codium-ai/tr/ask_fix
fix: sanitize Ask tool answers to prevent markdown formatting issues
2024-12-30 15:12:28 +02:00
2f73ab6eab fix: sanitize Ask tool answers to prevent markdown formatting issues with leading slashes 2024-12-30 15:06:27 +02:00
16dc29a23a fix: sanitize Ask tool answers to prevent markdown formatting issues 2024-12-30 14:58:53 +02:00
bd9522057f fix: add OpenAI configuration parameters to restricted CLI arguments 2024-12-30 14:33:26 +02:00
Tal
b3d4af6cbf Merge pull request #1425 from Codium-ai/tr/limit_online_commenting
fix: restrict sensitive configuration parameters in CLI arguments
2024-12-30 14:11:28 +02:00
5df9698bae fix: restrict sensitive configuration parameters in CLI arguments 2024-12-30 13:57:55 +02:00
e89b65ed38 Increase the max token of groq/llama-3.3-70b-versatile 2024-12-30 11:35:02 +09:00
6a145af159 fix: make semantic file types extension optional in PR description 2024-12-29 21:43:46 +02:00
Tal
39a375b3e4 Merge pull request #1423 from Codium-ai/tr/describe_v2
Tr/describe v2
2024-12-29 16:02:03 +02:00
dbd76ecde5 refactor: improve file changes title description length guidance 2024-12-29 11:42:05 +02:00
e95920c58c refactor: improve file handling and description generation in PR description tool 2024-12-29 11:37:05 +02:00
59899f0c62 fix: improve patch generation error handling and logging 2024-12-29 11:27:53 +02:00
5e46955d52 fix: improve file path formatting in patch output 2024-12-29 11:26:13 +02:00
95d0fafa75 refactor: optimize file content loading and improve rate limit handling 2024-12-29 11:25:33 +02:00
71c558d306 Update Groq models and tokens 2024-12-28 01:51:33 +09:00
Tal
7b2c41e0d2 Merge pull request #1420 from Codium-ai/tr/review_fix
fix: improve line extraction from files with missing content
2024-12-27 09:02:41 +02:00
4aad67b563 fix: improve line extraction from files with missing content 2024-12-27 09:00:20 +02:00
0f973681ea Add /implement tool to README and fix /test tool link 2024-12-25 11:43:23 +02:00
19f6078ed0 Add /test tool to tools section and fix typos 2024-12-25 11:39:53 +02:00
3994a2ba60 Add .qodo to gitignore 2024-12-25 11:34:54 +02:00
796b36f0d1 Add documentation for /implement tool in tools section and related files 2024-12-25 11:34:41 +02:00
Tal
12d603fdb4 Update README.md 2024-12-25 08:42:24 +02:00
Tal
6540e2c674 Merge pull request #1416 from Codium-ai/tr/remove_review_suggestions
refactor: remove legacy code suggestions feature from review tool
2024-12-25 08:26:03 +02:00
83e68f168a log verbosity 2024-12-25 08:22:53 +02:00
5e1b04980e refactor: remove reflection and incremental review features from docs and code 2024-12-25 08:21:33 +02:00
495c1ebe5f refactor: remove legacy code suggestions feature from review tool 2024-12-25 08:18:28 +02:00
Tal
ad71de82a9 Merge pull request #1413 from addianto/docs/1398-environment-variables
Document an example on how to configure PR Agent using environment variables
2024-12-24 21:25:54 +02:00
11676943b6 docs: Remind user to avoid commiting .env file (#1398) 2024-12-24 15:20:15 +07:00
b88507aa23 chore: Ignore .env file 2024-12-24 15:14:30 +07:00
a5c5e6f4ae docs: Add example how to define environment variables (#1398) 2024-12-24 15:01:26 +07:00
47cd361663 docs: Mention about the use of Dynaconf (#1398) 2024-12-24 15:01:13 +07:00
Tal
c84b3d04b9 Merge pull request #1412 from Codium-ai/tr/dedent_review
feat: add dedent option to code snippet formatting
2024-12-24 07:54:36 +02:00
7d9288bb1a feat: add dedent option to code snippet formatting 2024-12-24 07:49:27 +02:00
Tal
93e64367d2 Merge pull request #1410 from Codium-ai/tr/update_changelog_fix
Tr/update changelog fix
2024-12-23 19:37:28 +02:00
6c131b8406 feat: add PR link support in changelog updates 2024-12-23 19:35:52 +02:00
dd89e1f2dc feat: add PR link support in changelog updates 2024-12-23 19:34:21 +02:00
e8e4fb0afa feat: add PR link support in changelog updates 2024-12-23 17:20:29 +02:00
3360a28b3e fix: improve changelog update prompt and response handling 2024-12-23 17:06:21 +02:00
Tal
20c506d2e0 Merge pull request #1402 from KennyDizi/main
Add support for OpenAI `o1` model and snapshot version `o1-2024-12-17`
2024-12-22 09:36:04 +02:00
Tal
a1921d931c Merge pull request #1407 from Codium-ai/tr/publish_output_no_suggestions_fix
fix: only publish empty code suggestions when configured
2024-12-22 09:34:34 +02:00
31aa460f5f fix: only publish empty code suggestions when configured 2024-12-22 09:32:11 +02:00
23678c1d4d Update O1_MODEL_PREFIX to o1 based on new models released 2024-12-22 10:36:59 +07:00
8d7825233a Supported model gpt-o1 2024-12-22 10:33:26 +07:00
4688b20284 Support pull requests in personal spaces in Bitbucket Server
Related to #1148

Update `_parse_pr_url` method in `pr_agent/git_providers/bitbucket_server_provider.py` to handle URLs with `/users/`.

* Add logic to check for both `/projects/` and `/users/` in the URL path and process them accordingly.
* Modify the method to raise a `ValueError` if neither `/projects/` nor `/users/` is found in the URL.
* Update the `workspace_slug` to include a `~` prefix if the URL contains `/users/`.

Add test case for URL with `/users/` in `tests/unittest/test_bitbucket_provider.py`.

* Ensure the new test case verifies the correct parsing of URLs with `/users/`.
2024-12-22 00:42:11 +05:30
Tal
c9f02e63e1 Merge pull request #1403 from Codium-ai/tr/re_review
feat: enhance code review output with collapsible code snippets
2024-12-20 16:38:56 +02:00
c2f1f2dba0 fix: improve markdown rendering when git provider is unavailable 2024-12-19 21:08:27 +02:00
3ab2cac089 fix: improve markdown rendering when git provider is unavailable 2024-12-19 20:59:17 +02:00
989670b159 fix: improve markdown rendering when git provider is unavailable 2024-12-19 20:49:40 +02:00
7e8361b5fd feat: enhance code review output with collapsible code snippets and variable links 2024-12-19 20:30:56 +02:00
eaaaf6a6a2 Fix context windows token for model o1-2024-12-17 2024-12-19 23:11:45 +07:00
07f3933f6d Add support OpenAI model o1 snapshot version o1-2024-12-17 2024-12-19 23:00:47 +07:00
Tal
84786495ed Merge pull request #1401 from Codium-ai/tr/docs3
docs: simplify default tool configurations and update documentation
2024-12-19 16:43:25 +02:00
d09aa1b13e docs: remove unused automatic_review configuration option 2024-12-19 16:41:18 +02:00
Tal
e9615c6994 Merge pull request #1384 from MarkRx/feature/version-metadata
Add --version command and version metadata
2024-12-19 09:34:24 +02:00
f3ee4a75b5 docs: simplify default tool configurations and update documentation 2024-12-19 09:33:20 +02:00
452abe2e18 Move get_version to algo/util.py; fix version to 0.25 2024-12-17 08:44:53 -07:00
Tal
a768969d37 Merge pull request #1397 from KennyDizi/main
Add support for `gemini/gemini-2.0-flash-exp` model
2024-12-16 20:37:55 +02:00
Tal
9ef9198468 Update index.md 2024-12-16 20:37:09 +02:00
Tal
d0ea901bca Update fetching_ticket_context.md 2024-12-16 20:29:17 +02:00
Tal
57089c931b Merge pull request #1396 from ofir-frd/add-pr-body-license-documentation
Similar Code: Add PR Body License Documentation
2024-12-16 20:24:42 +02:00
03d2bea50b Add support model gemini-2.0-flash-exp 2024-12-16 23:37:19 +07:00
721d38d4ed docs: add license information to similar code documentation 2024-12-16 17:11:17 +02:00
Tal
bbec5d9cc9 Merge pull request #1395 from Codium-ai/mrT23-patch-6
Update review.md
2024-12-14 11:54:56 +02:00
Tal
0be2750dfa Update review.md 2024-12-14 11:53:47 +02:00
Tal
5e5c251cd0 Merge pull request #1394 from Codium-ai/mrT23-patch-6
Update README.md
2024-12-13 16:11:12 +02:00
Tal
048ae8ee9e Update README.md
Co-authored-by: qodo-merge-pro-for-open-source[bot] <189517486+qodo-merge-pro-for-open-source[bot]@users.noreply.github.com>
2024-12-13 16:11:04 +02:00
Tal
1a77e9afaf Update README.md 2024-12-13 16:09:18 +02:00
Tal
184a52d325 Update README.md 2024-12-12 21:40:04 +02:00
Tal
3d38060dff Update README.md 2024-12-12 21:35:56 +02:00
c4dc263f2c docs: update repository reference to be platform-agnostic 2024-12-11 18:31:49 +02:00
Tal
f67cc0dd18 Merge pull request #1392 from Codium-ai/tr/model_weak
docs: remove model_weak configuration and simplify model selection
2024-12-11 18:19:05 +02:00
872b27bfd8 docs: remove model_weak configuration and simplify model selection 2024-12-11 18:10:34 +02:00
Tal
cb88489dbe Merge pull request #1387 from KennyDizi/main
Introduce to weak model
2024-12-11 17:36:18 +02:00
Tal
da786b8020 Merge pull request #1391 from Codium-ai/tr/thumbs_up_down
feat: add thumbs up/down support and refactor code suggestions handling
2024-12-11 13:21:07 +02:00
6a51b8501d docs: add allow_thumbs_up_down configuration option and remove rank_extended_suggestions 2024-12-11 13:16:21 +02:00
d34edb83ff feat: add thumbs up/down support and refactor code suggestions handling 2024-12-11 13:03:43 +02:00
Tal
c6eb253ed1 Merge pull request #1390 from glebzhidkov/docs/escape-list-in-yaml-file
Fix doc for Github Actions
2024-12-10 22:07:55 +02:00
a61f1889d1 fix doc 2024-12-10 13:44:56 +01:00
75a120952c Add version metadata and --version command 2024-12-09 09:27:54 -07:00
f9a7b18073 Improve condition to pick up weak model 2024-12-09 22:36:07 +07:00
6352e6e3bf Change default model to regular model 2024-12-09 22:24:44 +07:00
f49217e058 docs: fix typos in improve.md documentation 2024-12-09 09:09:09 +02:00
Tal
e11cec7d9e Merge pull request #1388 from Codium-ai/tr/readme_enhancments
docs: reorganize and enhance best practices documentation in improve.md
2024-12-09 09:05:25 +02:00
c45cde93ef docs: fix typos in improve.md documentation 2024-12-09 09:04:53 +02:00
9e25667d97 docs: reorganize and enhance best practices documentation in improve.md 2024-12-09 09:02:40 +02:00
7dc9e73423 fix: move user_tag variable declaration outside conditional block 2024-12-09 08:27:30 +02:00
e3d779c30d Fix typo model_weak 2024-12-08 22:09:48 +07:00
88a93bdcd7 Update weak model document 2024-12-08 22:01:00 +07:00
3c31048afc Update model in git provider 2024-12-08 22:00:37 +07:00
fc5dda0957 Use weak model for the rest flows 2024-12-08 21:51:29 +07:00
936894e4d1 Use regular model for pr review and code suggestion flows 2024-12-08 21:51:09 +07:00
dec2859fc4 Set default model to weak model 2024-12-08 21:10:26 +07:00
a4d9a65fc6 Add model_week 2024-12-08 20:23:36 +07:00
683108d3a5 Removed model_turbo 2024-12-08 20:10:38 +07:00
e68e100117 typo 2024-12-08 11:46:10 +02:00
Tal
158892047b Merge pull request #1386 from Codium-ai/tr/self_check
Tr/self check
2024-12-08 11:42:53 +02:00
Tal
7d5e59cd40 Update tests/health_test/main.py
Co-authored-by: qodo-merge-pro-for-open-source[bot] <189517486+qodo-merge-pro-for-open-source[bot]@users.noreply.github.com>
2024-12-08 11:41:05 +02:00
e8fc351ce9 docs: add CLI health check section and reorganize automations documentation 2024-12-08 11:39:15 +02:00
43e91b0df7 feat: add health test for PR agent commands and improve output handling 2024-12-08 11:27:43 +02:00
39a461b3b2 docs: update badges and clarify Qodo Merge Pro description 2024-12-05 21:50:39 +02:00
19ade4acf0 fixed link 2024-12-04 14:29:12 +02:00
Tal
10f8b522db Merge pull request #1381 from Codium-ai/tr/qodo_installation
Tr/qodo installation
2024-12-03 18:17:37 +02:00
d26ca4f71c docs: update Qodo Merge Pro installation documentation with Bitbucket support 2024-12-03 18:16:02 +02:00
9160f756db docs: update Qodo Merge Pro installation documentation with Bitbucket support 2024-12-03 18:14:36 +02:00
84c3a7b969 docs: update Qodo Merge Pro installation documentation with Bitbucket support 2024-12-03 18:12:21 +02:00
d9f9cc65b3 Merge pull request #1380 from Codium-ai/hl/ticket_docs_update
Update fetching_ticket_context.md
2024-12-03 18:04:06 +02:00
7d99c0db8e Merge remote-tracking branch 'origin/main' 2024-12-03 17:48:14 +02:00
fe20a8c5e7 docs: update Qodo Merge Pro installation documentation with rebranding changes 2024-12-03 17:48:05 +02:00
43c95106d4 Update fetching_ticket_context.md 2024-12-03 17:18:40 +02:00
Tal
1dd5f0b848 Merge pull request #1379 from Codium-ai/tr/disable_auto_commands
Add disable_auto_feedback configuration option to control automatic feedback
2024-12-02 21:34:15 +02:00
8610aa27a4 Add disable_auto_feedback configuration option to control automatic PR feedback 2024-12-02 21:28:48 +02:00
188 changed files with 13015 additions and 3062 deletions

View File

@ -1,3 +1,4 @@
.venv/
venv/
pr_agent/settings/.secrets.toml
pics/

38
.github/ISSUE_TEMPLATE/bug-report.yml vendored Normal file
View File

@ -0,0 +1,38 @@
name: "\U0001FAB2 Bug Report"
description: Submit a bug report
labels: ["bug"]
body:
- type: dropdown
id: information-git-provider
attributes:
label: Git provider
description: 'The problem arises when using:'
options:
- "Github Cloud"
- "Github Enterprise"
- "Gitlab"
- "Bitbucket Cloud"
- "Bitbucket Server"
- "Azure"
- "Other"
validations:
required: true
- type: textarea
id: system-info
attributes:
label: System Info
description: Please share your system info with us.
placeholder: model used, deployment type (action/app/cli/...), etc...
validations:
required: true
- type: textarea
id: bug-details
attributes:
label: Bug details
description: Please describe the problem.
placeholder: Describe the problem
validations:
required: true

10
.github/ISSUE_TEMPLATE/config.yml vendored Normal file
View File

@ -0,0 +1,10 @@
blank_issues_enabled: false
version: 0.1
contact_links:
- name: Discussions
url: https://github.com/qodo-ai/pr-agent/discussions
about: GitHub Discussions
- name: Discord community
url: https://discord.com/channels/1057273017547378788/1126104260430528613
about: Join our discord community

View File

@ -0,0 +1,21 @@
name: "\U0001F4A1 Feature request"
description: Submit a proposal/request for a new PR-Agent feature
labels: ["feature"]
body:
- type: textarea
id: feature-request
validations:
required: true
attributes:
label: Feature request
description: |
Description of the feature proposal.
- type: textarea
id: motivation
validations:
required: true
attributes:
label: Motivation
description: |
Outline the motivation for the proposal.

View File

@ -0,0 +1,36 @@
name: "❔ General Issue"
description: Submit a general issue
labels: ["general"]
body:
- type: dropdown
id: information-git-provider
attributes:
label: Git provider (optional)
description: 'Git Provider:'
options:
- "Github Cloud"
- "Github Enterprise"
- "Gitlab"
- "Bitbucket Cloud"
- "Bitbucket Server"
- "Azure"
- "Other"
- type: textarea
id: system-info
attributes:
label: System Info (optional)
description: Please share your system info with us.
placeholder: model used, deployment type (action/app/cli/...), etc...
validations:
required: false
- type: textarea
id: issues-details
attributes:
label: Issues details
description: Please share the issues details.
placeholder: Describe the issue
validations:
required: true

View File

@ -14,15 +14,15 @@ jobs:
steps:
- id: checkout
uses: actions/checkout@v2
uses: actions/checkout@v4
- id: dockerx
name: Setup Docker Buildx
uses: docker/setup-buildx-action@v2
uses: docker/setup-buildx-action@v3
- id: build
name: Build dev docker
uses: docker/build-push-action@v2
uses: docker/build-push-action@v6
with:
context: .
file: ./docker/Dockerfile

View File

@ -15,15 +15,15 @@ jobs:
steps:
- id: checkout
uses: actions/checkout@v2
uses: actions/checkout@v4
- id: dockerx
name: Setup Docker Buildx
uses: docker/setup-buildx-action@v2
uses: docker/setup-buildx-action@v3
- id: build
name: Build dev docker
uses: docker/build-push-action@v2
uses: docker/build-push-action@v6
with:
context: .
file: ./docker/Dockerfile
@ -41,7 +41,6 @@ jobs:
docker cp test_container:/app/coverage.xml coverage.xml
docker rm test_container
- name: Validate coverage report
run: |
if [ ! -f coverage.xml ]; then
@ -49,6 +48,6 @@ jobs:
exit 1
fi
- name: Upload coverage to Codecov
uses: codecov/codecov-action@v4.0.1
uses: codecov/codecov-action@v5
with:
token: ${{ secrets.CODECOV_TOKEN }}

View File

@ -11,14 +11,14 @@ jobs:
name: PR-Agent E2E GitHub App Test
steps:
- name: Checkout repository
uses: actions/checkout@v2
uses: actions/checkout@v4
- name: Setup Docker Buildx
uses: docker/setup-buildx-action@v2
uses: docker/setup-buildx-action@v3
- id: build
name: Build dev docker
uses: docker/build-push-action@v2
uses: docker/build-push-action@v6
with:
context: .
file: ./docker/Dockerfile
@ -32,14 +32,13 @@ jobs:
- id: test1
name: E2E test github app
run: |
docker run -e GITHUB.USER_TOKEN=${{ secrets.TOKEN_GITHUB }} --rm codiumai/pr-agent:test pytest -v tests/e2e_tests/test_github_app.py
docker run -e GITHUB.USER_TOKEN=${{ secrets.TOKEN_GITHUB }} --rm codiumai/pr-agent:test pytest -v tests/e2e_tests/test_github_app.py
- id: test2
name: E2E gitlab webhook
run: |
docker run -e gitlab.PERSONAL_ACCESS_TOKEN=${{ secrets.TOKEN_GITLAB }} --rm codiumai/pr-agent:test pytest -v tests/e2e_tests/test_gitlab_webhook.py
- id: test3
name: E2E bitbucket app
run: |

View File

@ -11,7 +11,7 @@ jobs:
pre-commit:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
# SEE https://github.com/pre-commit/action
- uses: pre-commit/action@v3.0.1

4
.gitignore vendored
View File

@ -1,6 +1,8 @@
.idea/
.lsp/
.vscode/
.env
.venv/
venv/
pr_agent/settings/.secrets.toml
__pycache__
@ -9,3 +11,5 @@ dist/
build/
.DS_Store
docs/.cache/
.qodo
poetry.lock

View File

@ -1,6 +1,7 @@
## 2023-08-03
### Optimized
- Optimized PR diff processing by introducing caching for diff files, reducing the number of API calls.
- Refactored `load_large_diff` function to generate a patch only when necessary.
- Fixed a bug in the GitLab provider where the new file was not retrieved correctly.
@ -8,6 +9,7 @@
## 2023-08-02
### Enhanced
- Updated several tools in the `pr_agent` package to use commit messages in their functionality.
- Commit messages are now retrieved and stored in the `vars` dictionary for each tool.
- Added a section to display the commit messages in the prompts of various tools.
@ -15,6 +17,7 @@
## 2023-08-01
### Enhanced
- Introduced the ability to retrieve commit messages from pull requests across different git providers.
- Implemented commit messages retrieval for GitHub and GitLab providers.
- Updated the PR description template to include a section for commit messages if they exist.
@ -22,10 +25,10 @@
- Implemented this feature for both GitHub and GitLab providers.
- Added a new configuration option 'use_repo_settings_file' to enable or disable the use of a repo-specific settings file.
## 2023-07-30
### Enhanced
- Added the ability to modify any configuration parameter from 'configuration.toml' on-the-fly.
- Updated the command line interface and bot commands to accept configuration changes as arguments.
- Improved the PR agent to handle additional arguments for each action.
@ -33,6 +36,7 @@
## 2023-07-28
### Improved
- Enhanced error handling and logging in the GitLab provider.
- Improved handling of inline comments and code suggestions in GitLab.
- Fixed a bug where an additional unneeded line was added to code suggestions in GitLab.
@ -40,6 +44,7 @@
## 2023-07-26
### Added
- New feature for updating the CHANGELOG.md based on the contents of a PR.
- Added support for this feature for the Github provider.
- New configuration settings and prompts for the changelog update feature.

44
CODE_OF_CONDUCT.md Normal file
View File

@ -0,0 +1,44 @@
# Contributor Code of Conduct
As contributors and maintainers of this project, and in the interest of fostering an open
and welcoming community, we pledge to respect all people who contribute through reporting
issues, posting feature requests, updating documentation, submitting pull requests or
patches, and other activities.
We are committed to making participation in this project a harassment-free experience for
everyone, regardless of level of experience, gender, gender identity and expression,
sexual orientation, disability, personal appearance, body size, race, ethnicity, age,
religion, or nationality.
Examples of unacceptable behavior by participants include:
* The use of sexualized language or imagery
* Personal attacks
* Trolling or insulting/derogatory comments
* Public or private harassment
* Publishing other's private information, such as physical or electronic addresses,
without explicit permission
* Other unethical or unprofessional conduct
Project maintainers have the right and responsibility to remove, edit, or reject comments,
commits, code, wiki edits, issues, and other contributions that are not aligned to this
Code of Conduct, or to ban temporarily or permanently any contributor for other behaviors
that they deem inappropriate, threatening, offensive, or harmful.
By adopting this Code of Conduct, project maintainers commit themselves to fairly and
consistently applying these principles to every aspect of managing this project. Project
maintainers who do not follow or enforce the Code of Conduct may be permanently removed
from the project team.
This Code of Conduct applies both within project spaces and in public spaces when an
individual is representing the project or its community.
Instances of abusive, harassing, or otherwise unacceptable behavior may be reported by
contacting a project maintainer at tal.r@qodo.ai . All complaints will
be reviewed and investigated and will result in a response that is deemed necessary and
appropriate to the circumstances. Maintainers are obligated to maintain confidentiality
with regard to the reporter of an incident.
This Code of Conduct is adapted from the
[Contributor Covenant](https://contributor-covenant.org), version 1.3.0, available at
[contributor-covenant.org/version/1/3/0/](https://contributor-covenant.org/version/1/3/0/)

38
CONTRIBUTING.md Normal file
View File

@ -0,0 +1,38 @@
# Contributing to PR-Agent
Thank you for your interest in contributing to the PR-Agent project!
## Getting Started
1. Fork the repository and clone your fork
2. Install Python 3.10 or higher
3. Install dependencies (`requirements.txt` and `requirements-dev.txt`)
4. Create a new branch for your contribution:
- For new features: `git checkout -b feature/your-feature-name`
- For bug fixes: `git checkout -b fix/issue-description`
5. Make your changes
6. Write or update tests as needed
7. Run tests locally to ensure everything passes
8. Commit your changes using conventional commit messages
9. Push to your fork and submit a pull request
## Development Guidelines
- Keep pull requests focused on a single feature or fix
- Follow the existing code style and formatting conventions
- Add unit tests for any new functionality using pytest
- Ensure test coverage for your changes
- Update documentation as needed
## Pull Request Process
1. Ensure your PR includes a clear description of the changes
2. Link any related issues
3. Update the README.md if needed
4. Wait for review from maintainers
## Questions or Need Help?
- Join our [Discord community](https://discord.com/channels/1057273017547378788/1126104260430528613) for questions and discussions
- Check the [documentation](https://qodo-merge-docs.qodo.ai/) for detailed information
- Report bugs or request features through [GitHub Issues](https://github.com/qodo-ai/pr-agent/issues)

View File

@ -1,9 +1,11 @@
FROM python:3.12 as base
FROM python:3.12.10-slim AS base
RUN apt-get update && apt-get install --no-install-recommends -y git curl && apt-get clean && rm -rf /var/lib/apt/lists/*
WORKDIR /app
ADD pyproject.toml .
ADD requirements.txt .
RUN pip install . && rm pyproject.toml requirements.txt
RUN pip install --no-cache-dir . && rm pyproject.toml requirements.txt
ENV PYTHONPATH=/app
ADD docs docs
ADD pr_agent pr_agent

797
LICENSE
View File

@ -1,202 +1,661 @@
GNU AFFERO GENERAL PUBLIC LICENSE
Version 3, 19 November 2007
Apache License
Version 2.0, January 2004
http://www.apache.org/licenses/
Copyright (C) 2007 Free Software Foundation, Inc. <https://fsf.org/>
Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
Preamble
1. Definitions.
The GNU Affero General Public License is a free, copyleft license for
software and other kinds of works, specifically designed to ensure
cooperation with the community in the case of network server software.
"License" shall mean the terms and conditions for use, reproduction,
and distribution as defined by Sections 1 through 9 of this document.
The licenses for most software and other practical works are designed
to take away your freedom to share and change the works. By contrast,
our General Public Licenses are intended to guarantee your freedom to
share and change all versions of a program--to make sure it remains free
software for all its users.
"Licensor" shall mean the copyright owner or entity authorized by
the copyright owner that is granting the License.
When we speak of free software, we are referring to freedom, not
price. Our General Public Licenses are designed to make sure that you
have the freedom to distribute copies of free software (and charge for
them if you wish), that you receive source code or can get it if you
want it, that you can change the software or use pieces of it in new
free programs, and that you know you can do these things.
"Legal Entity" shall mean the union of the acting entity and all
other entities that control, are controlled by, or are under common
control with that entity. For the purposes of this definition,
"control" means (i) the power, direct or indirect, to cause the
direction or management of such entity, whether by contract or
otherwise, or (ii) ownership of fifty percent (50%) or more of the
outstanding shares, or (iii) beneficial ownership of such entity.
Developers that use our General Public Licenses protect your rights
with two steps: (1) assert copyright on the software, and (2) offer
you this License which gives you legal permission to copy, distribute
and/or modify the software.
"You" (or "Your") shall mean an individual or Legal Entity
exercising permissions granted by this License.
A secondary benefit of defending all users' freedom is that
improvements made in alternate versions of the program, if they
receive widespread use, become available for other developers to
incorporate. Many developers of free software are heartened and
encouraged by the resulting cooperation. However, in the case of
software used on network servers, this result may fail to come about.
The GNU General Public License permits making a modified version and
letting the public access it on a server without ever releasing its
source code to the public.
"Source" form shall mean the preferred form for making modifications,
including but not limited to software source code, documentation
source, and configuration files.
The GNU Affero General Public License is designed specifically to
ensure that, in such cases, the modified source code becomes available
to the community. It requires the operator of a network server to
provide the source code of the modified version running there to the
users of that server. Therefore, public use of a modified version, on
a publicly accessible server, gives the public access to the source
code of the modified version.
"Object" form shall mean any form resulting from mechanical
transformation or translation of a Source form, including but
not limited to compiled object code, generated documentation,
and conversions to other media types.
An older license, called the Affero General Public License and
published by Affero, was designed to accomplish similar goals. This is
a different license, not a version of the Affero GPL, but Affero has
released a new version of the Affero GPL which permits relicensing under
this license.
"Work" shall mean the work of authorship, whether in Source or
Object form, made available under the License, as indicated by a
copyright notice that is included in or attached to the work
(an example is provided in the Appendix below).
The precise terms and conditions for copying, distribution and
modification follow.
"Derivative Works" shall mean any work, whether in Source or Object
form, that is based on (or derived from) the Work and for which the
editorial revisions, annotations, elaborations, or other modifications
represent, as a whole, an original work of authorship. For the purposes
of this License, Derivative Works shall not include works that remain
separable from, or merely link (or bind by name) to the interfaces of,
the Work and Derivative Works thereof.
TERMS AND CONDITIONS
"Contribution" shall mean any work of authorship, including
the original version of the Work and any modifications or additions
to that Work or Derivative Works thereof, that is intentionally
submitted to Licensor for inclusion in the Work by the copyright owner
or by an individual or Legal Entity authorized to submit on behalf of
the copyright owner. For the purposes of this definition, "submitted"
means any form of electronic, verbal, or written communication sent
to the Licensor or its representatives, including but not limited to
communication on electronic mailing lists, source code control systems,
and issue tracking systems that are managed by, or on behalf of, the
Licensor for the purpose of discussing and improving the Work, but
excluding communication that is conspicuously marked or otherwise
designated in writing by the copyright owner as "Not a Contribution."
0. Definitions.
"Contributor" shall mean Licensor and any individual or Legal Entity
on behalf of whom a Contribution has been received by Licensor and
subsequently incorporated within the Work.
"This License" refers to version 3 of the GNU Affero General Public License.
2. Grant of Copyright License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
copyright license to reproduce, prepare Derivative Works of,
publicly display, publicly perform, sublicense, and distribute the
Work and such Derivative Works in Source or Object form.
"Copyright" also means copyright-like laws that apply to other kinds of
works, such as semiconductor masks.
3. Grant of Patent License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
(except as stated in this section) patent license to make, have made,
use, offer to sell, sell, import, and otherwise transfer the Work,
where such license applies only to those patent claims licensable
by such Contributor that are necessarily infringed by their
Contribution(s) alone or by combination of their Contribution(s)
with the Work to which such Contribution(s) was submitted. If You
institute patent litigation against any entity (including a
cross-claim or counterclaim in a lawsuit) alleging that the Work
or a Contribution incorporated within the Work constitutes direct
or contributory patent infringement, then any patent licenses
granted to You under this License for that Work shall terminate
as of the date such litigation is filed.
"The Program" refers to any copyrightable work licensed under this
License. Each licensee is addressed as "you". "Licensees" and
"recipients" may be individuals or organizations.
4. Redistribution. You may reproduce and distribute copies of the
Work or Derivative Works thereof in any medium, with or without
modifications, and in Source or Object form, provided that You
meet the following conditions:
To "modify" a work means to copy from or adapt all or part of the work
in a fashion requiring copyright permission, other than the making of an
exact copy. The resulting work is called a "modified version" of the
earlier work or a work "based on" the earlier work.
(a) You must give any other recipients of the Work or
Derivative Works a copy of this License; and
A "covered work" means either the unmodified Program or a work based
on the Program.
(b) You must cause any modified files to carry prominent notices
stating that You changed the files; and
To "propagate" a work means to do anything with it that, without
permission, would make you directly or secondarily liable for
infringement under applicable copyright law, except executing it on a
computer or modifying a private copy. Propagation includes copying,
distribution (with or without modification), making available to the
public, and in some countries other activities as well.
(c) You must retain, in the Source form of any Derivative Works
that You distribute, all copyright, patent, trademark, and
attribution notices from the Source form of the Work,
excluding those notices that do not pertain to any part of
the Derivative Works; and
To "convey" a work means any kind of propagation that enables other
parties to make or receive copies. Mere interaction with a user through
a computer network, with no transfer of a copy, is not conveying.
(d) If the Work includes a "NOTICE" text file as part of its
distribution, then any Derivative Works that You distribute must
include a readable copy of the attribution notices contained
within such NOTICE file, excluding those notices that do not
pertain to any part of the Derivative Works, in at least one
of the following places: within a NOTICE text file distributed
as part of the Derivative Works; within the Source form or
documentation, if provided along with the Derivative Works; or,
within a display generated by the Derivative Works, if and
wherever such third-party notices normally appear. The contents
of the NOTICE file are for informational purposes only and
do not modify the License. You may add Your own attribution
notices within Derivative Works that You distribute, alongside
or as an addendum to the NOTICE text from the Work, provided
that such additional attribution notices cannot be construed
as modifying the License.
An interactive user interface displays "Appropriate Legal Notices"
to the extent that it includes a convenient and prominently visible
feature that (1) displays an appropriate copyright notice, and (2)
tells the user that there is no warranty for the work (except to the
extent that warranties are provided), that licensees may convey the
work under this License, and how to view a copy of this License. If
the interface presents a list of user commands or options, such as a
menu, a prominent item in the list meets this criterion.
You may add Your own copyright statement to Your modifications and
may provide additional or different license terms and conditions
for use, reproduction, or distribution of Your modifications, or
for any such Derivative Works as a whole, provided Your use,
reproduction, and distribution of the Work otherwise complies with
the conditions stated in this License.
1. Source Code.
5. Submission of Contributions. Unless You explicitly state otherwise,
any Contribution intentionally submitted for inclusion in the Work
by You to the Licensor shall be under the terms and conditions of
this License, without any additional terms or conditions.
Notwithstanding the above, nothing herein shall supersede or modify
the terms of any separate license agreement you may have executed
with Licensor regarding such Contributions.
The "source code" for a work means the preferred form of the work
for making modifications to it. "Object code" means any non-source
form of a work.
6. Trademarks. This License does not grant permission to use the trade
names, trademarks, service marks, or product names of the Licensor,
except as required for reasonable and customary use in describing the
origin of the Work and reproducing the content of the NOTICE file.
A "Standard Interface" means an interface that either is an official
standard defined by a recognized standards body, or, in the case of
interfaces specified for a particular programming language, one that
is widely used among developers working in that language.
7. Disclaimer of Warranty. Unless required by applicable law or
agreed to in writing, Licensor provides the Work (and each
Contributor provides its Contributions) on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
implied, including, without limitation, any warranties or conditions
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
PARTICULAR PURPOSE. You are solely responsible for determining the
appropriateness of using or redistributing the Work and assume any
risks associated with Your exercise of permissions under this License.
The "System Libraries" of an executable work include anything, other
than the work as a whole, that (a) is included in the normal form of
packaging a Major Component, but which is not part of that Major
Component, and (b) serves only to enable use of the work with that
Major Component, or to implement a Standard Interface for which an
implementation is available to the public in source code form. A
"Major Component", in this context, means a major essential component
(kernel, window system, and so on) of the specific operating system
(if any) on which the executable work runs, or a compiler used to
produce the work, or an object code interpreter used to run it.
8. Limitation of Liability. In no event and under no legal theory,
whether in tort (including negligence), contract, or otherwise,
unless required by applicable law (such as deliberate and grossly
negligent acts) or agreed to in writing, shall any Contributor be
liable to You for damages, including any direct, indirect, special,
incidental, or consequential damages of any character arising as a
result of this License or out of the use or inability to use the
Work (including but not limited to damages for loss of goodwill,
work stoppage, computer failure or malfunction, or any and all
other commercial damages or losses), even if such Contributor
has been advised of the possibility of such damages.
The "Corresponding Source" for a work in object code form means all
the source code needed to generate, install, and (for an executable
work) run the object code and to modify the work, including scripts to
control those activities. However, it does not include the work's
System Libraries, or general-purpose tools or generally available free
programs which are used unmodified in performing those activities but
which are not part of the work. For example, Corresponding Source
includes interface definition files associated with source files for
the work, and the source code for shared libraries and dynamically
linked subprograms that the work is specifically designed to require,
such as by intimate data communication or control flow between those
subprograms and other parts of the work.
9. Accepting Warranty or Additional Liability. While redistributing
the Work or Derivative Works thereof, You may choose to offer,
and charge a fee for, acceptance of support, warranty, indemnity,
or other liability obligations and/or rights consistent with this
License. However, in accepting such obligations, You may act only
on Your own behalf and on Your sole responsibility, not on behalf
of any other Contributor, and only if You agree to indemnify,
defend, and hold each Contributor harmless for any liability
incurred by, or claims asserted against, such Contributor by reason
of your accepting any such warranty or additional liability.
The Corresponding Source need not include anything that users
can regenerate automatically from other parts of the Corresponding
Source.
END OF TERMS AND CONDITIONS
The Corresponding Source for a work in source code form is that
same work.
APPENDIX: How to apply the Apache License to your work.
2. Basic Permissions.
To apply the Apache License to your work, attach the following
boilerplate notice, with the fields enclosed by brackets "[]"
replaced with your own identifying information. (Don't include
the brackets!) The text should be enclosed in the appropriate
comment syntax for the file format. We also recommend that a
file or class name and description of purpose be included on the
same "printed page" as the copyright notice for easier
identification within third-party archives.
All rights granted under this License are granted for the term of
copyright on the Program, and are irrevocable provided the stated
conditions are met. This License explicitly affirms your unlimited
permission to run the unmodified Program. The output from running a
covered work is covered by this License only if the output, given its
content, constitutes a covered work. This License acknowledges your
rights of fair use or other equivalent, as provided by copyright law.
Copyright [2023] [Codium ltd]
You may make, run and propagate covered works that you do not
convey, without conditions so long as your license otherwise remains
in force. You may convey covered works to others for the sole purpose
of having them make modifications exclusively for you, or provide you
with facilities for running those works, provided that you comply with
the terms of this License in conveying all material for which you do
not control copyright. Those thus making or running the covered works
for you must do so exclusively on your behalf, under your direction
and control, on terms that prohibit them from making any copies of
your copyrighted material outside their relationship with you.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
Conveying under any other circumstances is permitted solely under
the conditions stated below. Sublicensing is not allowed; section 10
makes it unnecessary.
http://www.apache.org/licenses/LICENSE-2.0
3. Protecting Users' Legal Rights From Anti-Circumvention Law.
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
No covered work shall be deemed part of an effective technological
measure under any applicable law fulfilling obligations under article
11 of the WIPO copyright treaty adopted on 20 December 1996, or
similar laws prohibiting or restricting circumvention of such
measures.
When you convey a covered work, you waive any legal power to forbid
circumvention of technological measures to the extent such circumvention
is effected by exercising rights under this License with respect to
the covered work, and you disclaim any intention to limit operation or
modification of the work as a means of enforcing, against the work's
users, your or third parties' legal rights to forbid circumvention of
technological measures.
4. Conveying Verbatim Copies.
You may convey verbatim copies of the Program's source code as you
receive it, in any medium, provided that you conspicuously and
appropriately publish on each copy an appropriate copyright notice;
keep intact all notices stating that this License and any
non-permissive terms added in accord with section 7 apply to the code;
keep intact all notices of the absence of any warranty; and give all
recipients a copy of this License along with the Program.
You may charge any price or no price for each copy that you convey,
and you may offer support or warranty protection for a fee.
5. Conveying Modified Source Versions.
You may convey a work based on the Program, or the modifications to
produce it from the Program, in the form of source code under the
terms of section 4, provided that you also meet all of these conditions:
a) The work must carry prominent notices stating that you modified
it, and giving a relevant date.
b) The work must carry prominent notices stating that it is
released under this License and any conditions added under section
7. This requirement modifies the requirement in section 4 to
"keep intact all notices".
c) You must license the entire work, as a whole, under this
License to anyone who comes into possession of a copy. This
License will therefore apply, along with any applicable section 7
additional terms, to the whole of the work, and all its parts,
regardless of how they are packaged. This License gives no
permission to license the work in any other way, but it does not
invalidate such permission if you have separately received it.
d) If the work has interactive user interfaces, each must display
Appropriate Legal Notices; however, if the Program has interactive
interfaces that do not display Appropriate Legal Notices, your
work need not make them do so.
A compilation of a covered work with other separate and independent
works, which are not by their nature extensions of the covered work,
and which are not combined with it such as to form a larger program,
in or on a volume of a storage or distribution medium, is called an
"aggregate" if the compilation and its resulting copyright are not
used to limit the access or legal rights of the compilation's users
beyond what the individual works permit. Inclusion of a covered work
in an aggregate does not cause this License to apply to the other
parts of the aggregate.
6. Conveying Non-Source Forms.
You may convey a covered work in object code form under the terms
of sections 4 and 5, provided that you also convey the
machine-readable Corresponding Source under the terms of this License,
in one of these ways:
a) Convey the object code in, or embodied in, a physical product
(including a physical distribution medium), accompanied by the
Corresponding Source fixed on a durable physical medium
customarily used for software interchange.
b) Convey the object code in, or embodied in, a physical product
(including a physical distribution medium), accompanied by a
written offer, valid for at least three years and valid for as
long as you offer spare parts or customer support for that product
model, to give anyone who possesses the object code either (1) a
copy of the Corresponding Source for all the software in the
product that is covered by this License, on a durable physical
medium customarily used for software interchange, for a price no
more than your reasonable cost of physically performing this
conveying of source, or (2) access to copy the
Corresponding Source from a network server at no charge.
c) Convey individual copies of the object code with a copy of the
written offer to provide the Corresponding Source. This
alternative is allowed only occasionally and noncommercially, and
only if you received the object code with such an offer, in accord
with subsection 6b.
d) Convey the object code by offering access from a designated
place (gratis or for a charge), and offer equivalent access to the
Corresponding Source in the same way through the same place at no
further charge. You need not require recipients to copy the
Corresponding Source along with the object code. If the place to
copy the object code is a network server, the Corresponding Source
may be on a different server (operated by you or a third party)
that supports equivalent copying facilities, provided you maintain
clear directions next to the object code saying where to find the
Corresponding Source. Regardless of what server hosts the
Corresponding Source, you remain obligated to ensure that it is
available for as long as needed to satisfy these requirements.
e) Convey the object code using peer-to-peer transmission, provided
you inform other peers where the object code and Corresponding
Source of the work are being offered to the general public at no
charge under subsection 6d.
A separable portion of the object code, whose source code is excluded
from the Corresponding Source as a System Library, need not be
included in conveying the object code work.
A "User Product" is either (1) a "consumer product", which means any
tangible personal property which is normally used for personal, family,
or household purposes, or (2) anything designed or sold for incorporation
into a dwelling. In determining whether a product is a consumer product,
doubtful cases shall be resolved in favor of coverage. For a particular
product received by a particular user, "normally used" refers to a
typical or common use of that class of product, regardless of the status
of the particular user or of the way in which the particular user
actually uses, or expects or is expected to use, the product. A product
is a consumer product regardless of whether the product has substantial
commercial, industrial or non-consumer uses, unless such uses represent
the only significant mode of use of the product.
"Installation Information" for a User Product means any methods,
procedures, authorization keys, or other information required to install
and execute modified versions of a covered work in that User Product from
a modified version of its Corresponding Source. The information must
suffice to ensure that the continued functioning of the modified object
code is in no case prevented or interfered with solely because
modification has been made.
If you convey an object code work under this section in, or with, or
specifically for use in, a User Product, and the conveying occurs as
part of a transaction in which the right of possession and use of the
User Product is transferred to the recipient in perpetuity or for a
fixed term (regardless of how the transaction is characterized), the
Corresponding Source conveyed under this section must be accompanied
by the Installation Information. But this requirement does not apply
if neither you nor any third party retains the ability to install
modified object code on the User Product (for example, the work has
been installed in ROM).
The requirement to provide Installation Information does not include a
requirement to continue to provide support service, warranty, or updates
for a work that has been modified or installed by the recipient, or for
the User Product in which it has been modified or installed. Access to a
network may be denied when the modification itself materially and
adversely affects the operation of the network or violates the rules and
protocols for communication across the network.
Corresponding Source conveyed, and Installation Information provided,
in accord with this section must be in a format that is publicly
documented (and with an implementation available to the public in
source code form), and must require no special password or key for
unpacking, reading or copying.
7. Additional Terms.
"Additional permissions" are terms that supplement the terms of this
License by making exceptions from one or more of its conditions.
Additional permissions that are applicable to the entire Program shall
be treated as though they were included in this License, to the extent
that they are valid under applicable law. If additional permissions
apply only to part of the Program, that part may be used separately
under those permissions, but the entire Program remains governed by
this License without regard to the additional permissions.
When you convey a copy of a covered work, you may at your option
remove any additional permissions from that copy, or from any part of
it. (Additional permissions may be written to require their own
removal in certain cases when you modify the work.) You may place
additional permissions on material, added by you to a covered work,
for which you have or can give appropriate copyright permission.
Notwithstanding any other provision of this License, for material you
add to a covered work, you may (if authorized by the copyright holders of
that material) supplement the terms of this License with terms:
a) Disclaiming warranty or limiting liability differently from the
terms of sections 15 and 16 of this License; or
b) Requiring preservation of specified reasonable legal notices or
author attributions in that material or in the Appropriate Legal
Notices displayed by works containing it; or
c) Prohibiting misrepresentation of the origin of that material, or
requiring that modified versions of such material be marked in
reasonable ways as different from the original version; or
d) Limiting the use for publicity purposes of names of licensors or
authors of the material; or
e) Declining to grant rights under trademark law for use of some
trade names, trademarks, or service marks; or
f) Requiring indemnification of licensors and authors of that
material by anyone who conveys the material (or modified versions of
it) with contractual assumptions of liability to the recipient, for
any liability that these contractual assumptions directly impose on
those licensors and authors.
All other non-permissive additional terms are considered "further
restrictions" within the meaning of section 10. If the Program as you
received it, or any part of it, contains a notice stating that it is
governed by this License along with a term that is a further
restriction, you may remove that term. If a license document contains
a further restriction but permits relicensing or conveying under this
License, you may add to a covered work material governed by the terms
of that license document, provided that the further restriction does
not survive such relicensing or conveying.
If you add terms to a covered work in accord with this section, you
must place, in the relevant source files, a statement of the
additional terms that apply to those files, or a notice indicating
where to find the applicable terms.
Additional terms, permissive or non-permissive, may be stated in the
form of a separately written license, or stated as exceptions;
the above requirements apply either way.
8. Termination.
You may not propagate or modify a covered work except as expressly
provided under this License. Any attempt otherwise to propagate or
modify it is void, and will automatically terminate your rights under
this License (including any patent licenses granted under the third
paragraph of section 11).
However, if you cease all violation of this License, then your
license from a particular copyright holder is reinstated (a)
provisionally, unless and until the copyright holder explicitly and
finally terminates your license, and (b) permanently, if the copyright
holder fails to notify you of the violation by some reasonable means
prior to 60 days after the cessation.
Moreover, your license from a particular copyright holder is
reinstated permanently if the copyright holder notifies you of the
violation by some reasonable means, this is the first time you have
received notice of violation of this License (for any work) from that
copyright holder, and you cure the violation prior to 30 days after
your receipt of the notice.
Termination of your rights under this section does not terminate the
licenses of parties who have received copies or rights from you under
this License. If your rights have been terminated and not permanently
reinstated, you do not qualify to receive new licenses for the same
material under section 10.
9. Acceptance Not Required for Having Copies.
You are not required to accept this License in order to receive or
run a copy of the Program. Ancillary propagation of a covered work
occurring solely as a consequence of using peer-to-peer transmission
to receive a copy likewise does not require acceptance. However,
nothing other than this License grants you permission to propagate or
modify any covered work. These actions infringe copyright if you do
not accept this License. Therefore, by modifying or propagating a
covered work, you indicate your acceptance of this License to do so.
10. Automatic Licensing of Downstream Recipients.
Each time you convey a covered work, the recipient automatically
receives a license from the original licensors, to run, modify and
propagate that work, subject to this License. You are not responsible
for enforcing compliance by third parties with this License.
An "entity transaction" is a transaction transferring control of an
organization, or substantially all assets of one, or subdividing an
organization, or merging organizations. If propagation of a covered
work results from an entity transaction, each party to that
transaction who receives a copy of the work also receives whatever
licenses to the work the party's predecessor in interest had or could
give under the previous paragraph, plus a right to possession of the
Corresponding Source of the work from the predecessor in interest, if
the predecessor has it or can get it with reasonable efforts.
You may not impose any further restrictions on the exercise of the
rights granted or affirmed under this License. For example, you may
not impose a license fee, royalty, or other charge for exercise of
rights granted under this License, and you may not initiate litigation
(including a cross-claim or counterclaim in a lawsuit) alleging that
any patent claim is infringed by making, using, selling, offering for
sale, or importing the Program or any portion of it.
11. Patents.
A "contributor" is a copyright holder who authorizes use under this
License of the Program or a work on which the Program is based. The
work thus licensed is called the contributor's "contributor version".
A contributor's "essential patent claims" are all patent claims
owned or controlled by the contributor, whether already acquired or
hereafter acquired, that would be infringed by some manner, permitted
by this License, of making, using, or selling its contributor version,
but do not include claims that would be infringed only as a
consequence of further modification of the contributor version. For
purposes of this definition, "control" includes the right to grant
patent sublicenses in a manner consistent with the requirements of
this License.
Each contributor grants you a non-exclusive, worldwide, royalty-free
patent license under the contributor's essential patent claims, to
make, use, sell, offer for sale, import and otherwise run, modify and
propagate the contents of its contributor version.
In the following three paragraphs, a "patent license" is any express
agreement or commitment, however denominated, not to enforce a patent
(such as an express permission to practice a patent or covenant not to
sue for patent infringement). To "grant" such a patent license to a
party means to make such an agreement or commitment not to enforce a
patent against the party.
If you convey a covered work, knowingly relying on a patent license,
and the Corresponding Source of the work is not available for anyone
to copy, free of charge and under the terms of this License, through a
publicly available network server or other readily accessible means,
then you must either (1) cause the Corresponding Source to be so
available, or (2) arrange to deprive yourself of the benefit of the
patent license for this particular work, or (3) arrange, in a manner
consistent with the requirements of this License, to extend the patent
license to downstream recipients. "Knowingly relying" means you have
actual knowledge that, but for the patent license, your conveying the
covered work in a country, or your recipient's use of the covered work
in a country, would infringe one or more identifiable patents in that
country that you have reason to believe are valid.
If, pursuant to or in connection with a single transaction or
arrangement, you convey, or propagate by procuring conveyance of, a
covered work, and grant a patent license to some of the parties
receiving the covered work authorizing them to use, propagate, modify
or convey a specific copy of the covered work, then the patent license
you grant is automatically extended to all recipients of the covered
work and works based on it.
A patent license is "discriminatory" if it does not include within
the scope of its coverage, prohibits the exercise of, or is
conditioned on the non-exercise of one or more of the rights that are
specifically granted under this License. You may not convey a covered
work if you are a party to an arrangement with a third party that is
in the business of distributing software, under which you make payment
to the third party based on the extent of your activity of conveying
the work, and under which the third party grants, to any of the
parties who would receive the covered work from you, a discriminatory
patent license (a) in connection with copies of the covered work
conveyed by you (or copies made from those copies), or (b) primarily
for and in connection with specific products or compilations that
contain the covered work, unless you entered into that arrangement,
or that patent license was granted, prior to 28 March 2007.
Nothing in this License shall be construed as excluding or limiting
any implied license or other defenses to infringement that may
otherwise be available to you under applicable patent law.
12. No Surrender of Others' Freedom.
If conditions are imposed on you (whether by court order, agreement or
otherwise) that contradict the conditions of this License, they do not
excuse you from the conditions of this License. If you cannot convey a
covered work so as to satisfy simultaneously your obligations under this
License and any other pertinent obligations, then as a consequence you may
not convey it at all. For example, if you agree to terms that obligate you
to collect a royalty for further conveying from those to whom you convey
the Program, the only way you could satisfy both those terms and this
License would be to refrain entirely from conveying the Program.
13. Remote Network Interaction; Use with the GNU General Public License.
Notwithstanding any other provision of this License, if you modify the
Program, your modified version must prominently offer all users
interacting with it remotely through a computer network (if your version
supports such interaction) an opportunity to receive the Corresponding
Source of your version by providing access to the Corresponding Source
from a network server at no charge, through some standard or customary
means of facilitating copying of software. This Corresponding Source
shall include the Corresponding Source for any work covered by version 3
of the GNU General Public License that is incorporated pursuant to the
following paragraph.
Notwithstanding any other provision of this License, you have
permission to link or combine any covered work with a work licensed
under version 3 of the GNU General Public License into a single
combined work, and to convey the resulting work. The terms of this
License will continue to apply to the part which is the covered work,
but the work with which it is combined will remain governed by version
3 of the GNU General Public License.
14. Revised Versions of this License.
The Free Software Foundation may publish revised and/or new versions of
the GNU Affero General Public License from time to time. Such new versions
will be similar in spirit to the present version, but may differ in detail to
address new problems or concerns.
Each version is given a distinguishing version number. If the
Program specifies that a certain numbered version of the GNU Affero General
Public License "or any later version" applies to it, you have the
option of following the terms and conditions either of that numbered
version or of any later version published by the Free Software
Foundation. If the Program does not specify a version number of the
GNU Affero General Public License, you may choose any version ever published
by the Free Software Foundation.
If the Program specifies that a proxy can decide which future
versions of the GNU Affero General Public License can be used, that proxy's
public statement of acceptance of a version permanently authorizes you
to choose that version for the Program.
Later license versions may give you additional or different
permissions. However, no additional obligations are imposed on any
author or copyright holder as a result of your choosing to follow a
later version.
15. Disclaimer of Warranty.
THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
16. Limitation of Liability.
IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
SUCH DAMAGES.
17. Interpretation of Sections 15 and 16.
If the disclaimer of warranty and limitation of liability provided
above cannot be given local legal effect according to their terms,
reviewing courts shall apply local law that most closely approximates
an absolute waiver of all civil liability in connection with the
Program, unless a warranty or assumption of liability accompanies a
copy of the Program in return for a fee.
END OF TERMS AND CONDITIONS
How to Apply These Terms to Your New Programs
If you develop a new program, and you want it to be of the greatest
possible use to the public, the best way to achieve this is to make it
free software which everyone can redistribute and change under these terms.
To do so, attach the following notices to the program. It is safest
to attach them to the start of each source file to most effectively
state the exclusion of warranty; and each file should have at least
the "copyright" line and a pointer to where the full notice is found.
<one line to give the program's name and a brief idea of what it does.>
Copyright (C) <year> <name of author>
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as published
by the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Affero General Public License for more details.
You should have received a copy of the GNU Affero General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
Also add information on how to contact you by electronic and paper mail.
If your software can interact with users remotely through a computer
network, you should also make sure that it provides a way for users to
get its source. For example, if your program is a web application, its
interface could display a "Source" link that leads users to an archive
of the code. There are many ways you could offer source, and different
solutions will be better for different programs; see section 13 for the
specific requirements.
You should also get your employer (if you work as a programmer) or school,
if any, to sign a "copyright disclaimer" for the program, if necessary.
For more information on this, and how to apply and follow the GNU AGPL, see
<https://www.gnu.org/licenses/>.

354
README.md
View File

@ -2,152 +2,164 @@
<div align="center">
<picture>
<source media="(prefers-color-scheme: dark)" srcset="https://codium.ai/images/pr_agent/logo-dark.png" width="330">
<source media="(prefers-color-scheme: light)" srcset="https://codium.ai/images/pr_agent/logo-light.png" width="330">
<source media="(prefers-color-scheme: dark)" srcset="https://www.qodo.ai/wp-content/uploads/2025/02/PR-Agent-Purple-2.png">
<source media="(prefers-color-scheme: light)" srcset="https://www.qodo.ai/wp-content/uploads/2025/02/PR-Agent-Purple-2.png">
<img src="https://codium.ai/images/pr_agent/logo-light.png" alt="logo" width="330">
</picture>
<br/>
Qode Merge PR-Agent aims to help efficiently review and handle pull requests, by providing AI feedback and suggestions
[Installation Guide](https://qodo-merge-docs.qodo.ai/installation/) |
[Usage Guide](https://qodo-merge-docs.qodo.ai/usage-guide/) |
[Tools Guide](https://qodo-merge-docs.qodo.ai/tools/) |
[Qodo Merge](https://qodo-merge-docs.qodo.ai/overview/pr_agent_pro/) 💎
PR-Agent aims to help efficiently review and handle pull requests, by providing AI feedback and suggestions
</div>
[![GitHub license](https://img.shields.io/badge/License-Apache_2.0-blue.svg)](https://github.com/Codium-ai/pr-agent/blob/main/LICENSE)
[![Static Badge](https://img.shields.io/badge/Chrome-Extension-violet)](https://chromewebstore.google.com/detail/pr-agent-chrome-extension/ephlnjeghhogofkifjloamocljapahnl)
[![Static Badge](https://img.shields.io/badge/Code-Benchmark-blue)](https://pr-agent-docs.codium.ai/finetuning_benchmark/)
[![Discord](https://badgen.net/badge/icon/discord?icon=discord&label&color=purple)](https://discord.com/channels/1057273017547378788/1126104260430528613)
[![Twitter](https://img.shields.io/twitter/follow/codiumai)](https://twitter.com/codiumai)
[![Cheat Sheet](https://img.shields.io/badge/Cheat-Sheet-red)](https://www.codium.ai/images/pr_agent/cheat_sheet.pdf)
<a href="https://github.com/Codium-ai/pr-agent/commits/main">
<img alt="GitHub" src="https://img.shields.io/github/last-commit/Codium-ai/pr-agent/main?style=for-the-badge" height="20">
</a>
[![Static Badge](https://img.shields.io/badge/Chrome-Extension-violet)](https://chromewebstore.google.com/detail/qodo-merge-ai-powered-cod/ephlnjeghhogofkifjloamocljapahnl)
[![Static Badge](https://img.shields.io/badge/Pro-App-blue)](https://github.com/apps/qodo-merge-pro/)
[![Static Badge](https://img.shields.io/badge/OpenSource-App-red)](https://github.com/apps/qodo-merge-pro-for-open-source/)
[![Discord](https://badgen.net/badge/icon/discord?icon=discord&label&color=purple)](https://discord.com/invite/SgSxuQ65GF)
<a href="https://github.com/Codium-ai/pr-agent/commits/main">
<img alt="GitHub" src="https://img.shields.io/github/last-commit/Codium-ai/pr-agent/main?style=for-the-badge" height="20">
</a>
</div>
### [Documentation](https://pr-agent-docs.codium.ai/)
- See the [Installation Guide](https://qodo-merge-docs.qodo.ai/installation/) for instructions on installing Qode Merge PR-Agent on different platforms.
- See the [Usage Guide](https://qodo-merge-docs.qodo.ai/usage-guide/) for instructions on running Qode Merge PR-Agent tools via different interfaces, such as CLI, PR Comments, or by automatically triggering them when a new PR is opened.
- See the [Tools Guide](https://qodo-merge-docs.qodo.ai/tools/) for a detailed description of the different tools, and the available configurations for each tool.
## Table of Contents
- [Getting Started](#getting-started)
- [News and Updates](#news-and-updates)
- [Overview](#overview)
- [Example results](#example-results)
- [Try it now](#try-it-now)
- [PR-Agent Pro 💎](https://pr-agent-docs.codium.ai/overview/pr_agent_pro/)
- [How it works](#how-it-works)
- [Why use PR-Agent?](#why-use-pr-agent)
- [See It in Action](#see-it-in-action)
- [Try It Now](#try-it-now)
- [Qodo Merge 💎](#qodo-merge-)
- [How It Works](#how-it-works)
- [Why Use PR-Agent?](#why-use-pr-agent)
- [Data Privacy](#data-privacy)
- [Contributing](#contributing)
- [Links](#links)
## Getting Started
### Try it Instantly
Test PR-Agent on any public GitHub repository by commenting `@CodiumAI-Agent /improve`
### GitHub Action
Add automated PR reviews to your repository with a simple workflow file using [GitHub Action setup guide](https://qodo-merge-docs.qodo.ai/installation/github/#run-as-a-github-action)
#### Other Platforms
- [GitLab webhook setup](https://qodo-merge-docs.qodo.ai/installation/gitlab/)
- [BitBucket app installation](https://qodo-merge-docs.qodo.ai/installation/bitbucket/)
- [Azure DevOps setup](https://qodo-merge-docs.qodo.ai/installation/azure/)
### CLI Usage
Run PR-Agent locally on your repository via command line: [Local CLI setup guide](https://qodo-merge-docs.qodo.ai/usage-guide/automations_and_usage/#local-repo-cli)
### Qodo Merge as post-commit in your local IDE
See [here](https://github.com/qodo-ai/agents/tree/main/agents/qodo-merge-post-commit)
### Discover Qodo Merge 💎
Zero-setup hosted solution with advanced features and priority support
- [Intro and Installation guide](https://qodo-merge-docs.qodo.ai/installation/qodo_merge/)
- [Plans & Pricing](https://www.qodo.ai/pricing/)
### Qodo Merge as a Post-commit in Your Local IDE
You can receive automatic feedback from Qodo Merge on your local IDE after each [commit](https://github.com/qodo-ai/agents/tree/main/agents/qodo-merge-post-commit)
## News and Updates
### December 2, 2024
## Jul 1, 2025
You can now receive automatic feedback from Qodo Merge in your local IDE after each commit. Read more about it [here](https://github.com/qodo-ai/agents/tree/main/agents/qodo-merge-post-commit).
Open-source repositories can now freely use Qodo Merge Pro, and enjoy easy one-click installation using our dedicated [app](https://github.com/apps/qodo-merge-pro-for-open-source).
## Jun 21, 2025
<kbd><img src="https://github.com/user-attachments/assets/b0838724-87b9-43b0-ab62-73739a3a855c" width="512"></kbd>
v0.30 was [released](https://github.com/qodo-ai/pr-agent/releases)
### November 18, 2024
## Jun 3, 2025
A new mode was enabled by default for code suggestions - `--pr_code_suggestions.focus_only_on_problems=true`:
- This option reduces the number of code suggestions received
- The suggestions will focus more on identifying and fixing code problems, rather than style considerations like best practices, maintainability, or readability.
- The suggestions will be categorized into just two groups: "Possible Issues" and "General".
Still, if you prefer the previous mode, you can set `--pr_code_suggestions.focus_only_on_problems=false` in the [configuration file](https://qodo-merge-docs.qodo.ai/usage-guide/configuration_options/).
**Example results:**
Original mode
<kbd><img src="https://qodo.ai/images/pr_agent/code_suggestions_original_mode.png" width="512"></kbd>
Focused mode
<kbd><img src="https://qodo.ai/images/pr_agent/code_suggestions_focused_mode.png" width="512"></kbd>
Qodo Merge now offers a simplified free tier 💎.
Organizations can use Qodo Merge at no cost, with a [monthly limit](https://qodo-merge-docs.qodo.ai/installation/qodo_merge/#cloud-users) of 75 PR reviews per organization.
### November 4, 2024
## Apr 30, 2025
Qodo Merge PR Agent will now leverage context from Jira or GitHub tickets to enhance the PR Feedback. Read more about this feature
[here](https://qodo-merge-docs.qodo.ai/core-abilities/fetching_ticket_context/)
A new feature is now available in the `/improve` tool for Qodo Merge 💎 - Chat on code suggestions.
<img width="512" alt="image" src="https://codium.ai/images/pr_agent/improve_chat_on_code_suggestions_ask.png" />
Read more about it [here](https://qodo-merge-docs.qodo.ai/tools/improve/#chat-on-code-suggestions).
## Apr 16, 2025
New tool for Qodo Merge 💎 - `/scan_repo_discussions`.
<img width="635" alt="image" src="https://codium.ai/images/pr_agent/scan_repo_discussions_2.png" />
Read more about it [here](https://qodo-merge-docs.qodo.ai/tools/scan_repo_discussions/).
## Overview
<div style="text-align:left;">
Supported commands per platform:
| | | GitHub | Gitlab | Bitbucket | Azure DevOps |
|-------|---------------------------------------------------------------------------------------------------------|:--------------------:|:--------------------:|:--------------------:|:------------:|
| TOOLS | Review | ✅ | ✅ | ✅ | ✅ |
| | ⮑ Incremental | ✅ | | | |
| | Describe | ✅ | ✅ | ✅ | ✅ |
| | ⮑ [Inline File Summary](https://pr-agent-docs.codium.ai/tools/describe#inline-file-summary) 💎 | ✅ | | | |
| | Improve | ✅ | ✅ | ✅ | ✅ |
| | ⮑ Extended | ✅ | ✅ | ✅ | ✅ |
| | Ask | ✅ | ✅ | ✅ | ✅ |
| | ⮑ [Ask on code lines](https://pr-agent-docs.codium.ai/tools/ask#ask-lines) | ✅ | ✅ | | |
| | [Custom Prompt](https://pr-agent-docs.codium.ai/tools/custom_prompt/) 💎 | ✅ | ✅ | ✅ | |
| | [Test](https://pr-agent-docs.codium.ai/tools/test/) 💎 | ✅ | ✅ | | |
| | Reflect and Review | ✅ | ✅ | ✅ | ✅ |
| | Update CHANGELOG.md | ✅ | ✅ | ✅ | ✅ |
| | Find Similar Issue | ✅ | | | |
| | [Add PR Documentation](https://pr-agent-docs.codium.ai/tools/documentation/) 💎 | ✅ | ✅ | | |
| | [Custom Labels](https://pr-agent-docs.codium.ai/tools/custom_labels/) 💎 | ✅ | ✅ | | |
| | [Analyze](https://pr-agent-docs.codium.ai/tools/analyze/) 💎 | ✅ | ✅ | | |
| | [CI Feedback](https://pr-agent-docs.codium.ai/tools/ci_feedback/) 💎 | ✅ | | | |
| | [Similar Code](https://pr-agent-docs.codium.ai/tools/similar_code/) 💎 | ✅ | | | |
| | | | | | |
| USAGE | CLI | ✅ | ✅ | ✅ | ✅ |
| | App / webhook | ✅ | ✅ | ✅ | |
| | Tagging bot | | | | |
| | Actions | ✅ |✅| ✅ |✅|
| | | | | | |
| CORE | PR compression | ✅ | ✅ | ✅ | ✅ |
| | Repo language prioritization | ✅ | ✅ | ✅ | ✅ |
| | Adaptive and token-aware file patch fitting | ✅ | ✅ | ✅ | ✅ |
| | Multiple models support | ✅ | ✅ | ✅ | ✅ |
| | [Static code analysis](https://pr-agent-docs.codium.ai/core-abilities/#static-code-analysis) 💎 | ✅ | ✅ | ✅ | |
| | [Global and wiki configurations](https://pr-agent-docs.codium.ai/usage-guide/configuration_options/) 💎 | ✅ | ✅ | ✅ | |
| | [PR interactive actions](https://www.codium.ai/images/pr_agent/pr-actions.mp4) 💎 | ✅ | | | |
- 💎 means this feature is available only in [PR-Agent Pro](https://www.codium.ai/pricing/)
| | | GitHub | GitLab | Bitbucket | Azure DevOps | Gitea |
|---------------------------------------------------------|---------------------------------------------------------------------------------------------------------------------|:------:|:------:|:---------:|:------------:|:-----:|
| [TOOLS](https://qodo-merge-docs.qodo.ai/tools/) | [Describe](https://qodo-merge-docs.qodo.ai/tools/describe/) | ✅ | ✅ | ✅ | ✅ | ✅ |
| | [Review](https://qodo-merge-docs.qodo.ai/tools/review/) | | | | | ✅ |
| | [Improve](https://qodo-merge-docs.qodo.ai/tools/improve/) | ✅ | ✅ | ✅ | ✅ | ✅ |
| | [Ask](https://qodo-merge-docs.qodo.ai/tools/ask/) | | | | ✅ | |
| | ⮑ [Ask on code lines](https://qodo-merge-docs.qodo.ai/tools/ask/#ask-lines) | | ✅ | | | |
| | [Help Docs](https://qodo-merge-docs.qodo.ai/tools/help_docs/?h=auto#auto-approval) | ✅ | ✅ | ✅ | | |
| | [Update CHANGELOG](https://qodo-merge-docs.qodo.ai/tools/update_changelog/) | ✅ | ✅ | ✅ | ✅ | |
| | [Add Documentation](https://qodo-merge-docs.qodo.ai/tools/documentation/) 💎 | ✅ | | | | |
| | [Analyze](https://qodo-merge-docs.qodo.ai/tools/analyze/) 💎 | ✅ | ✅ | | | |
| | [Auto-Approve](https://qodo-merge-docs.qodo.ai/tools/improve/?h=auto#auto-approval) 💎 | | | | | |
| | [CI Feedback](https://qodo-merge-docs.qodo.ai/tools/ci_feedback/) 💎 | ✅ | | | | |
| | [Custom Prompt](https://qodo-merge-docs.qodo.ai/tools/custom_prompt/) 💎 | ✅ | ✅ | ✅ | | |
| | [Generate Custom Labels](https://qodo-merge-docs.qodo.ai/tools/custom_labels/) 💎 | | | | | |
| | [Generate Tests](https://qodo-merge-docs.qodo.ai/tools/test/) 💎 | ✅ | | | | |
| | [Implement](https://qodo-merge-docs.qodo.ai/tools/implement/) 💎 | ✅ | | | | |
| | [Scan Repo Discussions](https://qodo-merge-docs.qodo.ai/tools/scan_repo_discussions/) 💎 | | | | | |
| | [Similar Code](https://qodo-merge-docs.qodo.ai/tools/similar_code/) 💎 | ✅ | | | | |
| | [Ticket Context](https://qodo-merge-docs.qodo.ai/core-abilities/fetching_ticket_context/) 💎 | | | | | |
| | [Utilizing Best Practices](https://qodo-merge-docs.qodo.ai/tools/improve/#best-practices) 💎 | | ✅ | ✅ | | |
| | [PR Chat](https://qodo-merge-docs.qodo.ai/chrome-extension/features/#pr-chat) 💎 | ✅ | | | | |
| | [Suggestion Tracking](https://qodo-merge-docs.qodo.ai/tools/improve/#suggestion-tracking) 💎 | | | | | |
| | | | | | | |
| [USAGE](https://qodo-merge-docs.qodo.ai/usage-guide/) | [CLI](https://qodo-merge-docs.qodo.ai/usage-guide/automations_and_usage/#local-repo-cli) | | | | | ✅ |
| | [App / webhook](https://qodo-merge-docs.qodo.ai/usage-guide/automations_and_usage/#github-app) | | | | | |
| | [Tagging bot](https://github.com/Codium-ai/pr-agent#try-it-now) | ✅ | | | | |
| | [Actions](https://qodo-merge-docs.qodo.ai/installation/github/#run-as-a-github-action) | ✅ | ✅ | ✅ | ✅ | |
| | | | | | | |
| [CORE](https://qodo-merge-docs.qodo.ai/core-abilities/) | [Adaptive and token-aware file patch fitting](https://qodo-merge-docs.qodo.ai/core-abilities/compression_strategy/) | | | | ✅ | |
| | [Auto Best Practices 💎](https://qodo-merge-docs.qodo.ai/core-abilities/auto_best_practices/) | ✅ | | | | |
| | [Chat on code suggestions](https://qodo-merge-docs.qodo.ai/core-abilities/chat_on_code_suggestions/) | ✅ | ✅ | | | |
| | [Code Validation 💎](https://qodo-merge-docs.qodo.ai/core-abilities/code_validation/) || | | | |
| | [Dynamic context](https://qodo-merge-docs.qodo.ai/core-abilities/dynamic_context/) | ✅ | ✅ | ✅ | ✅ | |
| | [Fetching ticket context](https://qodo-merge-docs.qodo.ai/core-abilities/fetching_ticket_context/) | ✅ | ✅ | ✅ | | |
| | [Global and wiki configurations](https://qodo-merge-docs.qodo.ai/usage-guide/configuration_options/) 💎 | ✅ | ✅ | ✅ | | |
| | [Impact Evaluation](https://qodo-merge-docs.qodo.ai/core-abilities/impact_evaluation/) 💎 | ✅ | ✅ | | | |
| | [Incremental Update](https://qodo-merge-docs.qodo.ai/core-abilities/incremental_update/) | ✅ | | | | |
| | [Interactivity](https://qodo-merge-docs.qodo.ai/core-abilities/interactivity/) | ✅ | ✅ | | | |
| | [Local and global metadata](https://qodo-merge-docs.qodo.ai/core-abilities/metadata/) | ✅ | ✅ | ✅ | ✅ | |
| | [Multiple models support](https://qodo-merge-docs.qodo.ai/usage-guide/changing_a_model/) | ✅ | ✅ | ✅ | ✅ | |
| | [PR compression](https://qodo-merge-docs.qodo.ai/core-abilities/compression_strategy/) | ✅ | ✅ | ✅ | ✅ | |
| | [PR interactive actions](https://www.qodo.ai/images/pr_agent/pr-actions.mp4) 💎 | ✅ | ✅ | | | |
| | [RAG context enrichment](https://qodo-merge-docs.qodo.ai/core-abilities/rag_context_enrichment/) | ✅ | | ✅ | | |
| | [Self reflection](https://qodo-merge-docs.qodo.ai/core-abilities/self_reflection/) | ✅ | ✅ | ✅ | ✅ | |
| | [Static code analysis](https://qodo-merge-docs.qodo.ai/core-abilities/static_code_analysis/) 💎 | ✅ | ✅ | | | |
- 💎 means this feature is available only in [Qodo Merge](https://www.qodo.ai/pricing/)
[//]: # (- Support for additional git providers is described in [here]&#40;./docs/Full_environments.md&#41;)
___
**Auto Description ([`/describe`](https://pr-agent-docs.codium.ai/tools/describe/))**: Automatically generating PR description - title, type, summary, code walkthrough and labels.
\
**Auto Review ([`/review`](https://pr-agent-docs.codium.ai/tools/review/))**: Adjustable feedback about the PR, possible issues, security concerns, review effort and more.
\
**Code Suggestions ([`/improve`](https://pr-agent-docs.codium.ai/tools/improve/))**: Code suggestions for improving the PR.
\
**Question Answering ([`/ask ...`](https://pr-agent-docs.codium.ai/tools/ask/))**: Answering free-text questions about the PR.
\
**Update Changelog ([`/update_changelog`](https://pr-agent-docs.codium.ai/tools/update_changelog/))**: Automatically updating the CHANGELOG.md file with the PR changes.
\
**Find Similar Issue ([`/similar_issue`](https://pr-agent-docs.codium.ai/tools/similar_issues/))**: Automatically retrieves and presents similar issues.
\
**Add Documentation 💎 ([`/add_docs`](https://pr-agent-docs.codium.ai/tools/documentation/))**: Generates documentation to methods/functions/classes that changed in the PR.
\
**Generate Custom Labels 💎 ([`/generate_labels`](https://pr-agent-docs.codium.ai/tools/custom_labels/))**: Generates custom labels for the PR, based on specific guidelines defined by the user.
\
**Analyze 💎 ([`/analyze`](https://pr-agent-docs.codium.ai/tools/analyze/))**: Identify code components that changed in the PR, and enables to interactively generate tests, docs, and code suggestions for each component.
\
**Custom Prompt 💎 ([`/custom_prompt`](https://pr-agent-docs.codium.ai/tools/custom_prompt/))**: Automatically generates custom suggestions for improving the PR code, based on specific guidelines defined by the user.
\
**Generate Tests 💎 ([`/test component_name`](https://pr-agent-docs.codium.ai/tools/test/))**: Generates unit tests for a selected component, based on the PR code changes.
\
**CI Feedback 💎 ([`/checks ci_job`](https://pr-agent-docs.codium.ai/tools/ci_feedback/))**: Automatically generates feedback and analysis for a failed CI job.
\
**Similar Code 💎 ([`/find_similar_component`](https://pr-agent-docs.codium.ai/tools/similar_code/))**: Retrieves the most similar code components from inside the organization's codebase, or from open-source code.
___
## See It in Action
## Example results
</div>
<h4><a href="https://github.com/Codium-ai/pr-agent/pull/530">/describe</a></h4>
<div align="center">
@ -175,134 +187,84 @@ ___
</kbd>
</p>
</div>
<hr>
<h4><a href="https://github.com/Codium-ai/pr-agent/pull/530">/generate_labels</a></h4>
<div align="center">
<p float="center">
<kbd><img src="https://www.codium.ai/images/pr_agent/geneare_custom_labels_main_short.png" width="300"></kbd>
</p>
</div>
[//]: # (<h4><a href="https://github.com/Codium-ai/pr-agent/pull/78#issuecomment-1639739496">/reflect_and_review:</a></h4>)
[//]: # (<div align="center">)
[//]: # (<p float="center">)
[//]: # (<img src="https://www.codium.ai/images/reflect_and_review.gif" width="800">)
[//]: # (</p>)
[//]: # (</div>)
[//]: # (<h4><a href="https://github.com/Codium-ai/pr-agent/pull/229#issuecomment-1695020538">/ask:</a></h4>)
[//]: # (<div align="center">)
[//]: # (<p float="center">)
[//]: # (<img src="https://www.codium.ai/images/ask-2.gif" width="800">)
[//]: # (</p>)
[//]: # (</div>)
[//]: # (<h4><a href="https://github.com/Codium-ai/pr-agent/pull/229#issuecomment-1695024952">/improve:</a></h4>)
[//]: # (<div align="center">)
[//]: # (<p float="center">)
[//]: # (<img src="https://www.codium.ai/images/improve-2.gif" width="800">)
[//]: # (</p>)
[//]: # (</div>)
<div align="left">
</div>
<hr>
## Try It Now
## Try it now
Try the GPT-4 powered PR-Agent instantly on _your public GitHub repository_. Just mention `@CodiumAI-Agent` and add the desired command in any PR comment. The agent will generate a response based on your command.
Try the Claude Sonnet powered PR-Agent instantly on _your public GitHub repository_. Just mention `@CodiumAI-Agent` and add the desired command in any PR comment. The agent will generate a response based on your command.
For example, add a comment to any pull request with the following text:
```
@CodiumAI-Agent /review
```
and the agent will respond with a review of your PR.
Note that this is a promotional bot, suitable only for initial experimentation.
It does not have 'edit' access to your repo, for example, so it cannot update the PR description or add labels (`@CodiumAI-Agent /describe` will publish PR description as a comment). In addition, the bot cannot be used on private repositories, as it does not have access to the files there.
![Review generation process](https://www.codium.ai/images/demo-2.gif)
To set up your own PR-Agent, see the [Installation](https://pr-agent-docs.codium.ai/installation/) section below.
Note that when you set your own PR-Agent or use CodiumAI hosted PR-Agent, there is no need to mention `@CodiumAI-Agent ...`. Instead, directly start with the command, e.g., `/ask ...`.
---
## Qodo Merge 💎
## PR-Agent Pro 💎
[PR-Agent Pro](https://www.codium.ai/pricing/) is a hosted version of PR-Agent, provided by CodiumAI. It is available for a monthly fee, and provides the following benefits:
1. **Fully managed** - We take care of everything for you - hosting, models, regular updates, and more. Installation is as simple as signing up and adding the PR-Agent app to your GitHub\GitLab\BitBucket repo.
2. **Improved privacy** - No data will be stored or used to train models. PR-Agent Pro will employ zero data retention, and will use an OpenAI account with zero data retention.
3. **Improved support** - PR-Agent Pro users will receive priority support, and will be able to request new features and capabilities.
4. **Extra features** -In addition to the benefits listed above, PR-Agent Pro will emphasize more customization, and the usage of static code analysis, in addition to LLM logic, to improve results.
See [here](https://qodo-merge-docs.qodo.ai/overview/pr_agent_pro/) for a list of features available in PR-Agent Pro.
[Qodo Merge](https://www.qodo.ai/pricing/) is a hosted version of PR-Agent, provided by Qodo. It is available for a monthly fee, and provides the following benefits:
1. **Fully managed** - We take care of everything for you - hosting, models, regular updates, and more. Installation is as simple as signing up and adding the Qodo Merge app to your GitHub/GitLab/BitBucket repo.
2. **Improved privacy** - No data will be stored or used to train models. Qodo Merge will employ zero data retention, and will use an OpenAI account with zero data retention.
3. **Improved support** - Qodo Merge users will receive priority support, and will be able to request new features and capabilities.
4. **Extra features** - In addition to the benefits listed above, Qodo Merge will emphasize more customization, and the usage of static code analysis, in addition to LLM logic, to improve results.
See [here](https://qodo-merge-docs.qodo.ai/overview/pr_agent_pro/) for a list of features available in Qodo Merge.
## How it works
## How It Works
The following diagram illustrates PR-Agent tools and their flow:
![PR-Agent Tools](https://codium.ai/images/pr_agent/diagram-v0.9.png)
![PR-Agent Tools](https://www.qodo.ai/images/pr_agent/diagram-v0.9.png)
Check out the [PR Compression strategy](https://pr-agent-docs.codium.ai/core-abilities/#pr-compression-strategy) page for more details on how we convert a code diff to a manageable LLM prompt
Check out the [PR Compression strategy](https://qodo-merge-docs.qodo.ai/core-abilities/#pr-compression-strategy) page for more details on how we convert a code diff to a manageable LLM prompt
## Why use PR-Agent?
## Why Use PR-Agent?
A reasonable question that can be asked is: `"Why use PR-Agent? What makes it stand out from existing tools?"`
Here are some advantages of PR-Agent:
- We emphasize **real-life practical usage**. Each tool (review, improve, ask, ...) has a single GPT-4 call, no more. We feel that this is critical for realistic team usage - obtaining an answer quickly (~30 seconds) and affordably.
- Our [PR Compression strategy](https://pr-agent-docs.codium.ai/core-abilities/#pr-compression-strategy) is a core ability that enables to effectively tackle both short and long PRs.
- Our JSON prompting strategy enables to have **modular, customizable tools**. For example, the '/review' tool categories can be controlled via the [configuration](pr_agent/settings/configuration.toml) file. Adding additional categories is easy and accessible.
- We support **multiple git providers** (GitHub, Gitlab, Bitbucket), **multiple ways** to use the tool (CLI, GitHub Action, GitHub App, Docker, ...), and **multiple models** (GPT-4, GPT-3.5, Anthropic, Cohere, Llama2).
- We emphasize **real-life practical usage**. Each tool (review, improve, ask, ...) has a single LLM call, no more. We feel that this is critical for realistic team usage - obtaining an answer quickly (~30 seconds) and affordably.
- Our [PR Compression strategy](https://qodo-merge-docs.qodo.ai/core-abilities/#pr-compression-strategy) is a core ability that enables to effectively tackle both short and long PRs.
- Our JSON prompting strategy enables us to have **modular, customizable tools**. For example, the '/review' tool categories can be controlled via the [configuration](pr_agent/settings/configuration.toml) file. Adding additional categories is easy and accessible.
- We support **multiple git providers** (GitHub, GitLab, BitBucket), **multiple ways** to use the tool (CLI, GitHub Action, GitHub App, Docker, ...), and **multiple models** (GPT, Claude, Deepseek, ...)
## Data privacy
## Data Privacy
### Self-hosted PR-Agent
- If you host PR-Agent with your OpenAI API key, it is between you and OpenAI. You can read their API data privacy policy here:
https://openai.com/enterprise-privacy
### CodiumAI-hosted PR-Agent Pro 💎
### Qodo-hosted Qodo Merge 💎
- When using PR-Agent Pro 💎, hosted by CodiumAI, we will not store any of your data, nor will we use it for training. You will also benefit from an OpenAI account with zero data retention.
- When using Qodo Merge 💎, hosted by Qodo, we will not store any of your data, nor will we use it for training. You will also benefit from an OpenAI account with zero data retention.
- For certain clients, CodiumAI-hosted PR-Agent Pro will use CodiumAIs proprietary models — if this is the case, you will be notified.
- For certain clients, Qodo-hosted Qodo Merge will use Qodos proprietary models — if this is the case, you will be notified.
- No passive collection of Code and Pull Requests data — PR-Agent will be active only when you invoke it, and it will then extract and analyze only data relevant to the executed command and queried pull request.
- No passive collection of Code and Pull Requests data — Qodo Merge will be active only when you invoke it, and it will then extract and analyze only data relevant to the executed command and queried pull request.
### PR-Agent Chrome extension
### Qodo Merge Chrome extension
- The [PR-Agent Chrome extension](https://chromewebstore.google.com/detail/pr-agent-chrome-extension/ephlnjeghhogofkifjloamocljapahnl) serves solely to modify the visual appearance of a GitHub PR screen. It does not transmit any user's repo or pull request code. Code is only sent for processing when a user submits a GitHub comment that activates a PR-Agent tool, in accordance with the standard privacy policy of PR-Agent.
- The [Qodo Merge Chrome extension](https://chromewebstore.google.com/detail/qodo-merge-ai-powered-cod/ephlnjeghhogofkifjloamocljapahnl) serves solely to modify the visual appearance of a GitHub PR screen. It does not transmit any user's repo or pull request code. Code is only sent for processing when a user submits a GitHub comment that activates a PR-Agent tool, in accordance with the standard privacy policy of Qodo-Merge.
## Contributing
To contribute to the project, get started by reading our [Contributing Guide](https://github.com/qodo-ai/pr-agent/blob/b09eec265ef7d36c232063f76553efb6b53979ff/CONTRIBUTING.md).
## Links
[![Join our Discord community](https://raw.githubusercontent.com/Codium-ai/codiumai-vscode-release/main/media/docs/Joincommunity.png)](https://discord.gg/kG35uSHDBc)
- Discord community: https://discord.gg/kG35uSHDBc
- CodiumAI site: https://codium.ai
- Blog: https://www.codium.ai/blog/
- Troubleshooting: https://www.codium.ai/blog/technical-faq-and-troubleshooting/
- Support: support@codium.ai
- Discord community: https://discord.com/invite/SgSxuQ65GF
- Qodo site: https://www.qodo.ai/
- Blog: https://www.qodo.ai/blog/
- Troubleshooting: https://www.qodo.ai/blog/technical-faq-and-troubleshooting/
- Support: support@qodo.ai

View File

@ -1,4 +1,5 @@
## [Version 0.11] - 2023-12-07
- codiumai/pr-agent:0.11
- codiumai/pr-agent:0.11-github_app
- codiumai/pr-agent:0.11-bitbucket-app
@ -7,16 +8,18 @@
- codiumai/pr-agent:0.11-github_action
### Added::Algo
- New section in `/describe` tool - [PR changes walkthrough](https://github.com/Codium-ai/pr-agent/pull/509)
- Improving PR Agent [prompts](https://github.com/Codium-ai/pr-agent/pull/501)
- Persistent tools (`/review`, `/describe`) now send an [update message](https://github.com/Codium-ai/pr-agent/pull/499) after finishing
- Add Amazon Bedrock [support](https://github.com/Codium-ai/pr-agent/pull/483)
### Fixed
- Update [dependencies](https://github.com/Codium-ai/pr-agent/pull/503) in requirements.txt for Python 3.12
## [Version 0.10] - 2023-11-15
- codiumai/pr-agent:0.10
- codiumai/pr-agent:0.10-github_app
- codiumai/pr-agent:0.10-bitbucket-app
@ -25,6 +28,7 @@
- codiumai/pr-agent:0.10-github_action
### Added::Algo
- Review tool now works with [persistent comments](https://github.com/Codium-ai/pr-agent/pull/451) by default
- Bitbucket now publishes review suggestions with [code links](https://github.com/Codium-ai/pr-agent/pull/428)
- Enabling to limit [max number of tokens](https://github.com/Codium-ai/pr-agent/pull/437/files)
@ -34,11 +38,13 @@
- Decoupled custom labels from [PR type](https://github.com/Codium-ai/pr-agent/pull/431)
### Fixed
- Fixed bug in [parsing quotes](https://github.com/Codium-ai/pr-agent/pull/446) in CLI
- Preserve [user-added labels](https://github.com/Codium-ai/pr-agent/pull/433) in pull requests
- Bug fixes in GitLab and BitBucket
## [Version 0.9] - 2023-10-29
- codiumai/pr-agent:0.9
- codiumai/pr-agent:0.9-github_app
- codiumai/pr-agent:0.9-bitbucket-app
@ -47,6 +53,7 @@
- codiumai/pr-agent:0.9-github_action
### Added::Algo
- New tool - [generate_labels](https://github.com/Codium-ai/pr-agent/blob/main/docs/GENERATE_CUSTOM_LABELS.md)
- New ability to use [customize labels](https://github.com/Codium-ai/pr-agent/blob/main/docs/GENERATE_CUSTOM_LABELS.md#how-to-enable-custom-labels) on the `review` and `describe` tools.
- New tool - [add_docs](https://github.com/Codium-ai/pr-agent/blob/main/docs/ADD_DOCUMENTATION.md)
@ -56,14 +63,17 @@
- PR Description default mode is now in [bullet points](https://github.com/Codium-ai/pr-agent/blob/main/pr_agent/settings/configuration.toml#L35).
### Added::Documentation
Significant documentation updates (see [Installation Guide](https://github.com/Codium-ai/pr-agent/blob/main/INSTALL.md), [Usage Guide](https://github.com/Codium-ai/pr-agent/blob/main/Usage.md), and [Tools Guide](https://github.com/Codium-ai/pr-agent/blob/main/docs/TOOLS_GUIDE.md))
### Fixed
- Fixed support for BitBucket pipeline (see [link](https://github.com/Codium-ai/pr-agent/pull/386))
- Fixed a bug in `review -i` tool
- Added blacklist for specific file extensions in `add_docs` tool (see [link](https://github.com/Codium-ai/pr-agent/pull/385/))
## [Version 0.8] - 2023-09-27
- codiumai/pr-agent:0.8
- codiumai/pr-agent:0.8-github_app
- codiumai/pr-agent:0.8-bitbucket-app
@ -72,16 +82,18 @@ Significant documentation updates (see [Installation Guide](https://github.com/C
- codiumai/pr-agent:0.8-github_action
### Added::Algo
- GitHub Action: Can control which tools will run automatically when a new PR is created. (see usage guide: https://github.com/Codium-ai/pr-agent/blob/main/Usage.md#working-with-github-action)
- Code suggestion tool: Will try to avoid an 'add comments' suggestion (see https://github.com/Codium-ai/pr-agent/pull/327)
### Fixed
- Gitlab: Fixed a bug of improper usage of pr_id
- Gitlab: Fixed a bug of improper usage of pr_id
## [Version 0.7] - 2023-09-20
### Docker Tags
- codiumai/pr-agent:0.7
- codiumai/pr-agent:0.7-github_app
- codiumai/pr-agent:0.7-bitbucket-app
@ -90,14 +102,17 @@ Significant documentation updates (see [Installation Guide](https://github.com/C
- codiumai/pr-agent:0.7-github_action
### Added::Algo
- New tool /similar_issue - Currently on GitHub app and CLI: indexes the issues in the repo, find the most similar issues to the target issue.
- Describe markers: Empower the /describe tool with a templating capability (see more details in https://github.com/Codium-ai/pr-agent/pull/273).
- New feature in the /review tool - added an estimated effort estimation to the review (https://github.com/Codium-ai/pr-agent/pull/306).
### Added::Infrastructure
- Implementation of a GitLab webhook.
- Implementation of a BitBucket app.
### Fixed
- Protection against no code suggestions generated.
- Resilience to repositories where the languages cannot be automatically detected.

64
SECURITY.md Normal file
View File

@ -0,0 +1,64 @@
# Security Policy
PR-Agent is an open-source tool to help efficiently review and handle pull requests. Qodo Merge is a paid version of PR-Agent, designed for companies and teams that require additional features and capabilities.
This document describes the security policy of PR-Agent. For Qodo Merge's security policy, see [here](https://qodo-merge-docs.qodo.ai/overview/data_privacy/#qodo-merge).
## PR-Agent Self-Hosted Solutions
When using PR-Agent with your OpenAI (or other LLM provider) API key, the security relationship is directly between you and the provider. We do not send your code to Qodo servers.
Types of [self-hosted solutions](https://qodo-merge-docs.qodo.ai/installation):
- Locally
- GitHub integration
- GitLab integration
- BitBucket integration
- Azure DevOps integration
## PR-Agent Supported Versions
This section outlines which versions of PR-Agent are currently supported with security updates.
### Docker Deployment Options
#### Latest Version
For the most recent updates, use our latest Docker image which is automatically built nightly:
```yaml
uses: qodo-ai/pr-agent@main
```
#### Specific Release Version
For a fixed version, you can pin your action to a specific release version. Browse available releases at:
[PR-Agent Releases](https://github.com/qodo-ai/pr-agent/releases)
For example, to github action:
```yaml
steps:
- name: PR Agent action step
id: pragent
uses: docker://codiumai/pr-agent:0.26-github_action
```
#### Enhanced Security with Docker Digest
For maximum security, you can specify the Docker image using its digest:
```yaml
steps:
- name: PR Agent action step
id: pragent
uses: docker://codiumai/pr-agent@sha256:14165e525678ace7d9b51cda8652c2d74abb4e1d76b57c4a6ccaeba84663cc64
```
## Reporting a Vulnerability
We take the security of PR-Agent seriously. If you discover a security vulnerability, please report it immediately to:
Email: tal.r@qodo.ai
Please include a description of the vulnerability, steps to reproduce, and the affected PR-Agent version.

View File

@ -1,10 +1,12 @@
FROM python:3.12.3 AS base
FROM python:3.12.10-slim AS base
RUN apt update && apt install --no-install-recommends -y git curl && apt-get clean && rm -rf /var/lib/apt/lists/*
WORKDIR /app
ADD pyproject.toml .
ADD requirements.txt .
ADD docs docs
RUN pip install . && rm pyproject.toml requirements.txt
RUN pip install --no-cache-dir . && rm pyproject.toml requirements.txt
ENV PYTHONPATH=/app
FROM base AS github_app
@ -31,9 +33,14 @@ FROM base AS azure_devops_webhook
ADD pr_agent pr_agent
CMD ["python", "pr_agent/servers/azuredevops_server_webhook.py"]
FROM base AS gitea_app
ADD pr_agent pr_agent
CMD ["python", "-m", "gunicorn", "-k", "uvicorn.workers.UvicornWorker", "-c", "pr_agent/servers/gunicorn_config.py","pr_agent.servers.gitea_app:app"]
FROM base AS test
ADD requirements-dev.txt .
RUN pip install -r requirements-dev.txt && rm requirements-dev.txt
RUN pip install --no-cache-dir -r requirements-dev.txt && rm requirements-dev.txt
ADD pr_agent pr_agent
ADD tests tests

View File

@ -1,12 +1,18 @@
FROM public.ecr.aws/lambda/python:3.10
FROM public.ecr.aws/lambda/python:3.12 AS base
RUN yum update -y && \
yum install -y gcc python3-devel git && \
yum clean all
RUN dnf update -y && \
dnf install -y gcc python3-devel git && \
dnf clean all
ADD pyproject.toml requirements.txt .
RUN pip install . && rm pyproject.toml
RUN pip install mangum==0.17.0
ADD pyproject.toml requirements.txt ./
RUN pip install --no-cache-dir . && rm pyproject.toml
RUN pip install --no-cache-dir mangum==0.17.0
COPY pr_agent/ ${LAMBDA_TASK_ROOT}/pr_agent/
CMD ["pr_agent.servers.serverless.serverless"]
FROM base AS github_lambda
CMD ["pr_agent.servers.github_lambda_webhook.lambda_handler"]
FROM base AS gitlab_lambda
CMD ["pr_agent.servers.gitlab_lambda_webhook.lambda_handler"]
FROM github_lambda

View File

@ -0,0 +1,330 @@
<div class="search-section">
<h1>AI Docs Search</h1>
<p class="search-description">
Search through our documentation using AI-powered natural language queries.
</p>
<div class="search-container">
<input
type="text"
id="searchInput"
class="search-input"
placeholder="Enter your search term..."
>
<button id="searchButton" class="search-button">Search</button>
</div>
<div id="spinner" class="spinner-container" style="display: none;">
<div class="spinner"></div>
</div>
<div id="results" class="results-container"></div>
</div>
<style>
Untitled
.search-section {
max-width: 800px;
margin: 0 auto;
padding: 0 1rem 2rem;
}
h1 {
color: #666;
font-size: 2.125rem;
font-weight: normal;
margin-bottom: 1rem;
}
.search-description {
color: #666;
font-size: 1rem;
line-height: 1.5;
margin-bottom: 2rem;
max-width: 800px;
}
.search-container {
display: flex;
gap: 1rem;
max-width: 800px;
margin: 0; /* Changed from auto to 0 to align left */
}
.search-input {
flex: 1;
padding: 0 0.875rem;
border: 1px solid #ddd;
border-radius: 4px;
font-size: 0.9375rem;
outline: none;
height: 40px; /* Explicit height */
}
.search-input:focus {
border-color: #6c63ff;
}
.search-button {
padding: 0 1.25rem;
background-color: #2196F3;
color: white;
border: none;
border-radius: 4px;
cursor: pointer;
font-size: 0.875rem;
transition: background-color 0.2s;
height: 40px; /* Match the height of search input */
display: flex;
align-items: center;
justify-content: center;
}
.search-button:hover {
background-color: #1976D2;
}
.spinner-container {
display: flex;
justify-content: center;
margin-top: 2rem;
}
.spinner {
width: 40px;
height: 40px;
border: 4px solid #f3f3f3;
border-top: 4px solid #2196F3;
border-radius: 50%;
animation: spin 1s linear infinite;
}
@keyframes spin {
0% { transform: rotate(0deg); }
100% { transform: rotate(360deg); }
}
.results-container {
margin-top: 2rem;
max-width: 800px;
}
.result-item {
padding: 1rem;
border: 1px solid #ddd;
border-radius: 4px;
margin-bottom: 1rem;
}
.result-title {
font-size: 1.2rem;
color: #2196F3;
margin-bottom: 0.5rem;
}
.result-description {
color: #666;
}
.error-message {
color: #dc3545;
padding: 1rem;
border: 1px solid #dc3545;
border-radius: 4px;
margin-top: 1rem;
}
.markdown-content {
line-height: 1.6;
color: var(--md-typeset-color);
background: var(--md-default-bg-color);
border: 1px solid var(--md-default-fg-color--lightest);
border-radius: 12px;
padding: 1.5rem;
box-shadow: 0 2px 4px rgba(0,0,0,0.05);
position: relative;
margin-top: 2rem;
}
.markdown-content::before {
content: '';
position: absolute;
top: -8px;
left: 24px;
width: 16px;
height: 16px;
background: var(--md-default-bg-color);
border-left: 1px solid var(--md-default-fg-color--lightest);
border-top: 1px solid var(--md-default-fg-color--lightest);
transform: rotate(45deg);
}
.markdown-content > *:first-child {
margin-top: 0;
padding-top: 0;
}
.markdown-content p {
margin-bottom: 1rem;
}
.markdown-content p:last-child {
margin-bottom: 0;
}
.markdown-content code {
background: var(--md-code-bg-color);
color: var(--md-code-fg-color);
padding: 0.2em 0.4em;
border-radius: 3px;
font-size: 0.9em;
font-family: ui-monospace, SFMono-Regular, SF Mono, Menlo, Consolas, Liberation Mono, monospace;
}
.markdown-content pre {
background: var(--md-code-bg-color);
padding: 1rem;
border-radius: 6px;
overflow-x: auto;
margin: 1rem 0;
}
.markdown-content pre code {
background: none;
padding: 0;
font-size: 0.9em;
}
[data-md-color-scheme="slate"] .markdown-content {
box-shadow: 0 2px 4px rgba(0,0,0,0.1);
}
</style>
<script src="https://cdnjs.cloudflare.com/ajax/libs/marked/9.1.6/marked.min.js"></script>
<script>
window.addEventListener('load', function() {
function extractText(responseText) {
try {
console.log('responseText: ', responseText);
const results = JSON.parse(responseText);
const msg = results.message;
if (!msg || msg.trim() === '') {
return "No results found";
}
return msg;
} catch (error) {
console.error('Error parsing results:', error);
throw new Error("Failed parsing response message");
}
}
function displayResults(msg) {
const resultsContainer = document.getElementById('results');
const spinner = document.getElementById('spinner');
const searchContainer = document.querySelector('.search-container');
// Hide spinner
spinner.style.display = 'none';
// Scroll to search bar
searchContainer.scrollIntoView({ behavior: 'smooth', block: 'start' });
try {
marked.setOptions({
breaks: true,
gfm: true,
headerIds: false,
sanitize: false
});
const htmlContent = marked.parse(msg);
resultsContainer.className = 'markdown-content';
resultsContainer.innerHTML = htmlContent;
// Scroll after content is rendered
setTimeout(() => {
const searchContainer = document.querySelector('.search-container');
const offset = 55; // Offset from top in pixels
const elementPosition = searchContainer.getBoundingClientRect().top;
const offsetPosition = elementPosition + window.pageYOffset - offset;
window.scrollTo({
top: offsetPosition,
behavior: 'smooth'
});
}, 100);
} catch (error) {
console.error('Error parsing results:', error);
resultsContainer.innerHTML = '<div class="error-message">Cannot process results</div>';
}
}
async function performSearch() {
const searchInput = document.getElementById('searchInput');
const resultsContainer = document.getElementById('results');
const spinner = document.getElementById('spinner');
const searchTerm = searchInput.value.trim();
if (!searchTerm) {
resultsContainer.innerHTML = '<div class="error-message">Please enter a search term</div>';
return;
}
// Show spinner, clear results
spinner.style.display = 'flex';
resultsContainer.innerHTML = '';
try {
const data = {
"query": searchTerm
};
const options = {
method: 'POST',
headers: {
'accept': 'text/plain',
'content-type': 'application/json',
},
body: JSON.stringify(data)
};
//const API_ENDPOINT = 'http://0.0.0.0:3000/api/v1/docs_help';
const API_ENDPOINT = 'https://help.merge.qodo.ai/api/v1/docs_help';
const response = await fetch(API_ENDPOINT, options);
const responseText = await response.text();
const msg = extractText(responseText);
if (!response.ok) {
throw new Error(`An error (${response.status}) occurred during search: "${msg}"`);
}
displayResults(msg);
} catch (error) {
spinner.style.display = 'none';
const errorDiv = document.createElement('div');
errorDiv.className = 'error-message';
errorDiv.textContent = `${error}`;
resultsContainer.value = "";
resultsContainer.appendChild(errorDiv);
}
}
// Add event listeners
const searchButton = document.getElementById('searchButton');
const searchInput = document.getElementById('searchInput');
if (searchButton) {
searchButton.addEventListener('click', performSearch);
}
if (searchInput) {
searchInput.addEventListener('keypress', function(e) {
if (e.key === 'Enter') {
performSearch();
}
});
}
});
</script>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.2 KiB

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 263 KiB

After

Width:  |  Height:  |  Size: 57 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 1.2 KiB

After

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.7 KiB

After

Width:  |  Height:  |  Size: 17 KiB

View File

@ -1,4 +1,4 @@
We take your code's security and privacy seriously:
- The Chrome extension will not send your code to any external servers.
- For private repositories, we will first validate the user's identity and permissions. After authentication, we generate responses using the existing Qodo Merge Pro integration.
- For private repositories, we will first validate the user's identity and permissions. After authentication, we generate responses using the existing Qodo Merge integration.

View File

@ -8,7 +8,7 @@ To enable private chat, simply install the Qodo Merge Chrome extension. After in
This chat session is **private**, and won't be visible to other users.
All open-source repositories are supported.
For private repositories, you will also need to install Qodo Merge Pro, After installation, make sure to open at least one new PR to fully register your organization. Once done, you can chat with both new and existing PRs across all installed repositories.
For private repositories, you will also need to install Qodo Merge. After installation, make sure to open at least one new PR to fully register your organization. Once done, you can chat with both new and existing PRs across all installed repositories.
#### Context-aware PR chat
@ -17,8 +17,8 @@ Qodo Merge constructs a comprehensive context for each pull request, incorporati
<img src="https://codium.ai/images/pr_agent/pr_chat_1.png" width="768">
<img src="https://codium.ai/images/pr_agent/pr_chat_2.png" width="768">
### Toolbar extension
With Qodo Merge Chrome extension, it's [easier than ever](https://www.youtube.com/watch?v=gT5tli7X4H4) to interactively configure and experiment with the different tools and configuration options.
For private repositories, after you found the setup that works for you, you can also easily export it as a persistent configuration file, and use it for automatic commands.
@ -37,7 +37,6 @@ For example, you can choose to present only message from Qodo Merge, or filter t
<img src="https://codium.ai/images/pr_agent/pr_agent_filters2.png" width="256">
### Enhanced code suggestions
Qodo Merge Chrome extension adds the following capabilities to code suggestions tool's comments:
@ -45,7 +44,6 @@ Qodo Merge Chrome extension adds the following capabilities to code suggestions
- Auto-expand the table when you are viewing a code block, to avoid clipping.
- Adding a "quote-and-reply" button, that enables to address and comment on a specific suggestion (for example, asking the author to fix the issue)
<img src="https://codium.ai/images/pr_agent/chrome_extension_code_suggestion1.png" width="512">
<img src="https://codium.ai/images/pr_agent/chrome_extension_code_suggestion2.png" width="512">

View File

@ -1,11 +1,11 @@
[Qodo Merge Chrome extension](https://chromewebstore.google.com/detail/pr-agent-chrome-extension/ephlnjeghhogofkifjloamocljapahnl) is a collection of tools that integrates seamlessly with your GitHub environment, aiming to enhance your Git usage experience, and providing AI-powered capabilities to your PRs.
[Qodo Merge Chrome extension](https://chromewebstore.google.com/detail/pr-agent-chrome-extension/ephlnjeghhogofkifjloamocljapahnl){:target="_blank"} is a collection of tools that integrates seamlessly with your GitHub environment, aiming to enhance your Git usage experience, and providing AI-powered capabilities to your PRs.
With a single-click installation you will gain access to a context-aware chat on your pull requests code, a toolbar extension with multiple AI feedbacks, Qodo Merge filters, and additional abilities.
The extension is powered by top code models like Claude 3.5 Sonnet and GPT4. All the extension's features are free to use on public repositories.
The extension is powered by top code models like Claude 3.7 Sonnet and o4-mini. All the extension's features are free to use on public repositories.
For private repositories, you will need to install [Qodo Merge Pro](https://github.com/apps/codiumai-pr-agent-pro) in addition to the extension (Quick GitHub app setup with a 14-day free trial. No credit card needed).
For a demonstration of how to install Qodo Merge Pro and use it with the Chrome extension, please refer to the tutorial video at the provided [link](https://codium.ai/images/pr_agent/private_repos.mp4).
For private repositories, you will need to install [Qodo Merge](https://github.com/apps/qodo-merge-pro){:target="_blank"} in addition to the extension.
For a demonstration of how to install Qodo Merge and use it with the Chrome extension, please refer to the tutorial video at the provided [link](https://codium.ai/images/pr_agent/private_repos.mp4){:target="_blank"}.
<img src="https://codium.ai/images/pr_agent/PR-AgentChat.gif" width="768">

View File

@ -0,0 +1,39 @@
## Options and Configurations
### Accessing the Options Page
To access the options page for the Qodo Merge Chrome extension:
1. Find the extension icon in your Chrome toolbar (usually in the top-right corner of your browser)
2. Right-click on the extension icon
3. Select "Options" from the context menu that appears
Alternatively, you can access the options page directly using this URL:
[chrome-extension://ephlnjeghhogofkifjloamocljapahnl/options.html](chrome-extension://ephlnjeghhogofkifjloamocljapahnl/options.html)
<img src="https://codium.ai/images/pr_agent/chrome_ext_options.png" width="256">
### Configuration Options
<img src="https://codium.ai/images/pr_agent/chrome_ext_settings_page.png" width="512">
#### API Base Host
For single-tenant customers, you can configure the extension to communicate directly with your company's Qodo Merge server instance.
To set this up:
- Enter your organization's Qodo Merge API endpoint in the "API Base Host" field
- This endpoint should be provided by your Qodo DevOps Team
*Note: The extension does not send your code to the server, but only triggers your previously installed Qodo Merge application.*
#### Interface Options
You can customize the extension's interface by:
- Toggling the "Show Qodo Merge Toolbar" option
- When disabled, the toolbar will not appear in your Github comment bar
Remember to click "Save Settings" after making any changes.

View File

@ -0,0 +1,83 @@
# Auto-approval 💎
`Supported Git Platforms: GitHub, GitLab, Bitbucket`
Under specific conditions, Qodo Merge can auto-approve a PR when a manual comment is invoked, or when the PR meets certain criteria.
**To ensure safety, the auto-approval feature is disabled by default.**
To enable auto-approval features, you need to actively set one or both of the following options in a pre-defined _configuration file_:
```toml
[config]
enable_comment_approval = true # For approval via comments
enable_auto_approval = true # For criteria-based auto-approval
```
!!! note "Notes"
- These flags above cannot be set with a command line argument, only in the configuration file, committed to the repository.
- Enabling auto-approval must be a deliberate decision by the repository owner.
## **Approval by commenting**
To enable approval by commenting, set in the configuration file:
```toml
[config]
enable_comment_approval = true
```
After enabling, by commenting on a PR:
```
/review auto_approve
```
Qodo Merge will approve the PR and add a comment with the reason for the approval.
## **Auto-approval when the PR meets certain criteria**
To enable auto-approval based on specific criteria, first, you need to enable the top-level flag:
```toml
[config]
enable_auto_approval = true
```
There are two possible paths leading to this auto-approval - one via the `review` tool, and one via the `improve` tool. Each tool can independently trigger auto-approval.
### Auto-approval via the `review` tool
- **Review effort score criteria**
```toml
[config]
enable_auto_approval = true
auto_approve_for_low_review_effort = X # X is a number between 1 and 5
```
When the [review effort score](https://www.qodo.ai/images/pr_agent/review3.png) is lower than or equal to X, the PR will be auto-approved (unless ticket compliance is enabled and fails, see below).
- **Ticket compliance criteria**
```toml
[config]
enable_auto_approval = true
ensure_ticket_compliance = true # Default is false
```
If `ensure_ticket_compliance` is set to `true`, auto-approval for the `review` toll path will be disabled if no ticket is linked to the PR, or if the PR is not fully compliant with a linked ticket. This ensures that PRs are only auto-approved if their associated tickets are properly resolved.
You can also prevent auto-approval if the PR exceeds the ticket's scope (see [here](https://qodo-merge-docs.qodo.ai/core-abilities/fetching_ticket_context/#configuration-options)).
### Auto-approval via the `improve` tool
PRs can be auto-approved when the `improve` tool doesn't find code suggestions.
To enable this feature, set the following in the configuration file:
```toml
[config]
enable_auto_approval = true
auto_approve_for_no_suggestions = true
```

View File

@ -0,0 +1,67 @@
# Auto Best Practices 💎
`Supported Git Platforms: GitHub`
## Overview
![Auto best practice suggestion graph](https://www.qodo.ai/images/pr_agent/auto_best_practices_graph.png){width=684}
> Note - enabling a [Wiki](https://qodo-merge-docs.qodo.ai/usage-guide/enabling_a_wiki/) is required for this feature.
### Finding Code Problems - Exploration Phase
The `improve` tool identifies potential issues, problems and bugs in Pull Request (PR) code changes.
Rather than focusing on minor issues like code style or formatting, the tool intelligently analyzes code to detect meaningful problems.
The analysis intentionally takes a flexible, _exploratory_ approach to identify meaningful potential issues, allowing the tool to surface relevant code suggestions without being constrained by predefined categories.
### Tracking Implemented Suggestions
Qodo Merge features a novel [tracking system](https://qodo-merge-docs.qodo.ai/tools/improve/#suggestion-tracking) that automatically detects when PR authors implement AI-generated code suggestions.
All accepted suggestions are aggregated in a repository-specific wiki page called [`.pr_agent_accepted_suggestions`](https://github.com/qodo-ai/pr-agent/wiki/.pr_agent_accepted_suggestions)
### Learning and Applying Auto Best Practices
Monthly, Qodo Merge analyzes the collection of accepted suggestions to generate repository-specific best practices, stored in [`.pr_agent_auto_best_practices`](https://github.com/qodo-ai/pr-agent/wiki/.pr_agent_auto_best_practices) wiki file.
These best practices reflect recurring patterns in accepted code improvements.
The `improve` tool will incorporate these best practices as an additional analysis layer, checking PR code changes against known patterns of previously accepted improvements.
This creates a two-phase analysis:
1. Open exploration for general code issues
2. Targeted checking against established best practices - exploiting the knowledge gained from past suggestions
By keeping these phases decoupled, the tool remains free to discover new or unseen issues and problems, while also learning from past experiences.
When presenting the suggestions generated by the `improve` tool, Qodo Merge will add a dedicated label for each suggestion generated from the auto best practices - 'Learned best practice':
![Auto best practice suggestion](https://www.qodo.ai/images/pr_agent/auto_best_practices.png){width=684}
## Auto Best Practices vs Custom Best Practices
Teams and companies can also manually define their own [custom best practices](https://qodo-merge-docs.qodo.ai/tools/improve/#best-practices) in Qodo Merge.
When custom best practices exist, Qodo Merge will still generate an 'auto best practices' wiki file, though it won't be used by the `improve` tool.
However, this auto-generated file can still serve two valuable purposes:
1. It can help enhance your custom best practices with additional insights derived from suggestions your team found valuable enough to implement
2. It demonstrates effective patterns for writing AI-friendly best practices
Even when using custom best practices, we recommend regularly reviewing the auto best practices file to refine your custom rules.
## Relevant configurations
```toml
[auto_best_practices]
# Disable all auto best practices usage or generation
enable_auto_best_practices = true
# Disable usage of auto best practices file in the 'improve' tool
utilize_auto_best_practices = true
# Extra instructions to the auto best practices generation prompt
extra_instructions = ""
# Max number of patterns to be detected
max_patterns = 5
```

View File

@ -0,0 +1,55 @@
# Chat on code suggestions 💎
`Supported Git Platforms: GitHub, GitLab`
## Overview
Qodo Merge implements an orchestrator agent that enables interactive code discussions, listening and responding to comments without requiring explicit tool calls.
The orchestrator intelligently analyzes your responses to determine if you want to implement a suggestion, ask a question, or request help, then delegates to the appropriate specialized tool.
To minimize unnecessary notifications and maintain focused discussions, the orchestrator agent will only respond to comments made directly within the inline code suggestion discussions it has created (`/improve`) or within discussions initiated by the `/implement` command.
## Getting Started
### Setup
Enable interactive code discussions by adding the following to your configuration file (default is `True`):
```toml
[pr_code_suggestions]
enable_chat_in_code_suggestions = true
```
### Activation
#### `/improve`
To obtain dynamic responses, the following steps are required:
1. Run the `/improve` command (mostly automatic)
2. Check the `/improve` recommendation checkboxes (_Apply this suggestion_) to have Qodo Merge generate a new inline code suggestion discussion
3. The orchestrator agent will then automatically listen to and reply to comments within the discussion without requiring additional commands
#### `/implement`
To obtain dynamic responses, the following steps are required:
1. Select code lines in the PR diff and run the `/implement` command
2. Wait for Qodo Merge to generate a new inline code suggestion
3. The orchestrator agent will then automatically listen to and reply to comments within the discussion without requiring additional commands
## Explore the available interaction patterns
!!! tip "Tip: Direct the agent with keywords"
Use "implement" or "apply" for code generation. Use "explain", "why", or "how" for information and help.
=== "Asking for Details"
![Chat on code suggestions ask](https://codium.ai/images/pr_agent/improve_chat_on_code_suggestions_ask.png){width=512}
=== "Implementing Suggestions"
![Chat on code suggestions implement](https://codium.ai/images/pr_agent/improve_chat_on_code_suggestions_implement.png){width=512}
=== "Providing Additional Help"
![Chat on code suggestions help](https://codium.ai/images/pr_agent/improve_chat_on_code_suggestions_help.png){width=512}

View File

@ -1,2 +0,0 @@
## Overview
TBD

View File

@ -0,0 +1,45 @@
# Code Validation 💎
`Supported Git Platforms: GitHub, GitLab, Bitbucket`
## Introduction
The Git environment usually represents the final stage before code enters production. Hence, Detecting bugs and issues during the review process is critical.
The [`improve`](https://qodo-merge-docs.qodo.ai/tools/improve/) tool provides actionable code suggestions for your pull requests, aiming to help detect and fix bugs and problems.
By default, suggestions appear as a comment in a table format:
![code_suggestions_as_comment_closed.png](https://codium.ai/images/pr_agent/code_suggestions_as_comment_closed.png){width=512}
![code_suggestions_as_comment_open.png](https://codium.ai/images/pr_agent/code_suggestions_as_comment_open.png){width=512}
## Validation of Code Suggestions
Each suggestion in the table can be "applied" by clicking on the `Apply this suggestion` checkbox, converting it to a committable Git code change that can be committed directly to the PR.
This approach allows to fix issues without returning to your IDE for manual edits — significantly faster and more convenient.
However, committing a suggestion in a Git environment carries more risk than in a local IDE, as you don't have the opportunity to fully run and test the code before committing.
To balance convenience with safety, Qodo Merge implements a dual validation system for each generated code suggestion:
1) **Localization** - Qodo Merge confirms that the suggestion's line numbers and surrounding code, as predicted by the model, actually match the repo code. This means that the model correctly identified the context and location of the code to be changed.
2) **"Compilation"** - Using static code analysis, Qodo Merge verifies that after applying the suggestion, the modified file will still be valid, meaning tree-sitter syntax processing will not throw an error. This process is relevant for multiple programming languages, see [here](https://pypi.org/project/tree-sitter-languages/) for the full list of supported languages.
When a suggestion fails to meet these validation criteria, it may still provide valuable feedback, but isn't suitable for direct application to the PR.
In such cases, Qodo Merge will omit the 'apply' checkbox and instead display:
`[To ensure code accuracy, apply this suggestion manually]`
All suggestions that pass these validations undergo a final stage of **self-reflection**, where the AI model evaluates, scores, and re-ranks its own suggestions, eliminating any that are irrelevant or incorrect.
Read more about this process in the [self-reflection](https://qodo-merge-docs.qodo.ai/core-abilities/self_reflection/) page.
## Conclusion
The validation methods described above enhance the reliability of code suggestions and help PR authors determine which suggestions are safer to apply in the Git environment.
Of course, additional factors should be considered, such as suggestion complexity and potential code impact.
Human judgment remains essential. After clicking 'apply', Qodo Merge still presents the 'before' and 'after' code snippets for review, allowing you to assess the changes before finalizing the commit.
![improve](https://codium.ai/images/pr_agent/improve.png){width=512}

View File

@ -1,5 +1,9 @@
## Overview - PR Compression Strategy
`Supported Git Platforms: GitHub, GitLab, Bitbucket`
## Overview
There are two scenarios:
1. The PR is small enough to fit in a single prompt (including system and user prompt)
@ -8,6 +12,7 @@ There are two scenarios:
For both scenarios, we first use the following strategy
#### Repo language prioritization strategy
We prioritize the languages of the repo based on the following criteria:
1. Exclude binary files and non code files (e.g. images, pdfs, etc)
@ -15,28 +20,33 @@ We prioritize the languages of the repo based on the following criteria:
3. We sort the PR files by the most common languages in the repo (in descending order):
* ```[[file.py, file2.py],[file3.js, file4.jsx],[readme.md]]```
### Small PR
In this case, we can fit the entire PR in a single prompt:
1. Exclude binary files and non code files (e.g. images, pdfs, etc)
2. We Expand the surrounding context of each patch to 3 lines above and below the patch
### Large PR
#### Motivation
Pull Requests can be very long and contain a lot of information with varying degree of relevance to the pr-agent.
We want to be able to pack as much information as possible in a single LMM prompt, while keeping the information relevant to the pr-agent.
#### Compression strategy
We prioritize additions over deletions:
- Combine all deleted files into a single list (`deleted files`)
- File patches are a list of hunks, remove all hunks of type deletion-only from the hunks in the file patch
#### Adaptive and token-aware file patch fitting
We prioritize additions over deletions:
* Combine all deleted files into a single list (`deleted files`)
* File patches are a list of hunks, remove all hunks of type deletion-only from the hunks in the file patch
#### Adaptive and token-aware file patch fitting
We use [tiktoken](https://github.com/openai/tiktoken) to tokenize the patches after the modifications described above, and we use the following strategy to fit the patches into the prompt:
1. Within each language we sort the files by the number of tokens in the file (in descending order):
- ```[[file2.py, file.py],[file4.jsx, file3.js],[readme.md]]```
* ```[[file2.py, file.py],[file4.jsx, file3.js],[readme.md]]```
2. Iterate through the patches in the order described above
3. Add the patches to the prompt until the prompt reaches a certain buffer from the max token length
4. If there are still patches left, add the remaining patches as a list called `other modified files` to the prompt until the prompt reaches the max token length (hard stop), skip the rest of the patches.

View File

@ -1,4 +1,5 @@
## TL;DR
`Supported Git Platforms: GitHub, GitLab, Bitbucket`
Qodo Merge uses an **asymmetric and dynamic context strategy** to improve AI analysis of code changes in pull requests.
It provides more context before changes than after, and dynamically adjusts the context based on code structure (e.g., enclosing functions or classes).
@ -7,7 +8,8 @@ This approach balances providing sufficient context for accurate analysis, while
## Introduction
Pull request code changes are retrieved in a unified diff format, showing three lines of context before and after each modified section, with additions marked by '+' and deletions by '-'.
```
```diff
@@ -12,5 +12,5 @@ def func1():
code line that already existed in the file...
code line that already existed in the file...
@ -25,7 +27,6 @@ Pull request code changes are retrieved in a unified diff format, showing three
This unified diff format can be challenging for AI models to interpret accurately, as it provides limited context for understanding the full scope of code changes.
The presentation of code using '+', '-', and ' ' symbols to indicate additions, deletions, and unchanged lines respectively also differs from the standard code formatting typically used to train AI models.
## Challenges of expanding the context window
While expanding the context window is technically feasible, it presents a more fundamental trade-off:
@ -43,6 +44,7 @@ Pull requests often encompass multiple changes across many files, potentially sp
- Increased context expands the token count, increasing processing time and cost, and may prevent the model from processing the entire pull request in a single pass.
## Asymmetric and dynamic context
To address these challenges, Qodo Merge employs an **asymmetric** and **dynamic** context strategy, providing the model with more focused and relevant context information for each code change.
**Asymmetric:**
@ -62,7 +64,8 @@ To prevent overwhelming the model with excessive context, we impose a limit on t
This balance allows for comprehensive understanding while maintaining efficiency and limiting context token usage.
## Appendix - relevant configuration options
```
```toml
[config]
patch_extension_skip_types =[".md",".txt"] # Skip files with these extensions when trying to extend the context
allow_dynamic_context=true # Allow dynamic context extension

View File

@ -1,67 +1,96 @@
# Fetching Ticket Context for PRs
`Supported Git Platforms: GitHub, GitLab, Bitbucket`
## Overview
Qodo Merge PR Agent streamlines code review workflows by seamlessly connecting with multiple ticket management systems.
Qodo Merge streamlines code review workflows by seamlessly connecting with multiple ticket management systems.
This integration enriches the review process by automatically surfacing relevant ticket information and context alongside code changes.
**Ticket systems supported**:
- [GitHub](https://qodo-merge-docs.qodo.ai/core-abilities/fetching_ticket_context/#github-issues-integration)
- [Jira (💎)](https://qodo-merge-docs.qodo.ai/core-abilities/fetching_ticket_context/#jira-integration)
- [Linear (💎)](https://qodo-merge-docs.qodo.ai/core-abilities/fetching_ticket_context/#linear-integration)
**Ticket data fetched:**
1. Ticket Title
2. Ticket Description
3. Custom Fields (Acceptance criteria)
4. Subtasks (linked tasks)
5. Labels
6. Attached Images/Screenshots
## Affected Tools
Ticket Recognition Requirements:
1. The PR description should contain a link to the ticket.
2. For Jira tickets, you should follow the instructions in [Jira Integration](https://qodo-merge-docs.qodo.ai/core-abilities/fetching_ticket_context/#jira-integration) in order to authenticate with Jira.
- The PR description should contain a link to the ticket or if the branch name starts with the ticket id / number.
- For Jira tickets, you should follow the instructions in [Jira Integration](https://qodo-merge-docs.qodo.ai/core-abilities/fetching_ticket_context/#jira-integration) in order to authenticate with Jira.
### Describe tool
Qodo Merge PR Agent will recognize the ticket and use the ticket content (title, description, labels) to provide additional context for the code changes.
Qodo Merge will recognize the ticket and use the ticket content (title, description, labels) to provide additional context for the code changes.
By understanding the reasoning and intent behind modifications, the LLM can offer more insightful and relevant code analysis.
### Review tool
Similarly to the `describe` tool, the `review` tool will use the ticket content to provide additional context for the code changes.
In addition, this feature will evaluate how well a Pull Request (PR) adheres to its original purpose/intent as defined by the associated ticket or issue mentioned in the PR description.
Each ticket will be assigned a label (Compliance/Alignment level), Indicates the degree to which the PR fulfills its original purpose, Options: Fully compliant, Partially compliant or Not compliant.
Each ticket will be assigned a label (Compliance/Alignment level), Indicates the degree to which the PR fulfills its original purpose:
- Fully Compliant
- Partially Compliant
- Not Compliant
- PR Code Verified
![Ticket Compliance](https://www.qodo.ai/images/pr_agent/ticket_compliance_review.png){width=768}
By default, the tool will automatically validate if the PR complies with the referenced ticket.
If you want to disable this feedback, add the following line to your configuration file:
A `PR Code Verified` label indicates the PR code meets ticket requirements, but requires additional manual testing beyond the code scope. For example - validating UI display across different environments (Mac, Windows, mobile, etc.).
```toml
[pr_reviewer]
require_ticket_analysis_review=false
```
## Providers
#### Configuration options
### Github Issues Integration
-
Qodo Merge PR Agent will automatically recognize Github issues mentioned in the PR description and fetch the issue content.
By default, the tool will automatically validate if the PR complies with the referenced ticket.
If you want to disable this feedback, add the following line to your configuration file:
```toml
[pr_reviewer]
require_ticket_analysis_review=false
```
-
If you set:
```toml
[pr_reviewer]
check_pr_additional_content=true
```
(default: `false`)
the `review` tool will also validate that the PR code doesn't contain any additional content that is not related to the ticket. If it does, the PR will be labeled at best as `PR Code Verified`, and the `review` tool will provide a comment with the additional unrelated content found in the PR code.
## GitHub Issues Integration
Qodo Merge will automatically recognize GitHub issues mentioned in the PR description and fetch the issue content.
Examples of valid GitHub issue references:
- `https://github.com/<ORG_NAME>/<REPO_NAME>/issues/<ISSUE_NUMBER>`
- `#<ISSUE_NUMBER>`
- `<ORG_NAME>/<REPO_NAME>#<ISSUE_NUMBER>`
Since Qodo Merge PR Agent is integrated with GitHub, it doesn't require any additional configuration to fetch GitHub issues.
Since Qodo Merge is integrated with GitHub, it doesn't require any additional configuration to fetch GitHub issues.
### Jira Integration 💎
## Jira Integration 💎
We support both Jira Cloud and Jira Server/Data Center.
To integrate with Jira, The PR Description should contain a link to the Jira ticket.
For Jira integration, include a ticket reference in your PR description using either the complete URL format `https://<JIRA_ORG>.atlassian.net/browse/ISSUE-123` or the shortened ticket ID `ISSUE-123`.
### Jira Cloud
!!! note "Jira Base URL"
If using the shortened format, ensure your configuration file contains the Jira base URL under the [jira] section like this:
```toml
[jira]
jira_base_url = "https://<JIRA_ORG>.atlassian.net"
```
#### Jira Cloud 💎
There are two ways to authenticate with Jira Cloud:
**1) Jira App Authentication**
@ -70,13 +99,17 @@ The recommended way to authenticate with Jira Cloud is to install the Qodo Merge
Installation steps:
1. Click [here](https://auth.atlassian.com/authorize?audience=api.atlassian.com&client_id=8krKmA4gMD8mM8z24aRCgPCSepZNP1xf&scope=read%3Ajira-work%20offline_access&redirect_uri=https%3A%2F%2Fregister.jira.pr-agent.codium.ai&state=qodomerge&response_type=code&prompt=consent) to install the Qodo Merge app in your Jira Cloud instance, click the `accept` button.<br>
1. Go to the [Qodo Merge integrations page](https://app.qodo.ai/qodo-merge/integrations)
2. Click on the Connect **Jira Cloud** button to connect the Jira Cloud app
3. Click the `accept` button.<br>
![Jira Cloud App Installation](https://www.qodo.ai/images/pr_agent/jira_app_installation1.png){width=384}
2. After installing the app, you will be redirected to the Qodo Merge registration page. and you will see a success message.<br>
4. After installing the app, you will be redirected to the Qodo Merge registration page. and you will see a success message.<br>
![Jira Cloud App success message](https://www.qodo.ai/images/pr_agent/jira_app_success.png){width=384}
3. Now you can use the Jira integration in Qodo Merge PR Agent.
5. Now Qodo Merge will be able to fetch Jira ticket context for your PRs.
**2) Email/Token Authentication**
@ -100,10 +133,128 @@ jira_api_token = "YOUR_API_TOKEN"
jira_api_email = "YOUR_EMAIL"
```
### Jira Data Center/Server
#### Jira Server/Data Center 💎
[//]: # ()
[//]: # (##### Local App Authentication &#40;For Qodo Merge On-Premise Customers&#41;)
Currently, we only support the Personal Access Token (PAT) Authentication method.
[//]: # ()
[//]: # (##### 1. Step 1: Set up an application link in Jira Data Center/Server)
[//]: # (* Go to Jira Administration > Applications > Application Links > Click on `Create link`)
[//]: # ()
[//]: # (![application links]&#40;https://www.qodo.ai/images/pr_agent/jira_app_links.png&#41;{width=384})
[//]: # (* Choose `External application` and set the direction to `Incoming` and then click `Continue`)
[//]: # ()
[//]: # (![external application]&#40;https://www.qodo.ai/images/pr_agent/jira_create_link.png&#41;{width=256})
[//]: # (* In the following screen, enter the following details:)
[//]: # ( * Name: `Qodo Merge`)
[//]: # ( * Redirect URL: Enter your Qodo Merge URL followed `https://{QODO_MERGE_ENDPOINT}/register_ticket_provider`)
[//]: # ( * Permission: Select `Read`)
[//]: # ( * Click `Save`)
[//]: # ()
[//]: # (![external application details]&#40;https://www.qodo.ai/images/pr_agent/jira_fill_app_link.png&#41;{width=384})
[//]: # (* Copy the `Client ID` and `Client secret` and set them in your `.secrets` file:)
[//]: # ()
[//]: # (![client id and secret]&#40;https://www.qodo.ai/images/pr_agent/jira_app_credentionals.png&#41;{width=256})
[//]: # (```toml)
[//]: # ([jira])
[//]: # (jira_app_secret = "...")
[//]: # (jira_client_id = "...")
[//]: # (```)
[//]: # ()
[//]: # (##### 2. Step 2: Authenticate with Jira Data Center/Server)
[//]: # (* Open this URL in your browser: `https://{QODO_MERGE_ENDPOINT}/jira_auth`)
[//]: # (* Click on link)
[//]: # ()
[//]: # (![jira auth success]&#40;https://www.qodo.ai/images/pr_agent/jira_auth_page.png&#41;{width=384})
[//]: # ()
[//]: # (* You will be redirected to Jira Data Center/Server, click `Allow`)
[//]: # (* You will be redirected back to Qodo Merge and you will see a success message.)
[//]: # (Personal Access Token &#40;PAT&#41; Authentication)
#### Using Basic Authentication for Jira Data Center/Server
You can use your Jira username and password to authenticate with Jira Data Center/Server.
In your Configuration file/Environment variables/Secrets file, add the following lines:
```toml
jira_api_email = "your_username"
jira_api_token = "your_password"
```
(Note that indeed the 'jira_api_email' field is used for the username, and the 'jira_api_token' field is used for the user password.)
##### Validating Basic authentication via Python script
If you are facing issues retrieving tickets in Qodo Merge with Basic auth, you can validate the flow using a Python script.
This following steps will help you check if the basic auth is working correctly, and if you can access the Jira ticket details:
1. run `pip install jira==3.8.0`
2. run the following Python script (after replacing the placeholders with your actual values):
???- example "Script to validate basic auth"
```python
from jira import JIRA
if __name__ == "__main__":
try:
# Jira server URL
server = "https://..."
# Basic auth
username = "..."
password = "..."
# Jira ticket code (e.g. "PROJ-123")
ticket_id = "..."
print("Initializing JiraServerTicketProvider with JIRA server")
# Initialize JIRA client
jira = JIRA(
server=server,
basic_auth=(username, password),
timeout=30
)
if jira:
print(f"JIRA client initialized successfully")
else:
print("Error initializing JIRA client")
# Fetch ticket details
ticket = jira.issue(ticket_id)
print(f"Ticket title: {ticket.fields.summary}")
except Exception as e:
print(f"Error fetching JIRA ticket details: {e}")
```
#### Using a Personal Access Token (PAT) for Jira Data Center/Server
1. Create a [Personal Access Token (PAT)](https://confluence.atlassian.com/enterprise/using-personal-access-tokens-1026032365.html) in your Jira account
2. In your Configuration file/Environment variables/Secrets file, add the following lines:
@ -112,4 +263,188 @@ Currently, we only support the Personal Access Token (PAT) Authentication method
[jira]
jira_base_url = "YOUR_JIRA_BASE_URL" # e.g. https://jira.example.com
jira_api_token = "YOUR_API_TOKEN"
```
```
##### Validating PAT token via Python script
If you are facing issues retrieving tickets in Qodo Merge with PAT token, you can validate the flow using a Python script.
This following steps will help you check if the token is working correctly, and if you can access the Jira ticket details:
1. run `pip install jira==3.8.0`
2. run the following Python script (after replacing the placeholders with your actual values):
??? example- "Script to validate PAT token"
```python
from jira import JIRA
if __name__ == "__main__":
try:
# Jira server URL
server = "https://..."
# Jira PAT token
token_auth = "..."
# Jira ticket code (e.g. "PROJ-123")
ticket_id = "..."
print("Initializing JiraServerTicketProvider with JIRA server")
# Initialize JIRA client
jira = JIRA(
server=server,
token_auth=token_auth,
timeout=30
)
if jira:
print(f"JIRA client initialized successfully")
else:
print("Error initializing JIRA client")
# Fetch ticket details
ticket = jira.issue(ticket_id)
print(f"Ticket title: {ticket.fields.summary}")
except Exception as e:
print(f"Error fetching JIRA ticket details: {e}")
```
### Multi-JIRA Server Configuration 💎
Qodo Merge supports connecting to multiple JIRA servers using different authentication methods.
=== "Email/Token (Basic Auth)"
Configure multiple servers using Email/Token authentication:
- `jira_servers`: List of JIRA server URLs
- `jira_api_token`: List of API tokens (for Cloud) or passwords (for Data Center)
- `jira_api_email`: List of emails (for Cloud) or usernames (for Data Center)
- `jira_base_url`: Default server for ticket IDs like `PROJ-123`, Each repository can configure (local config file) its own `jira_base_url` to choose which server to use by default.
**Example Configuration:**
```toml
[jira]
# Server URLs
jira_servers = ["https://company.atlassian.net", "https://datacenter.jira.com"]
# API tokens/passwords
jira_api_token = ["cloud_api_token_here", "datacenter_password"]
# Emails/usernames (both required)
jira_api_email = ["user@company.com", "datacenter_username"]
# Default server for ticket IDs
jira_base_url = "https://company.atlassian.net"
```
=== "PAT Auth"
Configure multiple servers using Personal Access Token authentication:
- `jira_servers`: List of JIRA server URLs
- `jira_api_token`: List of PAT tokens
- `jira_api_email`: Not needed (can be omitted or left empty)
- `jira_base_url`: Default server for ticket IDs like `PROJ-123`, Each repository can configure (local config file) its own `jira_base_url` to choose which server to use by default.
**Example Configuration:**
```toml
[jira]
# Server URLs
jira_servers = ["https://server1.jira.com", "https://server2.jira.com"]
# PAT tokens only
jira_api_token = ["pat_token_1", "pat_token_2"]
# Default server for ticket IDs
jira_base_url = "https://server1.jira.com"
```
**Mixed Authentication (Email/Token + PAT):**
```toml
[jira]
jira_servers = ["https://company.atlassian.net", "https://server.jira.com"]
jira_api_token = ["cloud_api_token", "server_pat_token"]
jira_api_email = ["user@company.com", ""] # Empty for PAT
```
=== "Jira Cloud App"
For Jira Cloud instances using App Authentication:
1. Install the Qodo Merge app on each JIRA Cloud instance you want to connect to
2. Set the default server for ticket ID resolution:
```toml
[jira]
jira_base_url = "https://primary-team.atlassian.net"
```
Full URLs (e.g., `https://other-team.atlassian.net/browse/TASK-456`) will automatically use the correct connected instance.
### How to link a PR to a Jira ticket
To integrate with Jira, you can link your PR to a ticket using either of these methods:
**Method 1: Description Reference:**
Include a ticket reference in your PR description, using either the complete URL format `https://<JIRA_ORG>.atlassian.net/browse/ISSUE-123` or the shortened ticket ID `ISSUE-123` (without prefix or suffix for the shortened ID).
**Method 2: Branch Name Detection:**
Name your branch with the ticket ID as a prefix (e.g., `ISSUE-123-feature-description` or `ISSUE-123/feature-description`).
!!! note "Jira Base URL"
For shortened ticket IDs or branch detection (method 2 for JIRA cloud), you must configure the Jira base URL in your configuration file under the [jira] section:
```toml
[jira]
jira_base_url = "https://<JIRA_ORG>.atlassian.net"
```
Where `<JIRA_ORG>` is your Jira organization identifier (e.g., `mycompany` for `https://mycompany.atlassian.net`).
## Linear Integration 💎
### Linear App Authentication
The recommended way to authenticate with Linear is to connect the Linear app through the Qodo Merge portal.
Installation steps:
1. Go to the [Qodo Merge integrations page](https://app.qodo.ai/qodo-merge/integrations)
2. Navigate to the **Integrations** tab
3. Click on the **Linear** button to connect the Linear app
4. Follow the authentication flow to authorize Qodo Merge to access your Linear workspace
5. Once connected, Qodo Merge will be able to fetch Linear ticket context for your PRs
### How to link a PR to a Linear ticket
Qodo Merge will automatically detect Linear tickets using either of these methods:
**Method 1: Description Reference:**
Include a ticket reference in your PR description using either:
- The complete Linear ticket URL: `https://linear.app/[ORG_ID]/issue/[TICKET_ID]`
- The shortened ticket ID: `[TICKET_ID]` (e.g., `ABC-123`) - requires linear_base_url configuration (see below).
**Method 2: Branch Name Detection:**
Name your branch with the ticket ID as a prefix (e.g., `ABC-123-feature-description` or `feature/ABC-123/feature-description`).
!!! note "Linear Base URL"
For shortened ticket IDs or branch detection (method 2), you must configure the Linear base URL in your configuration file under the [linear] section:
```toml
[linear]
linear_base_url = "https://linear.app/[ORG_ID]"
```
Replace `[ORG_ID]` with your Linear organization identifier.

View File

@ -1,24 +1,28 @@
# Overview - Impact Evaluation 💎
# Impact Evaluation 💎
`Supported Git Platforms: GitHub, GitLab, Bitbucket`
Demonstrating the return on investment (ROI) of AI-powered initiatives is crucial for modern organizations.
To address this need, Qodo Merge has developed an AI impact measurement tools and metrics, providing advanced analytics to help businesses quantify the tangible benefits of AI adoption in their PR review process.
## Auto Impact Validator - Real-Time Tracking of Implemented Qodo Merge Suggestions
### How It Works
When a user pushes a new commit to the pull request, Qodo Merge automatically compares the updated code against the previous suggestions, marking them as implemented if the changes address these recommendations, whether directly or indirectly:
1. **Direct Implementation:** The user directly addresses the suggestion as-is in the PR, either by clicking on the "apply code suggestion" checkbox or by making the changes manually.
2. **Indirect Implementation:** Qodo Merge recognizes when a suggestion's intent is fulfilled, even if the exact code changes differ from the original recommendation. It marks these suggestions as implemented, acknowledging that users may achieve the same goal through alternative solutions.
### Real-Time Visual Feedback
Upon confirming that a suggestion was implemented, Qodo Merge automatically adds a ✅ (check mark) to the relevant suggestion, enabling transparent tracking of Qodo Merge's impact analysis.
Qodo Merge will also add, inside the relevant suggestions, an explanation of how the new code was impacted by each suggestion.
![Suggestion_checkmark](https://codium.ai/images/pr_agent/auto_suggestion_checkmark.png){width=512}
### Dashboard Metrics
The dashboard provides macro-level insights into the overall impact of Qodo Merge on the pull-request process with key productivity metrics.
By offering clear, data-driven evidence of Qodo Merge's impact, it empowers leadership teams to make informed decisions about the tool's effectiveness and ROI.
@ -26,6 +30,7 @@ By offering clear, data-driven evidence of Qodo Merge's impact, it empowers lead
Here are key metrics that the dashboard tracks:
#### Qodo Merge Impacts per 1K Lines
![Dashboard](https://codium.ai/images/pr_agent/impacts_per_1k_llines.png){width=512}
> Explanation: for every 1K lines of code (additions/edits), Qodo Merge had on average ~X suggestions implemented.
@ -36,9 +41,11 @@ Here are key metrics that the dashboard tracks:
3. **Quantifies Value and ROI:** The metric directly correlates with the value Qodo Merge is providing, showing how frequently it offers improvements relative to the amount of new code being written. This provides a clear, quantifiable way to demonstrate Qodo Merge's return on investment to stakeholders.
#### Suggestion Effectiveness Across Categories
![Impacted_Suggestion_Score](https://codium.ai/images/pr_agent/impact_by_category.png){width=512}
> Explanation: This chart illustrates the distribution of implemented suggestions across different categories, enabling teams to better understand Qodo Merge's impact on various aspects of code quality and development practices.
#### Suggestion Score Distribution
![Impacted_Suggestion_Score](https://codium.ai/images/pr_agent/impacted_score_dist.png){width=512}
> Explanation: The distribution of the suggestion score for the implemented suggestions, ensuring that higher-scored suggestions truly represent more significant improvements.

View File

@ -0,0 +1,33 @@
# Incremental Update 💎
`Supported Git Platforms: GitHub, GitLab (Both cloud & server. For server: Version 17 and above)`
## Overview
The Incremental Update feature helps users focus on feedback for their newest changes, making large PRs more manageable.
### How it works
=== "Update Option on Subsequent Commits"
![code_suggestions_update](https://www.qodo.ai/images/pr_agent/inc_update_before.png){width=512}
=== "Generation of Incremental Update"
![code_suggestions_inc_update_result](https://www.qodo.ai/images/pr_agent/inc_update_shown.png){width=512}
___
Whenever new commits are pushed following a recent code suggestions report for this PR, an Update button appears (as seen above).
Once the user clicks on the button:
- The `improve` tool identifies the new changes (the "delta")
- Provides suggestions on these recent changes
- Combines these suggestions with the overall PR feedback, prioritizing delta-related comments
- Marks delta-related comments with a textual indication followed by an asterisk (*) with a link to this page, so they can easily be identified
### Benefits for Developers
- Focus on what matters: See feedback on newest code first
- Clearer organization: Comments on recent changes are clearly marked
- Better workflow: Address feedback more systematically, starting with recent changes

View File

@ -1,16 +1,21 @@
# Core Abilities
Qodo Merge utilizes a variety of core abilities to provide a comprehensive and efficient code review experience. These abilities include:
- [Fetching ticket context](https://qodo-merge-docs.qodo.ai/core-abilities/fetching_ticket_context/)
- [Local and global metadata](https://qodo-merge-docs.qodo.ai/core-abilities/metadata/)
- [Dynamic context](https://qodo-merge-docs.qodo.ai/core-abilities/dynamic_context/)
- [Self-reflection](https://qodo-merge-docs.qodo.ai/core-abilities/self_reflection/)
- [Impact evaluation](https://qodo-merge-docs.qodo.ai/core-abilities/impact_evaluation/)
- [Interactivity](https://qodo-merge-docs.qodo.ai/core-abilities/interactivity/)
- [Auto approval](https://qodo-merge-docs.qodo.ai/core-abilities/auto_approval/)
- [Auto best practices](https://qodo-merge-docs.qodo.ai/core-abilities/auto_best_practices/)
- [Chat on code suggestions](https://qodo-merge-docs.qodo.ai/core-abilities/chat_on_code_suggestions/)
- [Code validation](https://qodo-merge-docs.qodo.ai/core-abilities/code_validation/)
- [Compression strategy](https://qodo-merge-docs.qodo.ai/core-abilities/compression_strategy/)
- [Code-oriented YAML](https://qodo-merge-docs.qodo.ai/core-abilities/code_oriented_yaml/)
- [Dynamic context](https://qodo-merge-docs.qodo.ai/core-abilities/dynamic_context/)
- [Fetching ticket context](https://qodo-merge-docs.qodo.ai/core-abilities/fetching_ticket_context/)
- [Impact evaluation](https://qodo-merge-docs.qodo.ai/core-abilities/impact_evaluation/)
- [Incremental Update](https://qodo-merge-docs.qodo.ai/core-abilities/incremental_update/)
- [Interactivity](https://qodo-merge-docs.qodo.ai/core-abilities/interactivity/)
- [Local and global metadata](https://qodo-merge-docs.qodo.ai/core-abilities/metadata/)
- [RAG context enrichment](https://qodo-merge-docs.qodo.ai/core-abilities/rag_context_enrichment/)
- [Self-reflection](https://qodo-merge-docs.qodo.ai/core-abilities/self_reflection/)
- [Static code analysis](https://qodo-merge-docs.qodo.ai/core-abilities/static_code_analysis/)
- [Code fine-tuning benchmark](https://qodo-merge-docs.qodo.ai/finetuning_benchmark/)
## Blogs
@ -18,12 +23,16 @@ Here are some additional technical blogs from Qodo, that delve deeper into the c
These resources provide more comprehensive insights into leveraging LLMs for software development.
### Code Generation and LLMs
- [Effective AI code suggestions: less is more](https://www.qodo.ai/blog/effective-code-suggestions-llms-less-is-more/)
- [State-of-the-art Code Generation with AlphaCodium From Prompt Engineering to Flow Engineering](https://www.qodo.ai/blog/qodoflow-state-of-the-art-code-generation-for-code-contests/)
- [RAG for a Codebase with 10k Repos](https://www.qodo.ai/blog/rag-for-large-scale-code-repos/)
### Development Processes
- [Understanding the Challenges and Pain Points of the Pull Request Cycle](https://www.qodo.ai/blog/understanding-the-challenges-and-pain-points-of-the-pull-request-cycle/)
- [Introduction to Code Coverage Testing](https://www.qodo.ai/blog/introduction-to-code-coverage-testing/)
### Cost Optimization
- [Reduce Your Costs by 30% When Using GPT for Python Code](https://www.qodo.ai/blog/reduce-your-costs-by-30-when-using-gpt-3-for-python-code/)

View File

@ -1,2 +1,41 @@
## Interactive invocation 💎
TBD
# Interactivity 💎
`Supported Git Platforms: GitHub, GitLab`
## Overview
Qodo Merge transforms static code reviews into interactive experiences by enabling direct actions from pull request (PR) comments.
Developers can immediately trigger actions and apply changes with simple checkbox clicks.
This focused workflow maintains context while dramatically reducing the time between PR creation and final merge.
The approach eliminates manual steps, provides clear visual indicators, and creates immediate feedback loops all within the same interface.
## Key Interactive Features
### 1\. Interactive `/improve` Tool
The [`/improve`](https://qodo-merge-docs.qodo.ai/tools/improve/) command delivers a comprehensive interactive experience:
- _**Apply this suggestion**_: Clicking this checkbox instantly converts a suggestion into a committable code change. When committed to the PR, changes made to code that was flagged for improvement will be marked with a check mark, allowing developers to easily track and review implemented recommendations.
- _**More**_: Triggers additional suggestions generation while keeping each suggestion focused and relevant as the original set
- _**Update**_: Triggers a re-analysis of the code, providing updated suggestions based on the latest changes
- _**Author self-review**_: Interactive acknowledgment that developers have opened and reviewed collapsed suggestions
### 2\. Interactive `/analyze` Tool
The [`/analyze`](https://qodo-merge-docs.qodo.ai/tools/analyze/) command provides component-level analysis with interactive options for each identified code component:
- Interactive checkboxes to generate tests, documentation, and code suggestions for specific components
- On-demand similar code search that activates when a checkbox is clicked
- Component-specific actions that trigger only for the selected elements, providing focused assistance
### 3\. Interactive `/help` Tool
The [`/help`](https://qodo-merge-docs.qodo.ai/tools/help/) command not only lists available tools and their descriptions but also enables immediate tool invocation through interactive checkboxes.
When a user checks a tool's checkbox, Qodo Merge instantly triggers that tool without requiring additional commands.
This transforms the standard help menu into an interactive launch pad for all Qodo Merge capabilities, eliminating context switching by keeping developers within their PR workflow.

View File

@ -1,5 +1,8 @@
## Local and global metadata injection with multi-stage analysis
(1)
# Local and global metadata injection with multi-stage analysis
`Supported Git Platforms: GitHub, GitLab, Bitbucket`
1\.
Qodo Merge initially retrieves for each PR the following data:
- PR title and branch name
@ -11,7 +14,7 @@ Qodo Merge initially retrieves for each PR the following data:
!!! tip "Tip: Organization-level metadata"
In addition to the inputs above, Qodo Merge can incorporate supplementary preferences provided by the user, like [`extra_instructions` and `organization best practices`](https://qodo-merge-docs.qodo.ai/tools/improve/#extra-instructions-and-best-practices). This information can be used to enhance the PR analysis.
(2)
2\.
By default, the first command that Qodo Merge executes is [`describe`](https://qodo-merge-docs.qodo.ai/tools/describe/), which generates three types of outputs:
- PR Type (e.g. bug fix, feature, refactor, etc)
@ -23,7 +26,7 @@ This effectively enables multi-stage chain-of-thought analysis, without doing an
For example, when generating code suggestions for different files, Qodo Merge can inject the AI-generated ["Changes walkthrough"](https://github.com/Codium-ai/pr-agent/pull/1202#issue-2511546839) file summary in the prompt:
```
```diff
## File: 'src/file1.py'
### AI-generated file summary:
- edited function `func1` that does X
@ -32,14 +35,14 @@ For example, when generating code suggestions for different files, Qodo Merge ca
@@ ... @@ def func1():
__new hunk__
11 unchanged code line0 in the PR
12 unchanged code line1 in the PR
13 +new code line2 added in the PR
14 unchanged code line3 in the PR
11 unchanged code line0
12 unchanged code line1
13 +new code line2 added
14 unchanged code line3
__old hunk__
unchanged code line0
unchanged code line1
-old code line2 removed in the PR
-old code line2 removed
unchanged code line3
@@ ... @@ def func2():
@ -49,8 +52,7 @@ __old hunk__
...
```
(3) The entire PR files that were retrieved are also used to expand and enhance the PR context (see [Dynamic Context](https://qodo-merge-docs.qodo.ai/core-abilities/dynamic_context/)).
3\. The entire PR files that were retrieved are also used to expand and enhance the PR context (see [Dynamic Context](https://qodo-merge-docs.qodo.ai/core-abilities/dynamic_context/)).
(4) All the metadata described above represents several level of cumulative analysis - ranging from hunk level, to file level, to PR level, to organization level.
4\. All the metadata described above represents several level of cumulative analysis - ranging from hunk level, to file level, to PR level, to organization level.
This comprehensive approach enables Qodo Merge AI models to generate more precise and contextually relevant suggestions and feedback.

View File

@ -0,0 +1,77 @@
# RAG Context Enrichment 💎
`Supported Git Platforms: GitHub, Bitbucket Data Center`
!!! info "Prerequisites"
- RAG is available only for Qodo enterprise plan users, with single tenant or on-premises setup.
- Database setup and codebase indexing must be completed before proceeding. [Contact support](https://www.qodo.ai/contact/) for more information.
## Overview
### What is RAG Context Enrichment?
A feature that enhances AI analysis by retrieving and referencing relevant code patterns from your project, enabling context-aware insights during code reviews.
### How does RAG Context Enrichment work?
Using Retrieval-Augmented Generation (RAG), it searches your configured repositories for contextually relevant code segments, enriching pull request (PR) insights and accelerating review accuracy.
## Getting started
### Configuration options
In order to enable the RAG feature, add the following lines to your configuration file:
```toml
[rag_arguments]
enable_rag=true
```
???+ example "RAG Arguments Options"
<table>
<tr>
<td><b>enable_rag</b></td>
<td>If set to true, repository enrichment using RAG will be enabled. Default is false.</td>
</tr>
<tr>
<td><b>rag_repo_list</b></td>
<td>A list of repositories that will be used by the semantic search for RAG. Use `['all']` to consider the entire codebase or a select list of repositories, for example: ['my-org/my-repo', ...]. Default: the repository from which the PR was opened.</td>
</tr>
</table>
### Applications
RAG capability is exclusively available in the following tools:
=== "`/review`"
The [`/review`](https://qodo-merge-docs.qodo.ai/tools/review/) tool offers the _Focus area from RAG data_ which contains feedback based on the RAG references analysis.
The complete list of references found relevant to the PR will be shown in the _References_ section, helping developers understand the broader context by exploring the provided references.
![RAGed review tool](https://codium.ai/images/pr_agent/rag_review.png){width=640}
=== "`/implement`"
The [`/implement`](https://qodo-merge-docs.qodo.ai/tools/implement/) tool utilizes the RAG feature to provide comprehensive context of the repository codebase, allowing it to generate more refined code output.
The _References_ section contains links to the content used to support the code generation.
![RAGed implement tool](https://codium.ai/images/pr_agent/rag_implement.png){width=640}
=== "`/ask`"
The [`/ask`](https://qodo-merge-docs.qodo.ai/tools/ask/) tool can access broader repository context through the RAG feature when answering questions that go beyond the PR scope alone.
The _References_ section displays the additional repository content consulted to formulate the answer.
![RAGed ask tool](https://codium.ai/images/pr_agent/rag_ask.png){width=640}
## Limitations
### Querying the codebase presents significant challenges
- **Search Method**: RAG uses natural language queries to find semantically relevant code sections
- **Result Quality**: No guarantee that RAG results will be useful for all queries
- **Scope Recommendation**: To reduce noise, focus on the PR repository rather than searching across multiple repositories
### This feature has several requirements and restrictions
- **Codebase**: Must be properly indexed for search functionality
- **Security**: Requires secure and private indexed codebase implementation
- **Deployment**: Only available for Qodo Merge Enterprise plan using single tenant or on-premises setup

View File

@ -1,4 +1,4 @@
## TL;DR
`Supported Git Platforms: GitHub, GitLab, Bitbucket`
Qodo Merge implements a **self-reflection** process where the AI model reflects, scores, and re-ranks its own suggestions, eliminating irrelevant or incorrect ones.
This approach improves the quality and relevance of suggestions, saving users time and enhancing their experience.
@ -6,7 +6,6 @@ Configuration options allow users to set a score threshold for further filtering
## Introduction - Efficient Review with Hierarchical Presentation
Given that not all generated code suggestions will be relevant, it is crucial to enable users to review them in a fast and efficient way, allowing quick identification and filtering of non-applicable ones.
To achieve this goal, Qodo Merge offers a dedicated hierarchical structure when presenting suggestions to users:
@ -42,9 +41,9 @@ This results in a more refined and valuable set of suggestions for the user, sav
![self_reflection](https://codium.ai/images/pr_agent/self_reflection1.png){width=768}
![self_reflection](https://codium.ai/images/pr_agent/self_reflection2.png){width=768}
## Appendix - Relevant Configuration Options
```
```toml
[pr_code_suggestions]
suggestions_score_threshold = 0 # Filter out suggestions with a score below this threshold (0-10)
suggestions_score_threshold = 0 # Filter out suggestions with a score below this threshold (0-10)
```

View File

@ -1,20 +1,22 @@
## Overview - Static Code Analysis 💎
# Static Code Analysis 💎
` Supported Git Platforms: GitHub, GitLab, Bitbucket`
By combining static code analysis with LLM capabilities, Qodo Merge can provide a comprehensive analysis of the PR code changes on a component level.
It scans the PR code changes, finds all the code components (methods, functions, classes) that changed, and enables to interactively generate tests, docs, code suggestions and similar code search for each component.
!!! note "Language that are currently supported:"
Python, Java, C++, JavaScript, TypeScript, C#.
Python, Java, C++, JavaScript, TypeScript, C#, Go.
## Capabilities
### Analyze PR
The [`analyze`](https://qodo-merge-docs.qodo.ai/tools/analyze/) tool enables to interactively generate tests, docs, code suggestions and similar code search for each component that changed in the PR.
It can be invoked manually by commenting on any PR:
```
/analyze
```
@ -29,9 +31,11 @@ Clicking on each checkbox will trigger the relevant tool for the selected compon
The [`test`](https://qodo-merge-docs.qodo.ai/tools/test/) tool generate tests for a selected component, based on the PR code changes.
It can be invoked manually by commenting on any PR:
```
/test component_name
```
where 'component_name' is the name of a specific component in the PR, Or be triggered interactively by using the `analyze` tool.
![test1](https://codium.ai/images/pr_agent/test1.png){width=768}
@ -40,6 +44,7 @@ where 'component_name' is the name of a specific component in the PR, Or be tri
The [`add_docs`](https://qodo-merge-docs.qodo.ai/tools/documentation/) tool scans the PR code changes, and automatically generate docstrings for any code components that changed in the PR.
It can be invoked manually by commenting on any PR:
```
/add_docs component_name
```
@ -49,8 +54,10 @@ Or be triggered interactively by using the `analyze` tool.
![Docs single component](https://codium.ai/images/pr_agent/docs_single_component.png){width=768}
### Generate Code Suggestions for a Component
The [`improve_component`](https://qodo-merge-docs.qodo.ai/tools/improve_component/) tool generates code suggestions for a specific code component that changed in the PR.
It can be invoked manually by commenting on any PR:
```
/improve_component component_name
```
@ -61,7 +68,7 @@ Or be triggered interactively by using the `analyze` tool.
### Find Similar Code
The [`similar code`](https://qodo-merge-docs.qodo.ai/tools/similar_code/) tool retrieves the most similar code components from inside the organization's codebase, or from open-source code.
The [`similar code`](https://qodo-merge-docs.qodo.ai/tools/similar_code/) tool retrieves the most similar code components from inside the organization's codebase or from open-source code, including details about the license associated with each repository.
For example:

View File

@ -1,6 +1,6 @@
# FAQ
??? note "Question: Can Qodo Merge serve as a substitute for a human reviewer?"
??? note "Q: Can Qodo Merge serve as a substitute for a human reviewer?"
#### Answer:<span style="display:none;">1</span>
Qodo Merge is designed to assist, not replace, human reviewers.
@ -12,7 +12,7 @@
1. Preserves user's original PR header
2. Places user's description above the AI-generated PR description
3. Cannot approve PRs; approval remains reviewer's responsibility
3. Won't approve PRs; approval remains reviewer's responsibility
4. The code suggestions are optional, and aim to:
- Encourage self-review and self-reflection
- Highlight potential bugs or oversights
@ -22,15 +22,15 @@
___
??? note "Question: I received an incorrect or irrelevant suggestion. Why?"
??? note "Q: I received an incorrect or irrelevant suggestion. Why?"
#### Answer:<span style="display:none;">2</span>
- Modern AI models, like Claude 3.5 Sonnet and GPT-4, are improving rapidly but remain imperfect. Users should critically evaluate all suggestions rather than accepting them automatically.
- AI errors are rare, but possible. A main value from reviewing the code suggestions lies in their high probability of catching **mistakes or bugs made by the PR author**. We believe it's worth spending 30-60 seconds reviewing suggestions, even if some aren't relevant, as this practice can enhances code quality and prevent bugs in production.
- Modern AI models, like Claude Sonnet and GPT-4, are improving rapidly but remain imperfect. Users should critically evaluate all suggestions rather than accepting them automatically.
- AI errors are rare, but possible. A main value from reviewing the code suggestions lies in their high probability of catching **mistakes or bugs made by the PR author**. We believe it's worth spending 30-60 seconds reviewing suggestions, even if some aren't relevant, as this practice can enhance code quality and prevent bugs in production.
- The hierarchical structure of the suggestions is designed to help the user to _quickly_ understand them, and to decide which ones are relevant and which are not:
- The hierarchical structure of the suggestions is designed to help the user _quickly_ understand them, and to decide which ones are relevant and which are not:
- Only if the `Category` header is relevant, the user should move to the summarized suggestion description.
- Only if the summarized suggestion description is relevant, the user should click on the collapsible, to read the full suggestion description with a code preview example.
@ -40,14 +40,14 @@ ___
___
??? note "Question: How can I get more tailored suggestions?"
??? note "Q: How can I get more tailored suggestions?"
#### Answer:<span style="display:none;">3</span>
See [here](https://qodo-merge-docs.qodo.ai/tools/improve/#extra-instructions-and-best-practices) for more information on how to use the `extra_instructions` and `best_practices` configuration options, to guide the model to more tailored suggestions.
___
??? note "Question: Will you store my code ? Are you using my code to train models?"
??? note "Q: Will you store my code? Are you using my code to train models?"
#### Answer:<span style="display:none;">4</span>
No. Qodo Merge strict privacy policy ensures that your code is not stored or used for training purposes.
@ -56,12 +56,35 @@ ___
___
??? note "Question: Can I use my own LLM keys with Qodo Merge?"
??? note "Q: Can I use my own LLM keys with Qodo Merge?"
#### Answer:<span style="display:none;">5</span>
When you self-host, you use your own keys.
When you self-host the [open-source](https://github.com/Codium-ai/pr-agent) version, you use your own keys.
Qodo Merge Pro with SaaS deployment is a hosted version of Qodo Merge, where Qodo manages the infrastructure and the keys.
Qodo Merge with SaaS deployment is a hosted version of Qodo Merge, where Qodo manages the infrastructure and the keys.
For enterprise customers, on-prem deployment is also available. [Contact us](https://www.codium.ai/contact/#pricing) for more information.
___
??? note "Q: Can Qodo Merge review draft/offline PRs?"
#### Answer:<span style="display:none;">5</span>
Yes. While Qodo Merge won't automatically review draft PRs, you can still get feedback by manually requesting it through [online commenting](https://qodo-merge-docs.qodo.ai/usage-guide/automations_and_usage/#online-usage).
For active PRs, you can customize the automatic feedback settings [here](https://qodo-merge-docs.qodo.ai/usage-guide/automations_and_usage/#qodo-merge-automatic-feedback) to match your team's workflow.
___
??? note "Q: Can the 'Review effort' feedback be calibrated or customized?"
#### Answer:<span style="display:none;">5</span>
Yes, you can customize review effort estimates using the `extra_instructions` configuration option (see [documentation](https://qodo-merge-docs.qodo.ai/tools/review/#configuration-options)).
Example mapping:
- Effort 1: < 30 minutes review time
- Effort 2: 30-60 minutes review time
- Effort 3: 60-90 minutes review time
- ...
Note: The effort levels (1-5) are primarily meant for _comparative_ purposes, helping teams prioritize reviewing smaller PRs first. The actual review duration may vary, as the focus is on providing consistent relative effort estimates.
___

View File

@ -1,93 +0,0 @@
# Qodo Merge Code Fine-tuning Benchmark
On coding tasks, the gap between open-source models and top closed-source models such as GPT4 is significant.
<br>
In practice, open-source models are unsuitable for most real-world code tasks, and require further fine-tuning to produce acceptable results.
_Qodo Merge fine-tuning benchmark_ aims to benchmark open-source models on their ability to be fine-tuned for a coding task.
Specifically, we chose to fine-tune open-source models on the task of analyzing a pull request, and providing useful feedback and code suggestions.
Here are the results:
<br>
<br>
**Model performance:**
| Model name | Model size [B] | Better than gpt-4 rate, after fine-tuning [%] |
|-----------------------------|----------------|----------------------------------------------|
| **DeepSeek 34B-instruct** | **34** | **40.7** |
| DeepSeek 34B-base | 34 | 38.2 |
| Phind-34b | 34 | 38 |
| Granite-34B | 34 | 37.6 |
| Codestral-22B-v0.1 | 22 | 32.7 |
| QWEN-1.5-32B | 32 | 29 |
| | | |
| **CodeQwen1.5-7B** | **7** | **35.4** |
| Llama-3.1-8B-Instruct | 8 | 35.2 |
| Granite-8b-code-instruct | 8 | 34.2 |
| CodeLlama-7b-hf | 7 | 31.8 |
| Gemma-7B | 7 | 27.2 |
| DeepSeek coder-7b-instruct | 7 | 26.8 |
| Llama-3-8B-Instruct | 8 | 26.8 |
| Mistral-7B-v0.1 | 7 | 16.1 |
<br>
**Fine-tuning impact:**
| Model name | Model size [B] | Fine-tuned | Better than gpt-4 rate [%] |
|---------------------------|----------------|------------|----------------------------|
| DeepSeek 34B-instruct | 34 | yes | 40.7 |
| DeepSeek 34B-instruct | 34 | no | 3.6 |
## Results analysis
- **Fine-tuning is a must** - without fine-tuning, open-source models provide poor results on most real-world code tasks, which include complicated prompt and lengthy context. We clearly see that without fine-tuning, deepseek model was 96.4% of the time inferior to GPT-4, while after fine-tuning, it is better 40.7% of the time.
- **Always start from a code-dedicated model** — When fine-tuning, always start from a code-dedicated model, and not from a general-usage model. The gaps in downstream results are very big.
- **Don't believe the hype** —newer models, or models from big-tech companies (Llama3, Gemma, Mistral), are not always better for fine-tuning.
- **The best large model** - For large 34B code-dedicated models, the gaps when doing proper fine-tuning are small. The current top model is **DeepSeek 34B-instruct**
- **The best small model** - For small 7B code-dedicated models, the gaps when fine-tuning are much larger. **CodeQWEN 1.5-7B** is by far the best model for fine-tuning.
- **Base vs. instruct** - For the top model (deepseek), we saw small advantage when starting from the instruct version. However, we recommend testing both versions on each specific task, as the base model is generally considered more suitable for fine-tuning.
## The dataset
### Training dataset
Our training dataset comprises 25,000 pull requests, aggregated from permissive license repos. For each pull request, we generated responses for the three main tools of Qodo Merge:
[Describe](https://qodo-merge-docs.qodo.ai/tools/describe/), [Review](https://qodo-merge-docs.qodo.ai/tools/improve/) and [Improve](https://qodo-merge-docs.qodo.ai/tools/improve/).
On the raw data collected, we employed various automatic and manual cleaning techniques to ensure the outputs were of the highest quality, and suitable for instruct-tuning.
Here are the prompts, and example outputs, used as input-output pairs to fine-tune the models:
| Tool | Prompt | Example output |
|----------|------------------------------------------------------------------------------------------------------------|----------------|
| Describe | [link](https://github.com/Codium-ai/pr-agent/blob/main/pr_agent/settings/pr_description_prompts.toml) | [link](https://github.com/Codium-ai/pr-agent/pull/910#issue-2303989601) |
| Review | [link](https://github.com/Codium-ai/pr-agent/blob/main/pr_agent/settings/pr_reviewer_prompts.toml) | [link](https://github.com/Codium-ai/pr-agent/pull/910#issuecomment-2118761219) |
| Improve | [link](https://github.com/Codium-ai/pr-agent/blob/main/pr_agent/settings/pr_code_suggestions_prompts.toml) | [link](https://github.com/Codium-ai/pr-agent/pull/910#issuecomment-2118761309) |
### Evaluation dataset
- For each tool, we aggregated 100 additional examples to be used for evaluation. These examples were not used in the training dataset, and were manually selected to represent diverse real-world use-cases.
- For each test example, we generated two responses: one from the fine-tuned model, and one from the best code model in the world, `gpt-4-turbo-2024-04-09`.
- We used a third LLM to judge which response better answers the prompt, and will likely be perceived by a human as better response.
<br>
We experimented with three model as judges: `gpt-4-turbo-2024-04-09`, `gpt-4o`, and `claude-3-opus-20240229`. All three produced similar results, with the same ranking order. This strengthens the validity of our testing protocol.
The evaluation prompt can be found [here](https://github.com/Codium-ai/pr-agent/blob/main/pr_agent/settings/pr_evaluate_prompt_response.toml)
Here is an example of a judge model feedback:
```
command: improve
model1_score: 9,
model2_score: 6,
why: |
Response 1 is better because it provides more actionable and specific suggestions that directly
enhance the code's maintainability, performance, and best practices. For example, it suggests
using a variable for reusable widget instances and using named routes for navigation, which
are practical improvements. In contrast, Response 2 focuses more on general advice and less
actionable suggestions, such as changing variable names and adding comments, which are less
critical for immediate code improvement."
```

View File

@ -1,15 +1,17 @@
# Overview
Qodo Merge is an open-source tool to help efficiently review and handle pull requests.
[PR-Agent](https://github.com/Codium-ai/pr-agent) is an open-source tool to help efficiently review and handle pull requests.
Qodo Merge is a hosted version of PR-Agent, designed for companies and teams that require additional features and capabilities
- See the [Installation Guide](./installation/index.md) for instructions on installing and running the tool on different git platforms.
- See the [Usage Guide](./usage-guide/index.md) for instructions on running the Qodo Merge commands via different interfaces, including _CLI_, _online usage_, or by _automatically triggering_ them when a new PR is opened.
- See the [Usage Guide](./usage-guide/index.md) for instructions on running commands via different interfaces, including _CLI_, _online usage_, or by _automatically triggering_ them when a new PR is opened.
- See the [Tools Guide](./tools/index.md) for a detailed description of the different tools.
- See the [Video Tutorials](https://www.youtube.com/playlist?list=PLRTpyDOSgbwFMA_VBeKMnPLaaZKwjGBFT) for practical demonstrations on how to use the tools.
## Qodo Merge Docs Smart Search
## Docs Smart Search
To search the documentation site using natural language:
@ -18,67 +20,88 @@ To search the documentation site using natural language:
- A pull request where Qodo Merge is installed
- A [PR Chat](https://qodo-merge-docs.qodo.ai/chrome-extension/features/#pr-chat)
2) Qodo Merge will respond with an [answer](https://github.com/Codium-ai/pr-agent/pull/1241#issuecomment-2365259334) that includes relevant documentation links.
2) The bot will respond with an [answer](https://github.com/Codium-ai/pr-agent/pull/1241#issuecomment-2365259334) that includes relevant documentation links.
## Features
## Qodo Merge Features
Qodo Merge offers extensive pull request functionalities across various git providers.
| | | GitHub | Gitlab | Bitbucket | Azure DevOps |
|-------|-----------------------------------------------------------------------------------------------------------------------|:------:|:------:|:---------:|:------------:|
| TOOLS | Review | ✅ | ✅ | ✅ | ✅ |
| | ⮑ Incremental | ✅ | | | |
| | Ask | ✅ | ✅ | ✅ | ✅ |
| | Describe | ✅ | ✅ | ✅ | ✅ |
| | ⮑ [Inline file summary](https://qodo-merge-docs.qodo.ai/tools/describe/#inline-file-summary){:target="_blank"} 💎 | ✅ | ✅ | | |
| | Improve | ✅ | ✅ | ✅ | ✅ |
| | ⮑ Extended | ✅ | ✅ | ✅ | ✅ |
| | [Custom Prompt](./tools/custom_prompt.md){:target="_blank"} 💎 | ✅ | ✅ | ✅ | |
| | Reflect and Review | ✅ | ✅ | ✅ | |
| | Update CHANGELOG.md | ✅ | ✅ | ✅ | |
| | Find Similar Issue | ✅ | | | |
| | [Add PR Documentation](./tools/documentation.md){:target="_blank"} 💎 | ✅ | ✅ | | |
| | [Generate Custom Labels](./tools/describe.md#handle-custom-labels-from-the-repos-labels-page-💎){:target="_blank"} 💎 | ✅ | ✅ | | |
| | [Analyze PR Components](./tools/analyze.md){:target="_blank"} 💎 | ✅ | ✅ | | |
| | | | | | |
| USAGE | CLI | ✅ | ✅ | ✅ | ✅ |
| | App / webhook | ✅ | ✅ | ✅ | ✅ |
| | Actions | ✅ | | | |
| | | | | |
| CORE | PR compression | ✅ | ✅ | ✅ | ✅ |
| | Repo language prioritization | ✅ | ✅ | ✅ | ✅ |
| | Adaptive and token-aware file patch fitting | ✅ | ✅ | ✅ | ✅ |
| | Multiple models support | ✅ | ✅ | ✅ | ✅ |
| | Incremental PR review | ✅ | | | |
| | [Static code analysis](./tools/analyze.md/){:target="_blank"} 💎 | ✅ | ✅ | ✅ | |
| | [Multiple configuration options](./usage-guide/configuration_options.md){:target="_blank"} 💎 | ✅ | ✅ | ✅ | |
💎 marks a feature available only in [Qodo Merge Pro](https://www.codium.ai/pricing/){:target="_blank"}
PR-Agent and Qodo Merge offers extensive pull request functionalities across various git providers:
| | | GitHub | GitLab | Bitbucket | Azure DevOps | Gitea |
| ----- |---------------------------------------------------------------------------------------------------------------------|:------:|:------:|:---------:|:------------:|:-----:|
| [TOOLS](https://qodo-merge-docs.qodo.ai/tools/) | [Describe](https://qodo-merge-docs.qodo.ai/tools/describe/) | ✅ | ✅ | ✅ | ✅ | ✅ |
| | [Review](https://qodo-merge-docs.qodo.ai/tools/review/) | ✅ | ✅ | ✅ | ✅ | ✅ |
| | [Improve](https://qodo-merge-docs.qodo.ai/tools/improve/) | ✅ | ✅ | ✅ | ✅ | ✅ |
| | [Ask](https://qodo-merge-docs.qodo.ai/tools/ask/) | ✅ | ✅ | ✅ | ✅ | |
| | ⮑ [Ask on code lines](https://qodo-merge-docs.qodo.ai/tools/ask/#ask-lines) | ✅ | ✅ | | | |
| | [Help Docs](https://qodo-merge-docs.qodo.ai/tools/help_docs/?h=auto#auto-approval) | ✅ | ✅ | ✅ | | |
| | [Update CHANGELOG](https://qodo-merge-docs.qodo.ai/tools/update_changelog/) | ✅ | ✅ | ✅ | ✅ | |
| | [Add Documentation](https://qodo-merge-docs.qodo.ai/tools/documentation/) 💎 | ✅ | ✅ | | | |
| | [Analyze](https://qodo-merge-docs.qodo.ai/tools/analyze/) 💎 | ✅ | ✅ | | | |
| | [Auto-Approve](https://qodo-merge-docs.qodo.ai/tools/improve/?h=auto#auto-approval) 💎 | ✅ | ✅ | ✅ | | |
| | [CI Feedback](https://qodo-merge-docs.qodo.ai/tools/ci_feedback/) 💎 | ✅ | | | | |
| | [Custom Prompt](https://qodo-merge-docs.qodo.ai/tools/custom_prompt/) 💎 | ✅ | ✅ | ✅ | | |
| | [Generate Custom Labels](https://qodo-merge-docs.qodo.ai/tools/custom_labels/) 💎 | ✅ | ✅ | | | |
| | [Generate Tests](https://qodo-merge-docs.qodo.ai/tools/test/) 💎 | ✅ | ✅ | | | |
| | [Implement](https://qodo-merge-docs.qodo.ai/tools/implement/) 💎 | ✅ | ✅ | ✅ | | |
| | [Scan Repo Discussions](https://qodo-merge-docs.qodo.ai/tools/scan_repo_discussions/) 💎 | ✅ | | | | |
| | [Similar Code](https://qodo-merge-docs.qodo.ai/tools/similar_code/) 💎 | ✅ | | | | |
| | [Ticket Context](https://qodo-merge-docs.qodo.ai/core-abilities/fetching_ticket_context/) 💎 | ✅ | ✅ | ✅ | | |
| | [Utilizing Best Practices](https://qodo-merge-docs.qodo.ai/tools/improve/#best-practices) 💎 | ✅ | ✅ | ✅ | | |
| | [PR Chat](https://qodo-merge-docs.qodo.ai/chrome-extension/features/#pr-chat) 💎 | ✅ | | | | |
| | [Suggestion Tracking](https://qodo-merge-docs.qodo.ai/tools/improve/#suggestion-tracking) 💎 | ✅ | ✅ | | | |
| | | | | | | |
| [USAGE](https://qodo-merge-docs.qodo.ai/usage-guide/) | [CLI](https://qodo-merge-docs.qodo.ai/usage-guide/automations_and_usage/#local-repo-cli) | ✅ | ✅ | ✅ | ✅ | ✅ |
| | [App / webhook](https://qodo-merge-docs.qodo.ai/usage-guide/automations_and_usage/#github-app) | ✅ | ✅ | ✅ | ✅ | ✅ |
| | [Tagging bot](https://github.com/Codium-ai/pr-agent#try-it-now) | ✅ | | | | |
| | [Actions](https://qodo-merge-docs.qodo.ai/installation/github/#run-as-a-github-action) | ✅ | ✅ | ✅ | ✅ | |
| | | | | | | |
| [CORE](https://qodo-merge-docs.qodo.ai/core-abilities/) | [Adaptive and token-aware file patch fitting](https://qodo-merge-docs.qodo.ai/core-abilities/compression_strategy/) | ✅ | ✅ | ✅ | ✅ | |
| | [Auto Best Practices 💎](https://qodo-merge-docs.qodo.ai/core-abilities/auto_best_practices/) | ✅ | | | | |
| | [Chat on code suggestions](https://qodo-merge-docs.qodo.ai/core-abilities/chat_on_code_suggestions/) | ✅ | ✅ | | | |
| | [Code Validation 💎](https://qodo-merge-docs.qodo.ai/core-abilities/code_validation/) | ✅ | ✅ | ✅ | ✅ | |
| | [Dynamic context](https://qodo-merge-docs.qodo.ai/core-abilities/dynamic_context/) | ✅ | ✅ | ✅ | ✅ | |
| | [Fetching ticket context](https://qodo-merge-docs.qodo.ai/core-abilities/fetching_ticket_context/) | ✅ | ✅ | ✅ | | |
| | [Global and wiki configurations](https://qodo-merge-docs.qodo.ai/usage-guide/configuration_options/) 💎 | ✅ | ✅ | ✅ | | |
| | [Impact Evaluation](https://qodo-merge-docs.qodo.ai/core-abilities/impact_evaluation/) 💎 | ✅ | ✅ | | | |
| | [Incremental Update 💎](https://qodo-merge-docs.qodo.ai/core-abilities/incremental_update/) | ✅ | | | | |
| | [Interactivity](https://qodo-merge-docs.qodo.ai/core-abilities/interactivity/) | ✅ | ✅ | | | |
| | [Local and global metadata](https://qodo-merge-docs.qodo.ai/core-abilities/metadata/) | ✅ | ✅ | ✅ | ✅ | |
| | [Multiple models support](https://qodo-merge-docs.qodo.ai/usage-guide/changing_a_model/) | ✅ | ✅ | ✅ | ✅ | |
| | [PR compression](https://qodo-merge-docs.qodo.ai/core-abilities/compression_strategy/) | ✅ | ✅ | ✅ | ✅ | |
| | [PR interactive actions](https://www.qodo.ai/images/pr_agent/pr-actions.mp4) 💎 | ✅ | ✅ | | | |
| | [RAG context enrichment](https://qodo-merge-docs.qodo.ai/core-abilities/rag_context_enrichment/) | ✅ | | ✅ | | |
| | [Self reflection](https://qodo-merge-docs.qodo.ai/core-abilities/self_reflection/) | ✅ | ✅ | ✅ | ✅ | |
| | [Static code analysis](https://qodo-merge-docs.qodo.ai/core-abilities/static_code_analysis/) 💎 | ✅ | ✅ | | | |
!!! note "💎 means Qodo Merge only"
All along the documentation, 💎 marks a feature available only in [Qodo Merge](https://www.codium.ai/pricing/){:target="_blank"}, and not in the open-source version.
## Example Results
<hr>
#### [/describe](https://github.com/Codium-ai/pr-agent/pull/530)
<figure markdown="1">
![/describe](https://www.codium.ai/images/pr_agent/describe_new_short_main.png){width=512}
</figure>
<hr>
#### [/review](https://github.com/Codium-ai/pr-agent/pull/732#issuecomment-1975099151)
<figure markdown="1">
![/review](https://www.codium.ai/images/pr_agent/review_new_short_main.png){width=512}
</figure>
<hr>
#### [/improve](https://github.com/Codium-ai/pr-agent/pull/732#issuecomment-1975099159)
<figure markdown="1">
![/improve](https://www.codium.ai/images/pr_agent/improve_new_short_main.png){width=512}
</figure>
<hr>
#### [/generate_labels](https://github.com/Codium-ai/pr-agent/pull/530)
<figure markdown="1">
![/generate_labels](https://www.codium.ai/images/pr_agent/geneare_custom_labels_main_short.png){width=300}
</figure>
@ -90,4 +113,4 @@ The following diagram illustrates Qodo Merge tools and their flow:
![Qodo Merge Tools](https://codium.ai/images/pr_agent/diagram-v0.9.png)
Check out the [core abilities](core-abilities/index.md) page for a comprehensive overview of the variety of core abilities used by Qodo Merge.
Check out the [PR Compression strategy](core-abilities/index.md) page for more details on how we convert a code diff to a manageable LLM prompt

View File

@ -1,6 +1,8 @@
## Azure DevOps Pipeline
You can use a pre-built Action Docker image to run Qodo Merge as an Azure devops pipeline.
You can use a pre-built Action Docker image to run PR-Agent as an Azure devops pipeline.
add the following file to your repository under `azure-pipelines.yml`:
```yaml
# Opt out of CI triggers
trigger: none
@ -49,10 +51,11 @@ stages:
openai__key: $(OPENAI_KEY)
displayName: 'Run Qodo Merge'
```
This script will run Qodo Merge on every new merge request, with the `improve`, `review`, and `describe` commands.
Note that you need to export the `azure_devops__pat` and `OPENAI_KEY` variables in the Azure DevOps pipeline settings (Pipelines -> Library -> + Variable group):
![Qodo Merge Pro](https://codium.ai/images/pr_agent/azure_devops_pipeline_secrets.png){width=468}
![Qodo Merge](https://codium.ai/images/pr_agent/azure_devops_pipeline_secrets.png){width=468}
Make sure to give pipeline permissions to the `pr_agent` variable group.
@ -61,7 +64,8 @@ Make sure to give pipeline permissions to the `pr_agent` variable group.
## Azure DevOps from CLI
To use Azure DevOps provider use the following settings in configuration.toml:
```
```toml
[config]
git_provider="azure"
```
@ -74,22 +78,24 @@ If PAT was chosen, you can assign the value in .secrets.toml.
If DefaultAzureCredential was chosen, you can assigned the additional env vars like AZURE_CLIENT_SECRET directly,
or use managed identity/az cli (for local development) without any additional configuration.
in any case, 'org' value must be assigned in .secrets.toml:
```
```toml
[azure_devops]
org = "https://dev.azure.com/YOUR_ORGANIZATION/"
# pat = "YOUR_PAT_TOKEN" needed only if using PAT for authentication
```
### Azure DevOps Webhook
## Azure DevOps Webhook
To trigger from an Azure webhook, you need to manually [add a webhook](https://learn.microsoft.com/en-us/azure/devops/service-hooks/services/webhooks?view=azure-devops).
Use the "Pull request created" type to trigger a review, or "Pull request commented on" to trigger any supported comment with /<command> <args> comment on the relevant PR. Note that for the "Pull request commented on" trigger, only API v2.0 is supported.
For webhook security, create a sporadic username/password pair and configure the webhook username and password on both the server and Azure DevOps webhook. These will be sent as basic Auth data by the webhook with each request:
```
```toml
[azure_devops_server]
webhook_username = "<basic auth user>"
webhook_password = "<basic auth password>"
```
> :warning: **Ensure that the webhook endpoint is only accessible over HTTPS** to mitigate the risk of credential interception when using basic authentication.

View File

@ -1,7 +1,6 @@
## Run as a Bitbucket Pipeline
You can use the Bitbucket Pipeline system to run Qodo Merge on every pull request open or update.
You can use the Bitbucket Pipeline system to run PR-Agent on every pull request open or update.
1. Add the following file in your repository bitbucket-pipelines.yml
@ -11,27 +10,24 @@ pipelines:
'**':
- step:
name: PR Agent Review
image: python:3.10
services:
- docker
image: codiumai/pr-agent:latest
script:
- docker run -e CONFIG.GIT_PROVIDER=bitbucket -e OPENAI.KEY=$OPENAI_API_KEY -e BITBUCKET.BEARER_TOKEN=$BITBUCKET_BEARER_TOKEN codiumai/pr-agent:latest --pr_url=https://bitbucket.org/$BITBUCKET_WORKSPACE/$BITBUCKET_REPO_SLUG/pull-requests/$BITBUCKET_PR_ID review
- pr-agent --pr_url=https://bitbucket.org/$BITBUCKET_WORKSPACE/$BITBUCKET_REPO_SLUG/pull-requests/$BITBUCKET_PR_ID review
```
2. Add the following secure variables to your repository under Repository settings > Pipelines > Repository variables.
OPENAI_API_KEY: `<your key>`
BITBUCKET_BEARER_TOKEN: `<your token>`
- CONFIG__GIT_PROVIDER: `bitbucket`
- OPENAI__KEY: `<your key>`
- BITBUCKET__AUTH_TYPE: `basic` or `bearer` (default is `bearer`)
- BITBUCKET__BEARER_TOKEN: `<your token>` (required when auth_type is bearer)
- BITBUCKET__BASIC_TOKEN: `<your token>` (required when auth_type is basic)
You can get a Bitbucket token for your repository by following Repository Settings -> Security -> Access Tokens.
For basic auth, you can generate a base64 encoded token from your username:password combination.
Note that comments on a PR are not supported in Bitbucket Pipeline.
## Run using CodiumAI-hosted Bitbucket app 💎
Please contact visit [Qodo Merge Pro](https://www.codium.ai/pricing/) if you're interested in a hosted BitBucket app solution that provides full functionality including PR reviews and comment handling. It's based on the [bitbucket_app.py](https://github.com/Codium-ai/pr-agent/blob/main/pr_agent/git_providers/bitbucket_provider.py) implementation.
## Bitbucket Server and Data Center
Login into your on-prem instance of Bitbucket with your service account username and password.
@ -52,14 +48,16 @@ git_provider="bitbucket_server"
```
and pass the Pull request URL:
```shell
python cli.py --pr_url https://git.onpreminstanceofbitbucket.com/projects/PROJECT/repos/REPO/pull-requests/1 review
```
### Run it as service
To run Qodo Merge as webhook, build the docker image:
```
To run PR-Agent as webhook, build the docker image:
```bash
docker build . -t codiumai/pr-agent:bitbucket_server_webhook --target bitbucket_server_webhook -f docker/Dockerfile
docker push codiumai/pr-agent:bitbucket_server_webhook # Push to your Docker repository
```

View File

@ -0,0 +1,48 @@
## Run a Gitea webhook server
1. In Gitea create a new user and give it "Reporter" role ("Developer" if using Pro version of the agent) for the intended group or project.
2. For the user from step 1. generate a `personal_access_token` with `api` access.
3. Generate a random secret for your app, and save it for later (`webhook_secret`). For example, you can use:
```bash
WEBHOOK_SECRET=$(python -c "import secrets; print(secrets.token_hex(10))")
```
4. Clone this repository:
```bash
git clone https://github.com/qodo-ai/pr-agent.git
```
5. Prepare variables and secrets. Skip this step if you plan on setting these as environment variables when running the agent:
1. In the configuration file/variables:
- Set `config.git_provider` to "gitea"
2. In the secrets file/variables:
- Set your AI model key in the respective section
- In the [Gitea] section, set `personal_access_token` (with token from step 2) and `webhook_secret` (with secret from step 3)
6. Build a Docker image for the app and optionally push it to a Docker repository. We'll use Dockerhub as an example:
```bash
docker build -f /docker/Dockerfile -t pr-agent:gitea_app --target gitea_app .
docker push codiumai/pr-agent:gitea_webhook # Push to your Docker repository
```
7. Set the environmental variables, the method depends on your docker runtime. Skip this step if you included your secrets/configuration directly in the Docker image.
```bash
CONFIG__GIT_PROVIDER=gitea
GITEA__PERSONAL_ACCESS_TOKEN=<personal_access_token>
GITEA__WEBHOOK_SECRET=<webhook_secret>
GITEA__URL=https://gitea.com # Or self host
OPENAI__KEY=<your_openai_api_key>
GITEA__SKIP_SSL_VERIFICATION=false # or true
GITEA__SSL_CA_CERT=/path/to/cacert.pem
```
8. Create a webhook in your Gitea project. Set the URL to `http[s]://<PR_AGENT_HOSTNAME>/api/v1/gitea_webhooks`, the secret token to the generated secret from step 3, and enable the triggers `push`, `comments` and `merge request events`.
9. Test your installation by opening a merge request or commenting on a merge request using one of PR Agent's commands.

View File

@ -1,6 +1,6 @@
## Run as a GitHub Action
You can use our pre-built Github Action Docker image to run Qodo Merge as a Github Action.
You can use our pre-built Github Action Docker image to run PR-Agent as a Github Action.
1) Add the following file to your repository under `.github/workflows/pr_agent.yml`:
@ -21,7 +21,7 @@ jobs:
steps:
- name: PR Agent action step
id: pragent
uses: Codium-ai/pr-agent@main
uses: qodo-ai/pr-agent@main
env:
OPENAI_KEY: ${{ secrets.OPENAI_KEY }}
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
@ -40,6 +40,7 @@ The GITHUB_TOKEN secret is automatically created by GitHub.
When you open your next PR, you should see a comment from `github-actions` bot with a review of your PR, and instructions on how to use the rest of the tools.
4) You may configure Qodo Merge by adding environment variables under the env section corresponding to any configurable property in the [configuration](https://github.com/Codium-ai/pr-agent/blob/main/pr_agent/settings/configuration.toml) file. Some examples:
```yaml
env:
# ... previous environment values
@ -47,9 +48,11 @@ When you open your next PR, you should see a comment from `github-actions` bot w
PR_REVIEWER.REQUIRE_TESTS_REVIEW: "false" # Disable tests review
PR_CODE_SUGGESTIONS.NUM_CODE_SUGGESTIONS: 6 # Increase number of code suggestions
```
See detailed usage instructions in the [USAGE GUIDE](https://qodo-merge-docs.qodo.ai/usage-guide/automations_and_usage/#github-action)
### Using a specific release
!!! tip ""
if you want to pin your action to a specific release (v0.23 for example) for stability reasons, use:
```yaml
@ -72,6 +75,7 @@ See detailed usage instructions in the [USAGE GUIDE](https://qodo-merge-docs.qod
```
### Action for GitHub enterprise server
!!! tip ""
To use the action with a GitHub enterprise server, add an environment variable `GITHUB.BASE_URL` with the API URL of your GitHub server.
@ -82,10 +86,10 @@ See detailed usage instructions in the [USAGE GUIDE](https://qodo-merge-docs.qod
GITHUB.BASE_URL: "https://github.mycompany.com/api/v3"
```
---
## Run as a GitHub App
Allowing you to automate the review process on your private or public repositories.
1) Create a GitHub App from the [Github Developer Portal](https://docs.github.com/en/developers/apps/creating-a-github-app).
@ -102,7 +106,7 @@ Allowing you to automate the review process on your private or public repositori
2) Generate a random secret for your app, and save it for later. For example, you can use:
```
```bash
WEBHOOK_SECRET=$(python -c "import secrets; print(secrets.token_hex(10))")
```
@ -113,28 +117,29 @@ WEBHOOK_SECRET=$(python -c "import secrets; print(secrets.token_hex(10))")
4) Clone this repository:
```
```bash
git clone https://github.com/Codium-ai/pr-agent.git
```
5) Copy the secrets template file and fill in the following:
```
```bash
cp pr_agent/settings/.secrets_template.toml pr_agent/settings/.secrets.toml
# Edit .secrets.toml file
```
- Your OpenAI key.
- Copy your app's private key to the private_key field.
- Copy your app's ID to the app_id field.
- Copy your app's webhook secret to the webhook_secret field.
- Set deployment_type to 'app' in [configuration.toml](https://github.com/Codium-ai/pr-agent/blob/main/pr_agent/settings/configuration.toml)
- Your OpenAI key.
- Copy your app's private key to the private_key field.
- Copy your app's ID to the app_id field.
- Copy your app's webhook secret to the webhook_secret field.
- Set deployment_type to 'app' in [configuration.toml](https://github.com/Codium-ai/pr-agent/blob/main/pr_agent/settings/configuration.toml)
> The .secrets.toml file is not copied to the Docker image by default, and is only used for local development.
> If you want to use the .secrets.toml file in your Docker image, you can add remove it from the .dockerignore file.
> In most production environments, you would inject the secrets file as environment variables or as mounted volumes.
> For example, in order to inject a secrets file as a volume in a Kubernetes environment you can update your pod spec to include the following,
> assuming you have a secret named `pr-agent-settings` with a key named `.secrets.toml`:
```
volumes:
- name: settings-volume
@ -152,7 +157,7 @@ cp pr_agent/settings/.secrets_template.toml pr_agent/settings/.secrets.toml
6) Build a Docker image for the app and optionally push it to a Docker repository. We'll use Dockerhub as an example:
```
```bash
docker build . -t codiumai/pr-agent:github_app --target github_app -f docker/Dockerfile
docker push codiumai/pr-agent:github_app # Push to your Docker repository
```
@ -180,20 +185,47 @@ For example: `GITHUB.WEBHOOK_SECRET` --> `GITHUB__WEBHOOK_SECRET`
1. Follow steps 1-5 from [here](#run-as-a-github-app).
2. Build a docker image that can be used as a lambda function
```shell
docker buildx build --platform=linux/amd64 . -t codiumai/pr-agent:serverless -f docker/Dockerfile.lambda
# Note: --target github_lambda is optional as it's the default target
docker buildx build --platform=linux/amd64 . -t codiumai/pr-agent:github_lambda --target github_lambda -f docker/Dockerfile.lambda
```
3. Push image to ECR
```shell
docker tag codiumai/pr-agent:serverless <AWS_ACCOUNT>.dkr.ecr.<AWS_REGION>.amazonaws.com/codiumai/pr-agent:serverless
docker push <AWS_ACCOUNT>.dkr.ecr.<AWS_REGION>.amazonaws.com/codiumai/pr-agent:serverless
docker tag codiumai/pr-agent:github_lambda <AWS_ACCOUNT>.dkr.ecr.<AWS_REGION>.amazonaws.com/codiumai/pr-agent:github_lambda
docker push <AWS_ACCOUNT>.dkr.ecr.<AWS_REGION>.amazonaws.com/codiumai/pr-agent:github_lambda
```
4. Create a lambda function that uses the uploaded image. Set the lambda timeout to be at least 3m.
5. Configure the lambda function to have a Function URL.
6. In the environment variables of the Lambda function, specify `AZURE_DEVOPS_CACHE_DIR` to a writable location such as /tmp. (see [link](https://github.com/Codium-ai/pr-agent/pull/450#issuecomment-1840242269))
7. Go back to steps 8-9 of [Method 5](#run-as-a-github-app) with the function url as your Webhook URL.
The Webhook URL would look like `https://<LAMBDA_FUNCTION_URL>/api/v1/github_webhooks`
### Using AWS Secrets Manager
For production Lambda deployments, use AWS Secrets Manager instead of environment variables:
1. Create a secret in AWS Secrets Manager with JSON format like this:
```json
{
"openai.key": "sk-proj-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
"github.webhook_secret": "your-webhook-secret-from-step-2",
"github.private_key": "-----BEGIN RSA PRIVATE KEY-----\nMIIEpAIBAAKCAQEA...\n-----END RSA PRIVATE KEY-----"
}
```
2. Add IAM permission `secretsmanager:GetSecretValue` to your Lambda execution role
3. Set these environment variables in your Lambda:
```bash
AWS_SECRETS_MANAGER__SECRET_ARN=arn:aws:secretsmanager:us-east-1:123456789012:secret:pr-agent-secrets-AbCdEf
CONFIG__SECRET_PROVIDER=aws_secrets_manager
```
---
## AWS CodeCommit Setup
@ -201,28 +233,27 @@ For example: `GITHUB.WEBHOOK_SECRET` --> `GITHUB__WEBHOOK_SECRET`
Not all features have been added to CodeCommit yet. As of right now, CodeCommit has been implemented to run the Qodo Merge CLI on the command line, using AWS credentials stored in environment variables. (More features will be added in the future.) The following is a set of instructions to have Qodo Merge do a review of your CodeCommit pull request from the command line:
1. Create an IAM user that you will use to read CodeCommit pull requests and post comments
* Note: That user should have CLI access only, not Console access
- Note: That user should have CLI access only, not Console access
2. Add IAM permissions to that user, to allow access to CodeCommit (see IAM Role example below)
3. Generate an Access Key for your IAM user
4. Set the Access Key and Secret using environment variables (see Access Key example below)
5. Set the `git_provider` value to `codecommit` in the `pr_agent/settings/configuration.toml` settings file
6. Set the `PYTHONPATH` to include your `pr-agent` project directory
* Option A: Add `PYTHONPATH="/PATH/TO/PROJECTS/pr-agent` to your `.env` file
* Option B: Set `PYTHONPATH` and run the CLI in one command, for example:
* `PYTHONPATH="/PATH/TO/PROJECTS/pr-agent python pr_agent/cli.py [--ARGS]`
- Option A: Add `PYTHONPATH="/PATH/TO/PROJECTS/pr-agent` to your `.env` file
- Option B: Set `PYTHONPATH` and run the CLI in one command, for example:
- `PYTHONPATH="/PATH/TO/PROJECTS/pr-agent python pr_agent/cli.py [--ARGS]`
---
#### AWS CodeCommit IAM Role Example
Example IAM permissions to that user to allow access to CodeCommit:
* Note: The following is a working example of IAM permissions that has read access to the repositories and write access to allow posting comments
* Note: If you only want pr-agent to review your pull requests, you can tighten the IAM permissions further, however this IAM example will work, and allow the pr-agent to post comments to the PR
* Note: You may want to replace the `"Resource": "*"` with your list of repos, to limit access to only those repos
- Note: The following is a working example of IAM permissions that has read access to the repositories and write access to allow posting comments
- Note: If you only want pr-agent to review your pull requests, you can tighten the IAM permissions further, however this IAM example will work, and allow the pr-agent to post comments to the PR
- Note: You may want to replace the `"Resource": "*"` with your list of repos, to limit access to only those repos
```
```json
{
"Version": "2012-10-17",
"Statement": [

View File

@ -1,7 +1,9 @@
## Run as a GitLab Pipeline
You can use a pre-built Action Docker image to run Qodo Merge as a GitLab pipeline. This is a simple way to get started with Qodo Merge without setting up your own server.
You can use a pre-built Action Docker image to run PR-Agent as a GitLab pipeline. This is a simple way to get started with Qodo Merge without setting up your own server.
(1) Add the following file to your repository under `.gitlab-ci.yml`:
```yaml
stages:
- pr_agent
@ -26,10 +28,10 @@ pr_agent_job:
rules:
- if: '$CI_PIPELINE_SOURCE == "merge_request_event"'
```
This script will run Qodo Merge on every new merge request. You can modify the `rules` section to run Qodo Merge on different events.
You can also modify the `script` section to run different Qodo Merge commands, or with different parameters by exporting different environment variables.
(2) Add the following masked variables to your GitLab repository (CI/CD -> Variables):
- `GITLAB_PERSONAL_ACCESS_TOKEN`: Your GitLab personal access token.
@ -40,39 +42,109 @@ Note that if your base branches are not protected, don't set the variables as `p
> **Note**: The `$CI_SERVER_FQDN` variable is available starting from GitLab version 16.10. If you're using an earlier version, this variable will not be available. However, you can combine `$CI_SERVER_HOST` and `$CI_SERVER_PORT` to achieve the same result. Please ensure you're using a compatible version or adjust your configuration.
## Run a GitLab webhook server
1. From the GitLab workspace or group, create an access token with "Reporter" role ("Developer" if using Pro version of the agent) and "api" scope.
1. In GitLab create a new user and give it "Reporter" role ("Developer" if using Pro version of the agent) for the intended group or project.
2. Generate a random secret for your app, and save it for later. For example, you can use:
2. For the user from step 1. generate a `personal_access_token` with `api` access.
```
WEBHOOK_SECRET=$(python -c "import secrets; print(secrets.token_hex(10))")
3. Generate a random secret for your app, and save it for later (`shared_secret`). For example, you can use:
```bash
SHARED_SECRET=$(python -c "import secrets; print(secrets.token_hex(10))")
```
3. Clone this repository:
4. Clone this repository:
```
git clone https://github.com/Codium-ai/pr-agent.git
```bash
git clone https://github.com/qodo-ai/pr-agent.git
```
4. Prepare variables and secrets. Skip this step if you plan on settings these as environment variables when running the agent:
1. In the configuration file/variables:
- Set `deployment_type` to "gitlab"
5. Prepare variables and secrets. Skip this step if you plan on setting these as environment variables when running the agent:
1. In the configuration file/variables:
- Set `config.git_provider` to "gitlab"
2. In the secrets file/variables:
- Set your AI model key in the respective section
- In the [gitlab] section, set `personal_access_token` (with token from step 1) and `shared_secret` (with secret from step 2)
2. In the secrets file/variables:
- Set your AI model key in the respective section
- In the [gitlab] section, set `personal_access_token` (with token from step 2) and `shared_secret` (with secret from step 3)
6. Build a Docker image for the app and optionally push it to a Docker repository. We'll use Dockerhub as an example:
5. Build a Docker image for the app and optionally push it to a Docker repository. We'll use Dockerhub as an example:
```
```bash
docker build . -t gitlab_pr_agent --target gitlab_webhook -f docker/Dockerfile
docker push codiumai/pr-agent:gitlab_webhook # Push to your Docker repository
```
6. Create a webhook in GitLab. Set the URL to ```http[s]://<PR_AGENT_HOSTNAME>/webhook```, the secret token to the generated secret from step 2, and enable the triggers `push`, `comments` and `merge request events`.
7. Set the environmental variables, the method depends on your docker runtime. Skip this step if you included your secrets/configuration directly in the Docker image.
7. Test your installation by opening a merge request or commenting on a merge request using one of CodiumAI's commands.
boxes
```bash
CONFIG__GIT_PROVIDER=gitlab
GITLAB__PERSONAL_ACCESS_TOKEN=<personal_access_token>
GITLAB__SHARED_SECRET=<shared_secret>
GITLAB__URL=https://gitlab.com
OPENAI__KEY=<your_openai_api_key>
```
8. Create a webhook in your GitLab project. Set the URL to `http[s]://<PR_AGENT_HOSTNAME>/webhook`, the secret token to the generated secret from step 3, and enable the triggers `push`, `comments` and `merge request events`.
9. Test your installation by opening a merge request or commenting on a merge request using one of PR Agent's commands.
## Deploy as a Lambda Function
Note that since AWS Lambda env vars cannot have "." in the name, you can replace each "." in an env variable with "__".<br>
For example: `GITLAB.PERSONAL_ACCESS_TOKEN` --> `GITLAB__PERSONAL_ACCESS_TOKEN`
1. Follow steps 1-5 from [Run a GitLab webhook server](#run-a-gitlab-webhook-server).
2. Build a docker image that can be used as a lambda function
```shell
docker buildx build --platform=linux/amd64 . -t codiumai/pr-agent:gitlab_lambda --target gitlab_lambda -f docker/Dockerfile.lambda
```
3. Push image to ECR
```shell
docker tag codiumai/pr-agent:gitlab_lambda <AWS_ACCOUNT>.dkr.ecr.<AWS_REGION>.amazonaws.com/codiumai/pr-agent:gitlab_lambda
docker push <AWS_ACCOUNT>.dkr.ecr.<AWS_REGION>.amazonaws.com/codiumai/pr-agent:gitlab_lambda
```
4. Create a lambda function that uses the uploaded image. Set the lambda timeout to be at least 3m.
5. Configure the lambda function to have a Function URL.
6. In the environment variables of the Lambda function, specify `AZURE_DEVOPS_CACHE_DIR` to a writable location such as /tmp. (see [link](https://github.com/Codium-ai/pr-agent/pull/450#issuecomment-1840242269))
7. Go back to steps 8-9 of [Run a GitLab webhook server](#run-a-gitlab-webhook-server) with the function url as your Webhook URL.
The Webhook URL would look like `https://<LAMBDA_FUNCTION_URL>/webhook`
### Using AWS Secrets Manager
For production Lambda deployments, use AWS Secrets Manager instead of environment variables:
1. Create individual secrets for each GitLab webhook with this JSON format (e.g., secret name: `project-webhook-secret-001`)
```json
{
"gitlab_token": "glpat-xxxxxxxxxxxxxxxxxxxxxxxx",
"token_name": "project-webhook-001"
}
```
2. Create a main configuration secret for common settings (e.g., secret name: `pr-agent-main-config`)
```json
{
"openai.key": "sk-proj-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
}
```
3. Set these environment variables in your Lambda:
```bash
CONFIG__SECRET_PROVIDER=aws_secrets_manager
AWS_SECRETS_MANAGER__SECRET_ARN=arn:aws:secretsmanager:us-east-1:123456789012:secret:pr-agent-main-config-AbCdEf
```
4. In your GitLab webhook configuration, set the **Secret Token** to the **Secret name** created in step 1:
- Example: `project-webhook-secret-001`
**Important**: When using Secrets Manager, GitLab's webhook secret must be the Secrets Manager secret name.
5. Add IAM permission `secretsmanager:GetSecretValue` to your Lambda execution role

View File

@ -1,21 +1,19 @@
# Installation
## Self-hosted Qodo Merge
If you choose to host your own Qodo Merge, you first need to acquire two tokens:
## Self-hosted PR-Agent
1. An OpenAI key from [here](https://platform.openai.com/api-keys), with access to GPT-4 (or a key for other [language models](https://qodo-merge-docs.qodo.ai/usage-guide/changing_a_model/), if you prefer).
2. A GitHub\GitLab\BitBucket personal access token (classic), with the repo scope. [GitHub from [here](https://github.com/settings/tokens)]
There are several ways to use self-hosted Qodo Merge:
There are several ways to use self-hosted PR-Agent:
- [Locally](./locally.md)
- [GitHub](./github.md)
- [GitLab](./gitlab.md)
- [BitBucket](./bitbucket.md)
- [Azure DevOps](./azure.md)
- [GitHub integration](./github.md)
- [GitLab integration](./gitlab.md)
- [BitBucket integration](./bitbucket.md)
- [Azure DevOps integration](./azure.md)
- [Gitea integration](./gitea.md)
## Qodo Merge Pro 💎
Qodo Merge Pro, an app hosted by CodiumAI for GitHub\GitLab\BitBucket, is also available.
## Qodo Merge 💎
Qodo Merge, an app hosted by QodoAI for GitHub\GitLab\BitBucket, is also available.
<br>
With Qodo Merge Pro, installation is as simple as signing up and adding the Qodo Merge app to your relevant repo.
See [here](https://qodo-merge-docs.qodo.ai/installation/pr_agent_pro/) for more details.
With Qodo Merge, installation is as simple as adding the Qodo Merge app to your relevant repositories.
See [here](https://qodo-merge-docs.qodo.ai/installation/qodo_merge/) for more details.

View File

@ -1,8 +1,100 @@
To run PR-Agent locally, you first need to acquire two keys:
1. An OpenAI key from [here](https://platform.openai.com/api-keys){:target="_blank"}, with access to GPT-4 and o4-mini (or a key for other [language models](https://qodo-merge-docs.qodo.ai/usage-guide/changing_a_model/), if you prefer).
2. A personal access token from your Git platform (GitHub, GitLab, BitBucket,Gitea) with repo scope. GitHub token, for example, can be issued from [here](https://github.com/settings/tokens){:target="_blank"}
## Using Docker image
A list of the relevant tools can be found in the [tools guide](../tools/).
To invoke a tool (for example `review`), you can run PR-Agent directly from the Docker image. Here's how:
- For GitHub:
```bash
docker run --rm -it -e OPENAI.KEY=<your key> -e GITHUB.USER_TOKEN=<your token> codiumai/pr-agent:latest --pr_url <pr_url> review
```
If you are using GitHub enterprise server, you need to specify the custom url as variable.
For example, if your GitHub server is at `https://github.mycompany.com`, add the following to the command:
```bash
-e GITHUB.BASE_URL=https://github.mycompany.com/api/v3
```
- For GitLab:
```bash
docker run --rm -it -e OPENAI.KEY=<your key> -e CONFIG.GIT_PROVIDER=gitlab -e GITLAB.PERSONAL_ACCESS_TOKEN=<your token> codiumai/pr-agent:latest --pr_url <pr_url> review
```
If you have a dedicated GitLab instance, you need to specify the custom url as variable:
```bash
-e GITLAB.URL=<your gitlab instance url>
```
- For BitBucket:
```bash
docker run --rm -it -e CONFIG.GIT_PROVIDER=bitbucket -e OPENAI.KEY=$OPENAI_API_KEY -e BITBUCKET.BEARER_TOKEN=$BITBUCKET_BEARER_TOKEN codiumai/pr-agent:latest --pr_url=<pr_url> review
```
- For Gitea:
```bash
docker run --rm -it -e OPENAI.KEY=<your key> -e CONFIG.GIT_PROVIDER=gitea -e GITEA.PERSONAL_ACCESS_TOKEN=<your token> codiumai/pr-agent:latest --pr_url <pr_url> review
```
If you have a dedicated Gitea instance, you need to specify the custom url as variable:
```bash
-e GITEA.URL=<your gitea instance url>
```
For other git providers, update `CONFIG.GIT_PROVIDER` accordingly and check the [`pr_agent/settings/.secrets_template.toml`](https://github.com/Codium-ai/pr-agent/blob/main/pr_agent/settings/.secrets_template.toml) file for environment variables expected names and values.
### Utilizing environment variables
It is also possible to provide or override the configuration by setting the corresponding environment variables.
You can define the corresponding environment variables by following this convention: `<TABLE>__<KEY>=<VALUE>` or `<TABLE>.<KEY>=<VALUE>`.
The `<TABLE>` refers to a table/section in a configuration file and `<KEY>=<VALUE>` refers to the key/value pair of a setting in the configuration file.
For example, suppose you want to run `pr_agent` that connects to a self-hosted GitLab instance similar to an example above.
You can define the environment variables in a plain text file named `.env` with the following content:
```bash
CONFIG__GIT_PROVIDER="gitlab"
GITLAB__URL="<your url>"
GITLAB__PERSONAL_ACCESS_TOKEN="<your token>"
OPENAI__KEY="<your key>"
```
Then, you can run `pr_agent` using Docker with the following command:
```shell
docker run --rm -it --env-file .env codiumai/pr-agent:latest <tool> <tool parameter>
```
---
### I get an error when running the Docker image. What should I do?
If you encounter an error when running the Docker image, it is almost always due to a misconfiguration of api keys or tokens.
Note that litellm, which is used by pr-agent, sometimes returns non-informative error messages such as `APIError: OpenAIException - Connection error.`
Carefully check the api keys and tokens you provided and make sure they are correct.
Adjustments may be needed depending on your llm provider.
For example, for Azure OpenAI, additional keys are [needed](https://qodo-merge-docs.qodo.ai/usage-guide/changing_a_model/#azure).
Same goes for other providers, make sure to check the [documentation](https://qodo-merge-docs.qodo.ai/usage-guide/changing_a_model/#changing-a-model)
## Using pip package
Install the package:
```
```bash
pip install pr-agent
```
@ -35,52 +127,17 @@ if __name__ == '__main__':
main()
```
## Using Docker image
A list of the relevant tools can be found in the [tools guide](../tools/ask.md).
To invoke a tool (for example `review`), you can run directly from the Docker image. Here's how:
- For GitHub:
```
docker run --rm -it -e OPENAI.KEY=<your key> -e GITHUB.USER_TOKEN=<your token> codiumai/pr-agent:latest --pr_url <pr_url> review
```
If you are using GitHub enterprise server, you need to specify the custom url as variable.
For example, if your GitHub server is at `https://github.mycompany.com`, add the following to the command:
```
-e GITHUB.BASE_URL=https://github.mycompany.com/api/v3
```
- For GitLab:
```
docker run --rm -it -e OPENAI.KEY=<your key> -e CONFIG.GIT_PROVIDER=gitlab -e GITLAB.PERSONAL_ACCESS_TOKEN=<your token> codiumai/pr-agent:latest --pr_url <pr_url> review
```
If you have a dedicated GitLab instance, you need to specify the custom url as variable:
```
-e GITLAB.URL=<your gitlab instance url>
```
- For BitBucket:
```
docker run --rm -it -e CONFIG.GIT_PROVIDER=bitbucket -e OPENAI.KEY=$OPENAI_API_KEY -e BITBUCKET.BEARER_TOKEN=$BITBUCKET_BEARER_TOKEN codiumai/pr-agent:latest --pr_url=<pr_url> review
```
For other git providers, update CONFIG.GIT_PROVIDER accordingly, and check the `pr_agent/settings/.secrets_template.toml` file for the environment variables expected names and values.
---
## Run from source
1. Clone this repository:
```
```bash
git clone https://github.com/Codium-ai/pr-agent.git
```
2. Navigate to the `/pr-agent` folder and install the requirements in your favorite virtual environment:
```
```bash
pip install -e .
```
@ -88,7 +145,7 @@ pip install -e .
3. Copy the secrets template file and fill in your OpenAI key and your GitHub user token:
```
```bash
cp pr_agent/settings/.secrets_template.toml pr_agent/settings/.secrets.toml
chmod 600 pr_agent/settings/.secrets.toml
# Edit .secrets.toml file
@ -96,7 +153,7 @@ chmod 600 pr_agent/settings/.secrets.toml
4. Run the cli.py script:
```
```bash
python3 -m pr_agent.cli --pr_url <pr_url> review
python3 -m pr_agent.cli --pr_url <pr_url> ask <your question>
python3 -m pr_agent.cli --pr_url <pr_url> describe
@ -108,6 +165,7 @@ python3 -m pr_agent.cli --issue_url <issue_url> similar_issue
```
[Optional] Add the pr_agent folder to your PYTHONPATH
```
```bash
export PYTHONPATH=$PYTHONPATH:<PATH to pr_agent folder>
```

View File

@ -0,0 +1,49 @@
# PR-Agent Installation Guide
PR-Agent can be deployed in various environments and platforms. Choose the installation method that best suits your needs:
## 🖥️ Local Installation
Learn how to run PR-Agent locally using:
- Docker image
- pip package
- CLI from source code
[View Local Installation Guide →](https://qodo-merge-docs.qodo.ai/installation/locally/)
## 🐙 GitHub Integration
Set up PR-Agent with GitHub as:
- GitHub Action
- Local GitHub App
[View GitHub Integration Guide →](https://qodo-merge-docs.qodo.ai/installation/github/)
## 🦊 GitLab Integration
Deploy PR-Agent on GitLab as:
- GitLab pipeline job
- Local GitLab webhook server
[View GitLab Integration Guide →](https://qodo-merge-docs.qodo.ai/installation/gitlab/)
## 🟦 BitBucket Integration
Implement PR-Agent in BitBucket as:
- BitBucket pipeline job
- Local BitBucket server
[View BitBucket Integration Guide →](https://qodo-merge-docs.qodo.ai/installation/bitbucket/)
## 🔷 Azure DevOps Integration
Configure PR-Agent with Azure DevOps as:
- Azure DevOps pipeline job
- Local Azure DevOps webhook
[View Azure DevOps Integration Guide →](https://qodo-merge-docs.qodo.ai/installation/azure/)

View File

@ -1,68 +0,0 @@
## Getting Started with Qodo Merge Pro
Qodo Merge Pro is a versatile application compatible with GitHub, GitLab, and BitBucket, hosted by CodiumAI.
See [here](https://qodo-merge-docs.qodo.ai/overview/pr_agent_pro/) for more details about the benefits of using Qodo Merge Pro.
Interested parties can subscribe to Qodo Merge Pro through the following [link](https://www.codium.ai/pricing/).
After subscribing, you are granted the ability to easily install the application across any of your repositories.
![Qodo Merge Pro](https://codium.ai/images/pr_agent/pr_agent_pro_install.png){width=468}
Each user who wants to use Qodo Merge pro needs to buy a seat.
Initially, CodiumAI offers a two-week trial period at no cost, after which continued access requires each user to secure a personal seat.
Once a user acquires a seat, they gain the flexibility to use Qodo Merge Pro across any repository where it was enabled.
Users without a purchased seat who interact with a repository featuring Qodo Merge Pro are entitled to receive up to five complimentary feedbacks.
Beyond this limit, Qodo Merge Pro will cease to respond to their inquiries unless a seat is purchased.
## Install Qodo Merge Pro for GitHub Enterprise Server
To use Qodo Merge Pro application on your private GitHub Enterprise Server, you will need to contact us for starting an [Enterprise](https://www.codium.ai/pricing/) trial.
## Install Qodo Merge Pro for GitLab (Teams & Enterprise)
Since GitLab platform does not support apps, installing Qodo Merge Pro for GitLab is a bit more involved, and requires the following steps:
### Step 1
Acquire a personal, project or group level access token. Enable the “api” scope in order to allow Qodo Merge to read pull requests, comment and respond to requests.
<figure markdown="1">
![Step 1](https://www.codium.ai/images/pr_agent/gitlab_pro_pat.png){width=750}
</figure>
Store the token in a safe place, you wont be able to access it again after it was generated.
### Step 2
Generate a shared secret and link it to the access token. Browse to [https://register.gitlab.pr-agent.codium.ai](https://register.gitlab.pr-agent.codium.ai).
Fill in your generated GitLab token and your company or personal name in the appropriate fields and click "Submit".
You should see "Success!" displayed above the Submit button, and a shared secret will be generated. Store it in a safe place, you wont be able to access it again after it was generated.
### Step 3
Install a webhook for your repository or groups, by clicking “webhooks” on the settings menu. Click the “Add new webhook” button.
<figure markdown="1">
![Step 3.1](https://www.codium.ai/images/pr_agent/gitlab_pro_add_webhook.png)
</figure>
In the webhook definition form, fill in the following fields:
URL: https://pro.gitlab.pr-agent.codium.ai/webhook
Secret token: Your CodiumAI key
Trigger: Check the comments and merge request events boxes.
Enable SSL verification: Check the box.
<figure markdown="1">
![Step 3.2](https://www.codium.ai/images/pr_agent/gitlab_pro_webhooks.png){width=750}
</figure>
### Step 4
Youre all set!
Open a new merge request or add a MR comment with one of Qodo Merges commands such as /review, /describe or /improve.

View File

@ -0,0 +1,100 @@
Qodo Merge is a versatile application compatible with GitHub, GitLab, and BitBucket, hosted by QodoAI.
See [here](https://qodo-merge-docs.qodo.ai/overview/pr_agent_pro/) for more details about the benefits of using Qodo Merge.
## Usage and Licensing
### Cloud Users
Non-paying users will enjoy feedback on up to 75 PRs per git organization per month. Above this limit, PRs will not receive feedback until a new month begins.
For unlimited access, user licenses (seats) are required. Each user requires an individual seat license.
After purchasing seats, the team owner can assign them to specific users through the management portal.
With an assigned seat, users can seamlessly deploy the application across any of their code repositories in a git organization, and receive feedback on all their PRs.
### Enterprise Account
For companies who require an Enterprise account, please [contact](https://www.qodo.ai/contact/#pricing) us to initiate a trial period, and to discuss pricing and licensing options.
## Install Qodo Merge for GitHub
### GitHub Cloud
Qodo Merge for GitHub cloud is available for installation through the [GitHub Marketplace](https://github.com/apps/qodo-merge-pro).
![Qodo Merge](https://codium.ai/images/pr_agent/pr_agent_pro_install.png){width=468}
### GitHub Enterprise Server
To use Qodo Merge on your private GitHub Enterprise Server, you will need to [contact](https://www.qodo.ai/contact/#pricing) Qodo for starting an Enterprise trial.
(Note: The marketplace app is not compatible with GitHub Enterprise Server. Installation requires creating a private GitHub App instead.)
### GitHub Open Source Projects
For open-source projects, Qodo Merge is available for free usage. To install Qodo Merge for your open-source repositories, use the following marketplace [link](https://github.com/apps/qodo-merge-pro-for-open-source).
## Install Qodo Merge for Bitbucket
### Bitbucket Cloud
Qodo Merge for Bitbucket Cloud is available for installation through the following [link](https://bitbucket.org/site/addons/authorize?addon_key=d6df813252c37258)
![Qodo Merge](https://qodo.ai/images/pr_agent/pr_agent_pro_bitbucket_install.png){width=468}
### Bitbucket Server
To use Qodo Merge application on your private Bitbucket Server, you will need to contact us for starting an [Enterprise](https://www.qodo.ai/pricing/) trial.
## Install Qodo Merge for GitLab
### GitLab Cloud
Since GitLab platform does not support apps, installing Qodo Merge for GitLab is a bit more involved, and requires the following steps:
#### Step 1
Acquire a personal, project or group level access token. Enable the “api” scope in order to allow Qodo Merge to read pull requests, comment and respond to requests.
<figure markdown="1">
![Step 1](https://www.codium.ai/images/pr_agent/gitlab_pro_pat.png){width=750}
</figure>
Store the token in a safe place, you wont be able to access it again after it was generated.
#### Step 2
Generate a shared secret and link it to the access token. Browse to [https://register.gitlab.pr-agent.codium.ai](https://register.gitlab.pr-agent.codium.ai).
Fill in your generated GitLab token and your company or personal name in the appropriate fields and click "Submit".
You should see "Success!" displayed above the Submit button, and a shared secret will be generated. Store it in a safe place, you wont be able to access it again after it was generated.
#### Step 3
Install a webhook for your repository or groups, by clicking “webhooks” on the settings menu. Click the “Add new webhook” button.
<figure markdown="1">
![Step 3.1](https://www.codium.ai/images/pr_agent/gitlab_pro_add_webhook.png)
</figure>
In the webhook definition form, fill in the following fields:
URL: https://pro.gitlab.pr-agent.codium.ai/webhook
Secret token: Your QodoAI key
Trigger: Check the comments and merge request events boxes.
Enable SSL verification: Check the box.
<figure markdown="1">
![Step 3.2](https://www.codium.ai/images/pr_agent/gitlab_pro_webhooks.png){width=750}
</figure>
#### Step 4
Youre all set!
Open a new merge request or add a MR comment with one of Qodo Merges commands such as /review, /describe or /improve.
### GitLab Server
For [limited free usage](https://qodo-merge-docs.qodo.ai/installation/qodo_merge/#cloud-users) on private GitLab Server, the same [installation steps](#gitlab-cloud) as for GitLab Cloud apply. For unlimited usage, you will need to [contact](https://www.qodo.ai/contact/#pricing) Qodo for moving to an Enterprise account.

View File

@ -1,16 +1,15 @@
## Self-hosted Qodo Merge
## Self-hosted PR-Agent
- If you self-host Qodo Merge with your OpenAI (or other LLM provider) API key, it is between you and the provider. We don't send your code data to Qodo Merge servers.
- If you self-host PR-Agent with your OpenAI (or other LLM provider) API key, it is between you and the provider. We don't send your code data to Qodo servers.
## Qodo Merge Pro 💎
## Qodo Merge 💎
- When using Qodo Merge Pro 💎, hosted by CodiumAI, we will not store any of your data, nor will we use it for training. You will also benefit from an OpenAI account with zero data retention.
- When using Qodo Merge💎, hosted by Qodo, we will not store any of your data, nor will we use it for training. You will also benefit from an OpenAI account with zero data retention.
- For certain clients, CodiumAI-hosted Qodo Merge Pro will use CodiumAIs proprietary models. If this is the case, you will be notified.
- For certain clients, Qodo Merge will use Qodos proprietary models. If this is the case, you will be notified.
- No passive collection of Code and Pull Requests data — Qodo Merge will be active only when you invoke it, and it will then extract and analyze only data relevant to the executed command and queried pull request.
## Qodo Merge Chrome extension
- The [Qodo Merge Chrome extension](https://chromewebstore.google.com/detail/pr-agent-chrome-extension/ephlnjeghhogofkifjloamocljapahnl) will not send your code to any external servers.

View File

@ -1,93 +0,0 @@
# Overview
Qodo Merge is an open-source tool to help efficiently review and handle pull requests.
- See the [Installation Guide](./installation/index.md) for instructions on installing and running the tool on different git platforms.
- See the [Usage Guide](./usage-guide/index.md) for instructions on running the Qodo Merge commands via different interfaces, including _CLI_, _online usage_, or by _automatically triggering_ them when a new PR is opened.
- See the [Tools Guide](./tools/index.md) for a detailed description of the different tools.
## Qodo Merge Docs Smart Search
To search the documentation site using natural language:
1) Comment `/help "your question"` in either:
- A pull request where Qodo Merge is installed
- A [PR Chat](https://qodo-merge-docs.qodo.ai/chrome-extension/features/#pr-chat)
2) Qodo Merge will respond with an [answer](https://github.com/Codium-ai/pr-agent/pull/1241#issuecomment-2365259334) that includes relevant documentation links.
## Qodo Merge Features
Qodo Merge offers extensive pull request functionalities across various git providers.
| | | GitHub | Gitlab | Bitbucket | Azure DevOps |
|-------|-----------------------------------------------------------------------------------------------------------------------|:------:|:------:|:---------:|:------------:|
| TOOLS | Review | ✅ | ✅ | ✅ | ✅ |
| | ⮑ Incremental | ✅ | | | |
| | Ask | ✅ | ✅ | ✅ | ✅ |
| | Describe | ✅ | ✅ | ✅ | ✅ |
| | ⮑ [Inline file summary](https://qodo-merge-docs.qodo.ai/tools/describe/#inline-file-summary){:target="_blank"} 💎 | ✅ | ✅ | | ✅ |
| | Improve | ✅ | ✅ | ✅ | ✅ |
| | ⮑ Extended | ✅ | ✅ | ✅ | ✅ |
| | [Custom Prompt](./tools/custom_prompt.md){:target="_blank"} 💎 | ✅ | ✅ | ✅ | ✅ |
| | Reflect and Review | ✅ | ✅ | ✅ | ✅ |
| | Update CHANGELOG.md | ✅ | ✅ | ✅ | |
| | Find Similar Issue | ✅ | | | |
| | [Add PR Documentation](./tools/documentation.md){:target="_blank"} 💎 | ✅ | ✅ | | ✅ |
| | [Generate Custom Labels](./tools/describe.md#handle-custom-labels-from-the-repos-labels-page-💎){:target="_blank"} 💎 | ✅ | ✅ | | ✅ |
| | [Analyze PR Components](./tools/analyze.md){:target="_blank"} 💎 | ✅ | ✅ | | ✅ |
| | | | | | |
| USAGE | CLI | ✅ | ✅ | ✅ | ✅ |
| | App / webhook | ✅ | ✅ | ✅ | ✅ |
| | Actions | ✅ | | | |
| | | | | |
| CORE | PR compression | ✅ | ✅ | ✅ | ✅ |
| | Repo language prioritization | ✅ | ✅ | ✅ | ✅ |
| | Adaptive and token-aware file patch fitting | ✅ | ✅ | ✅ | ✅ |
| | Multiple models support | ✅ | ✅ | ✅ | ✅ |
| | Incremental PR review | ✅ | | | |
| | [Static code analysis](./tools/analyze.md/){:target="_blank"} 💎 | ✅ | ✅ | ✅ | ✅ |
| | [Multiple configuration options](./usage-guide/configuration_options.md){:target="_blank"} 💎 | ✅ | ✅ | ✅ | ✅ |
💎 marks a feature available only in [Qodo Merge Pro](https://www.codium.ai/pricing/){:target="_blank"}
## Example Results
<hr>
#### [/describe](https://github.com/Codium-ai/pr-agent/pull/530)
<figure markdown="1">
![/describe](https://www.codium.ai/images/pr_agent/describe_new_short_main.png){width=512}
</figure>
<hr>
#### [/review](https://github.com/Codium-ai/pr-agent/pull/732#issuecomment-1975099151)
<figure markdown="1">
![/review](https://www.codium.ai/images/pr_agent/review_new_short_main.png){width=512}
</figure>
<hr>
#### [/improve](https://github.com/Codium-ai/pr-agent/pull/732#issuecomment-1975099159)
<figure markdown="1">
![/improve](https://www.codium.ai/images/pr_agent/improve_new_short_main.png){width=512}
</figure>
<hr>
#### [/generate_labels](https://github.com/Codium-ai/pr-agent/pull/530)
<figure markdown="1">
![/generate_labels](https://www.codium.ai/images/pr_agent/geneare_custom_labels_main_short.png){width=300}
</figure>
<hr>
## How it Works
The following diagram illustrates Qodo Merge tools and their flow:
![Qodo Merge Tools](https://codium.ai/images/pr_agent/diagram-v0.9.png)
Check out the [PR Compression strategy](core-abilities/index.md) page for more details on how we convert a code diff to a manageable LLM prompt

View File

@ -1,51 +1,56 @@
### Overview
[Qodo Merge Pro](https://www.codium.ai/pricing/) is a hosted version of Qodo Merge, provided by Qodo. A complimentary two-week trial is offered, followed by a monthly subscription fee.
Qodo Merge Pro is designed for companies and teams that require additional features and capabilities. It provides the following benefits:
[Qodo Merge](https://www.codium.ai/pricing/){:target="_blank"} is a hosted version of the open-source [PR-Agent](https://github.com/Codium-ai/pr-agent){:target="_blank"}.
It is designed for companies and teams that require additional features and capabilities.
Free users receive a quota of 75 monthly PR feedbacks per git organization. Unlimited usage requires a paid subscription. See [details](https://qodo-merge-docs.qodo.ai/installation/qodo_merge/#cloud-users).
Qodo Merge provides the following benefits:
1. **Fully managed** - We take care of everything for you - hosting, models, regular updates, and more. Installation is as simple as signing up and adding the Qodo Merge app to your GitHub\GitLab\BitBucket repo.
2. **Improved privacy** - No data will be stored or used to train models. Qodo Merge Pro will employ zero data retention, and will use an OpenAI and Claude accounts with zero data retention.
2. **Improved privacy** - No data will be stored or used to train models. Qodo Merge will employ zero data retention, and will use an OpenAI and Claude accounts with zero data retention.
3. **Improved support** - Qodo Merge Pro users will receive priority support, and will be able to request new features and capabilities.
3. **Improved support** - Qodo Merge users will receive priority support, and will be able to request new features and capabilities.
4. **Supporting self-hosted git servers** - Qodo Merge Pro can be installed on GitHub Enterprise Server, GitLab, and BitBucket. For more information, see the [installation guide](https://qodo-merge-docs.qodo.ai/installation/pr_agent_pro/).
4. **Supporting self-hosted git servers** - Qodo Merge can be installed on GitHub Enterprise Server, GitLab, and BitBucket. For more information, see the [installation guide](https://qodo-merge-docs.qodo.ai/installation/pr_agent_pro/).
5. **PR Chat** - Qodo Merge Pro allows you to engage in [private chat](https://qodo-merge-docs.qodo.ai/chrome-extension/features/#pr-chat) about your pull requests on private repositories.
5. **PR Chat** - Qodo Merge allows you to engage in [private chat](https://qodo-merge-docs.qodo.ai/chrome-extension/features/#pr-chat) about your pull requests on private repositories.
### Additional features
Here are some of the additional features and capabilities that Qodo Merge Pro offers:
Here are some of the additional features and capabilities that Qodo Merge offers, and are not available in the open-source version of PR-Agent:
| Feature | Description |
|----------------------------------------------------------------------------------------------------------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| [**Model selection**](https://qodo-merge-docs.qodo.ai/usage-guide/PR_agent_pro_models/) | Choose the model that best fits your needs, among top models like `GPT4` and `Claude-Sonnet-3.5`
| [**Global and wiki configuration**](https://qodo-merge-docs.qodo.ai/usage-guide/configuration_options/) | Control configurations for many repositories from a single location; <br>Edit configuration of a single repo without committing code |
| [**Apply suggestions**](https://qodo-merge-docs.qodo.ai/tools/improve/#overview) | Generate committable code from the relevant suggestions interactively by clicking on a checkbox |
| [**Suggestions impact**](https://qodo-merge-docs.qodo.ai/tools/improve/#assessing-impact) | Automatically mark suggestions that were implemented by the user (either directly in GitHub, or indirectly in the IDE) to enable tracking of the impact of the suggestions |
| [**CI feedback**](https://qodo-merge-docs.qodo.ai/tools/ci_feedback/) | Automatically analyze failed CI checks on GitHub and provide actionable feedback in the PR conversation, helping to resolve issues quickly |
| [**Advanced usage statistics**](https://www.codium.ai/contact/#/) | Qodo Merge Pro offers detailed statistics at user, repository, and company levels, including metrics about Qodo Merge usage, and also general statistics and insights |
| [**Incorporating companies' best practices**](https://qodo-merge-docs.qodo.ai/tools/improve/#best-practices) | Use the companies' best practices as reference to increase the effectiveness and the relevance of the code suggestions |
| [**Interactive triggering**](https://qodo-merge-docs.qodo.ai/tools/analyze/#example-usage) | Interactively apply different tools via the `analyze` command |
| [**Custom labels**](https://qodo-merge-docs.qodo.ai/tools/describe/#handle-custom-labels-from-the-repos-labels-page) | Define custom labels for Qodo Merge to assign to the PR |
| Feature | Description |
| -------------------------------------------------------------------------------------------------------------------- |--------------------------------------------------------------------------------------------------------------------------------------------------------|
| [**Model selection**](https://qodo-merge-docs.qodo.ai/usage-guide/PR_agent_pro_models/) | Choose the model that best fits your needs, among top models like `Claude Sonnet`, `o4-mini` |
| [**Global and wiki configuration**](https://qodo-merge-docs.qodo.ai/usage-guide/configuration_options/) | Control configurations for many repositories from a single location; <br>Edit configuration of a single repo without committing code |
| [**Apply suggestions**](https://qodo-merge-docs.qodo.ai/tools/improve/#overview) | Generate committable code from the relevant suggestions interactively by clicking on a checkbox |
| [**Suggestions impact**](https://qodo-merge-docs.qodo.ai/tools/improve/#assessing-impact) | Automatically mark suggestions that were implemented by the user (either directly in GitHub, or indirectly in the IDE) to enable tracking of the impact of the suggestions |
| [**CI feedback**](https://qodo-merge-docs.qodo.ai/tools/ci_feedback/) | Automatically analyze failed CI checks on GitHub and provide actionable feedback in the PR conversation, helping to resolve issues quickly |
| [**Advanced usage statistics**](https://www.codium.ai/contact/#/) | Qodo Merge offers detailed statistics at user, repository, and company levels, including metrics about Qodo Merge usage, and also general statistics and insights |
| [**Incorporating companies' best practices**](https://qodo-merge-docs.qodo.ai/tools/improve/#best-practices) | Use the companies' best practices as reference to increase the effectiveness and the relevance of the code suggestions |
| [**Interactive triggering**](https://qodo-merge-docs.qodo.ai/tools/analyze/#example-usage) | Interactively apply different tools via the `analyze` command |
| [**Custom labels**](https://qodo-merge-docs.qodo.ai/tools/describe/#handle-custom-labels-from-the-repos-labels-page) | Define custom labels for Qodo Merge to assign to the PR |
### Additional tools
Here are additional tools that are available only for Qodo Merge Pro users:
| Feature | Description |
|---------|-------------|
| [**Custom Prompt Suggestions**](https://qodo-merge-docs.qodo.ai/tools/custom_prompt/) | Generate code suggestions based on custom prompts from the user |
| [**Analyze PR components**](https://qodo-merge-docs.qodo.ai/tools/analyze/) | Identify the components that changed in the PR, and enable to interactively apply different tools to them |
| [**Tests**](https://qodo-merge-docs.qodo.ai/tools/test/) | Generate tests for code components that changed in the PR |
| [**PR documentation**](https://qodo-merge-docs.qodo.ai/tools/documentation/) | Generate docstring for code components that changed in the PR |
| [**Improve Component**](https://qodo-merge-docs.qodo.ai/tools/improve_component/) | Generate code suggestions for code components that changed in the PR |
| [**Similar code search**](https://qodo-merge-docs.qodo.ai/tools/similar_code/) | Search for similar code in the repository, organization, or entire GitHub |
Here are additional tools that are available only for Qodo Merge users:
| Feature | Description |
| ------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------- |
| [**Custom Prompt Suggestions**](https://qodo-merge-docs.qodo.ai/tools/custom_prompt/) | Generate code suggestions based on custom prompts from the user |
| [**Analyze PR components**](https://qodo-merge-docs.qodo.ai/tools/analyze/) | Identify the components that changed in the PR, and enable to interactively apply different tools to them |
| [**Tests**](https://qodo-merge-docs.qodo.ai/tools/test/) | Generate tests for code components that changed in the PR |
| [**PR documentation**](https://qodo-merge-docs.qodo.ai/tools/documentation/) | Generate docstring for code components that changed in the PR |
| [**Improve Component**](https://qodo-merge-docs.qodo.ai/tools/improve_component/) | Generate code suggestions for code components that changed in the PR |
| [**Similar code search**](https://qodo-merge-docs.qodo.ai/tools/similar_code/) | Search for similar code in the repository, organization, or entire GitHub |
| [**Code implementation**](https://qodo-merge-docs.qodo.ai/tools/implement/) | Generates implementation code from review suggestions |
### Supported languages
Qodo Merge Pro leverages the world's leading code models - Claude 3.5 Sonnet and GPT-4.
Qodo Merge leverages the world's leading code models, such as Claude 4 Sonnet, o4-mini and Gemini-2.5-Pro.
As a result, its primary tools such as `describe`, `review`, and `improve`, as well as the PR-chat feature, support virtually all programming languages.
For specialized commands that require static code analysis, Qodo Merge Pro offers support for specific languages. For more details about features that require static code analysis, please refer to the [documentation](https://qodo-merge-docs.qodo.ai/tools/analyze/#overview).
For specialized commands that require static code analysis, Qodo Merge offers support for specific languages. For more details about features that require static code analysis, please refer to the [documentation](https://qodo-merge-docs.qodo.ai/tools/analyze/#overview).

View File

@ -0,0 +1,254 @@
# Qodo Merge Pull Request Benchmark
## Methodology
Qodo Merge PR Benchmark evaluates and compares the performance of Large Language Models (LLMs) in analyzing pull request code and providing meaningful code suggestions.
Our diverse dataset comprises of 400 pull requests from over 100 repositories, spanning various programming languages and frameworks to reflect real-world scenarios.
- For each pull request, we have pre-generated suggestions from [11](https://qodo-merge-docs.qodo.ai/pr_benchmark/#models-used-for-generating-the-benchmark-baseline) different top-performing models using the Qodo Merge `improve` tool. The prompt for response generation can be found [here](https://github.com/qodo-ai/pr-agent/blob/main/pr_agent/settings/code_suggestions/pr_code_suggestions_prompts_not_decoupled.toml).
- To benchmark a model, we generate its suggestions for the same pull requests and ask a high-performing judge model to **rank** the new model's output against the 11 pre-generated baseline suggestions. We utilize OpenAI's `o3` model as the judge, though other models have yielded consistent results. The prompt for this ranking judgment is available [here](https://github.com/Codium-ai/pr-agent-settings/tree/main/benchmark).
- We aggregate ranking outcomes across all pull requests, calculating performance metrics for the evaluated model. We also analyze the qualitative feedback from the judge to identify the model's comparative strengths and weaknesses against the established baselines.
This approach provides not just a quantitative score but also a detailed analysis of each model's strengths and weaknesses.
[//]: # (Note that this benchmark focuses on quality: the ability of an LLM to process complex pull request with multiple files and nuanced task to produce high-quality code suggestions.)
[//]: # (Other factors like speed, cost, and availability, while also relevant for model selection, are outside this benchmark's scope. We do specify the thinking budget used by each model, which can be a factor in the model's performance.)
[//]: # ()
## PR Benchmark Results
<table>
<thead>
<tr>
<th style="text-align:left;">Model Name</th>
<th style="text-align:left;">Version (Date)</th>
<th style="text-align:left;">Thinking budget tokens</th>
<th style="text-align:center;">Score</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:left;">o3</td>
<td style="text-align:left;">2025-04-16</td>
<td style="text-align:left;">'medium' (<a href="https://ai.google.dev/gemini-api/docs/openai">8000</a>)</td>
<td style="text-align:center;"><b>62.5</b></td>
</tr>
<tr>
<td style="text-align:left;">o4-mini</td>
<td style="text-align:left;">2025-04-16</td>
<td style="text-align:left;">'medium' (<a href="https://ai.google.dev/gemini-api/docs/openai">8000</a>)</td>
<td style="text-align:center;"><b>57.7</b></td>
</tr>
<tr>
<td style="text-align:left;">Gemini-2.5-pro</td>
<td style="text-align:left;">2025-06-05</td>
<td style="text-align:left;">4096</td>
<td style="text-align:center;"><b>56.3</b></td>
</tr>
<tr>
<td style="text-align:left;">Gemini-2.5-pro</td>
<td style="text-align:left;">2025-06-05</td>
<td style="text-align:left;">1024</td>
<td style="text-align:center;"><b>44.3</b></td>
</tr>
<tr>
<td style="text-align:left;">Claude-4-sonnet</td>
<td style="text-align:left;">2025-05-14</td>
<td style="text-align:left;">4096</td>
<td style="text-align:center;"><b>39.7</b></td>
</tr>
<tr>
<td style="text-align:left;">Claude-4-sonnet</td>
<td style="text-align:left;">2025-05-14</td>
<td style="text-align:left;"></td>
<td style="text-align:center;"><b>39.0</b></td>
</tr>
<tr>
<td style="text-align:left;">Codex-mini</td>
<td style="text-align:left;">2025-06-20</td>
<td style="text-align:left;"><a href="https://platform.openai.com/docs/models/codex-mini-latest">unknown</a></td>
<td style="text-align:center;"><b>37.2</b></td>
</tr>
<tr>
<td style="text-align:left;">Gemini-2.5-flash</td>
<td style="text-align:left;">2025-04-17</td>
<td style="text-align:left;"></td>
<td style="text-align:center;"><b>33.5</b></td>
</tr>
<tr>
<td style="text-align:left;">Claude-3.7-sonnet</td>
<td style="text-align:left;">2025-02-19</td>
<td style="text-align:left;"></td>
<td style="text-align:center;"><b>32.4</b></td>
</tr>
<tr>
<td style="text-align:left;">GPT-4.1</td>
<td style="text-align:left;">2025-04-14</td>
<td style="text-align:left;"></td>
<td style="text-align:center;"><b>26.5</b></td>
</tr>
</tbody>
</table>
## Results Analysis
### O3
Final score: **62.5**
strengths:
- **High precision & compliance:** Generally respects task rules (limits, “added lines” scope, YAML schema) and avoids false-positive advice, often returning an empty list when appropriate.
- **Clear, actionable output:** Suggestions are concise, well-explained and include correct before/after patches, so reviewers can apply them directly.
- **Good critical-bug detection rate:** Frequently spots compile-breakers or obvious runtime faults (nil / NPE, overflow, race, wrong selector, etc.), putting it at least on par with many peers.
- **Consistent formatting:** Produces syntactically valid YAML with correct labels, making automated consumption easy.
weaknesses:
- **Narrow coverage:** Tends to stop after 1-2 issues; regularly misses additional critical defects that better answers catch, so it is seldom the top-ranked review.
- **Occasional inaccuracies:** A few replies introduce new bugs, give partial/duplicate fixes, or (rarely) violate rules (e.g., import suggestions), hurting trust.
- **Conservative bias:** Prefers silence over risk; while this keeps precision high, it lowers recall and overall usefulness on larger diffs.
- **Little added insight:** Rarely offers broader context, optimisations or holistic improvements, causing it to rank only mid-tier in many comparisons.
### O4 Mini ('medium' thinking tokens)
Final score: **57.7**
strengths:
- **Good rule adherence:** Most answers respect the “new-lines only”, 3-suggestion, and YAML-schema limits, and frequently choose the safe empty list when the diff truly adds no critical bug.
- **Clear, minimal patches:** When the model does spot a defect it usually supplies terse, valid before/after snippets and short, targeted explanations, making fixes easy to read and apply.
- **Language & domain breadth:** Demonstrates competence across many ecosystems (C/C++, Java, TS/JS, Go, Rust, Python, Bash, Markdown, YAML, SQL, CSS, translation files, etc.) and can detect both compile-time and runtime mistakes.
- **Often competitive:** In a sizeable minority of cases the model ties for best or near-best answer, occasionally being the only response to catch a subtle crash or build blocker.
weaknesses:
- **High miss rate:** A large share of examples show the model returning an empty list or only minor advice while other reviewers catch clear, high-impact bugs—indicative of weak defect-detection recall.
- **False or harmful fixes:** Several answers introduce new compilation errors, propose out-of-scope changes, or violate explicit rules (e.g., adding imports, version bumps, touching untouched lines), reducing trustworthiness.
- **Shallow coverage:** Even when it identifies one real issue it often stops there, missing additional critical problems found by stronger peers; breadth and depth are inconsistent.
### Gemini-2.5 Pro (4096 thinking tokens)
Final score: **56.3**
strengths:
- **High formatting compliance:** The model almost always produces valid YAML, respects the three-suggestion limit, and supplies clear before/after code snippets and short rationales.
- **Good “first-bug” detection:** It frequently notices the single most obvious regression (crash, compile error, nil/NPE risk, wrong path, etc.) and gives a minimal, correct patch—often judged “on-par” with other solid answers.
- **Clear, concise writing:** Explanations are brief yet understandable for reviewers; fixes are scoped to the changed lines and rarely include extraneous context.
- **Low rate of harmful fixes:** Truly dangerous or build-breaking advice is rare; most mistakes are omissions rather than wrong code.
weaknesses:
- **Limited breadth of review:** The model regularly stops after the first or second issue, missing additional critical problems that stronger answers surface, so it is often out-ranked by more comprehensive peers.
- **Occasional guideline violations:** A noticeable minority of answers touch unchanged lines, exceed the 3-item cap, suggest adding imports, or drop the required YAML wrapper, leading to automatic downgrades.
- **False positives / speculative fixes:** In several cases it flags non-issues (style, performance, redundant code) or supplies debatable “improvements”, lowering precision and sometimes breaching the “critical bugs only” rule.
- **Inconsistent error coverage:** For certain domains (build scripts, schema files, test code) it either returns an empty list when real regressions exist or proposes cosmetic edits, indicating gaps in specialised knowledge.
### Claude-4 Sonnet (4096 thinking tokens)
Final score: **39.7**
strengths:
- **High guideline & format compliance:** Almost always returns valid YAML, keeps ≤ 3 suggestions, avoids forbidden import/boiler-plate changes and provides clear before/after snippets.
- **Good pinpoint accuracy on single issues:** Frequently spots at least one real critical bug and proposes a concise, technically correct fix that compiles/runs.
- **Clarity & brevity of patches:** Explanations are short, actionable, and focused on changed lines, making the advice easy for reviewers to apply.
weaknesses:
- **Low coverage / recall:** Regularly surfaces only one minor issue (or none) while missing other, often more severe, problems caught by peer models.
- **High “empty-list” rate:** In many diffs the model returns no suggestions even when clear critical bugs exist, offering zero reviewer value.
- **Occasional incorrect or harmful fixes:** A non-trivial number of suggestions are speculative, contradict code intent, or would break compilation/runtime; sometimes duplicates or contradicts itself.
- **Inconsistent severity labelling & duplication:** Repeats the same point in multiple slots, marks cosmetic edits as “critical”, or leaves `improved_code` identical to original.
### Claude-4 Sonnet
Final score: **39.0**
strengths:
- **Consistently well-formatted & rule-compliant output:** Almost every answer follows the required YAML schema, keeps within the 3-suggestion limit, and returns an empty list when no issues are found, showing good instruction following.
- **Actionable, code-level patches:** When it does spot a defect the model usually supplies clear, minimal diffs or replacement snippets that compile / run, making the fix easy to apply.
- **Decent hit-rate on “obvious” bugs:** The model reliably catches the most blatant syntax errors, null-checks, enum / cast problems, and other first-order issues, so it often ties or slightly beats weaker baseline replies.
weaknesses:
- **Shallow coverage:** It frequently stops after one easy bug and overlooks additional, equally-critical problems that stronger reviewers find, leaving significant risks unaddressed.
- **False positives & harmful fixes:** In a noticeable minority of cases it misdiagnoses code, suggests changes that break compilation or behaviour, or flags non-issues, sometimes making its output worse than doing nothing.
- **Drifts into non-critical or out-of-scope advice:** The model regularly proposes style tweaks, documentation edits, or changes to unchanged lines, violating the “critical new-code only” requirement.
### Gemini-2.5 Flash
strengths:
- **High precision / low false-positive rate:** The model often stays silent or gives a single, well-justified fix, so when it does speak the suggestion is usually correct and seldom touches unchanged lines, keeping guideline compliance high.
- **Good guideline awareness:** YAML structure is consistently valid; suggestions rarely exceed the 3-item limit and generally restrict themselves to newly-added lines.
- **Clear, concise patches:** When a defect is found, the model produces short rationales and tidy “improved_code” blocks that reviewers can apply directly.
- **Risk-averse behaviour pays off in “no-bug” PRs:** In examples where the diff truly contained no critical issue, the models empty output ranked above peers that offered speculative or stylistic advice.
weaknesses:
- **Very low recall / shallow coverage:** In a large majority of cases it gives 0-1 suggestions and misses other evident, critical bugs highlighted by peer models, leading to inferior rankings.
- **Occasional incorrect or harmful fixes:** A noticeable subset of answers propose changes that break functionality or misunderstand the code (e.g. bad constant, wrong header logic, speculative rollbacks).
- **Non-actionable placeholders:** Some “improved_code” sections contain comments or “…” rather than real patches, reducing practical value.
### GPT-4.1
Final score: **26.5**
strengths:
- **Consistent format & guideline obedience:** Output is almost always valid YAML, within the 3-suggestion limit, and rarely touches lines not prefixed with “+”.
- **Low false-positive rate:** When no real defect exists, the model correctly returns an empty list instead of inventing speculative fixes, avoiding the “noise” many baseline answers add.
- **Clear, concise patches when it does act:** In the minority of cases where it detects a bug (e.g., ex-13, 46, 212), the fix is usually correct, minimal, and easy to apply.
weaknesses:
- **Very low recall / coverage:** In a large majority of examples it outputs an empty list or only 1 trivial suggestion while obvious critical issues remain unfixed; it systematically misses circular bugs, null-checks, schema errors, etc.
- **Shallow analysis:** Even when it finds one problem it seldom looks deeper, so more severe or additional bugs in the same diff are left unaddressed.
- **Occasional technical inaccuracies:** A noticeable subset of suggestions are wrong (mis-ordered assertions, harmful Bash `set` change, false dangling-reference claims) or carry metadata errors (mis-labeling files as “python”).
- **Repetitive / derivative fixes:** Many outputs duplicate earlier simplistic ideas (e.g., single null-check) without new insight, showing limited reasoning breadth.
### OpenAI codex-mini
final score: **37.2**
strengths:
- **Can spot high-impact defects:** When it “locks on”, codex-mini often identifies the main runtime or security regression (e.g., race-conditions, logic inversions, blocking I/O, resource leaks) and proposes a minimal, direct patch that compiles and respects neighbouring style.
- **Produces concise, scoped fixes:** Valid answers usually stay within the allowed 3-suggestion limit, reference only the added lines, and contain clear before/after snippets that reviewers can apply verbatim.
- **Occasional broad coverage:** In a minority of cases the model catches multiple independent issues (logic + tests + docs) and outperforms every baseline answer, showing good contextual understanding of heterogeneous diffs.
weaknesses:
- **Output instability / format errors:** A very large share of responses are unusable—plain refusals, shell commands, or malformed/empty YAML—indicating brittle adherence to the required schema and tanking overall usefulness.
- **Critical-miss rate:** Even when the format is correct the model frequently overlooks the single most serious bug the diff introduces, instead focusing on stylistic nits or speculative refactors.
- **Introduces new problems:** Several suggestions add unsupported APIs, undeclared variables, wrong types, or break compilation, hurting trust in the recommendations.
- **Rule violations:** It often edits lines outside the diff, exceeds the 3-suggestion cap, or labels cosmetic tweaks as “critical”, showing inconsistent guideline compliance.
## Appendix - models used for generating the benchmark baseline
- anthropic_sonnet_3.7_v1:0
- claude-4-opus-20250514
- claude-4-sonnet-20250514
- claude-4-sonnet-20250514_thinking_2048
- gemini-2.5-flash-preview-04-17
- gemini-2.5-pro-preview-05-06
- gemini-2.5-pro-preview-06-05_1024
- gemini-2.5-pro-preview-06-05_4096
- gpt-4.1
- o3
- o4-mini_medium

View File

@ -0,0 +1,21 @@
# Recent Updates and Future Roadmap
`Page last updated: 2025-07-01`
This page summarizes recent enhancements to Qodo Merge (last three months).
It also outlines our development roadmap for the upcoming three months. Please note that the roadmap is subject to change, and features may be adjusted, added, or reprioritized.
=== "Recent Updates"
- **Receiving Qodo Merge feedback locally**: You can receive automatic feedback from Qodo Merge on your local IDE after each commit. ([Learn more](https://github.com/qodo-ai/agents/tree/main/agents/qodo-merge-post-commit)).
- **Mermaid Diagrams**: Qodo Merge now generates by default Mermaid diagrams for PRs, providing a visual representation of code changes. ([Learn more](https://qodo-merge-docs.qodo.ai/tools/describe/#sequence-diagram-support))
- **Best Practices Hierarchy**: Introducing support for structured best practices, such as for folders in monorepos or a unified best practice file for a group of repositories. ([Learn more](https://qodo-merge-docs.qodo.ai/tools/improve/#global-hierarchical-best-practices))
- **Simplified Free Tier**: Qodo Merge now offers a simplified free tier with a monthly limit of 75 PR reviews per organization, replacing the previous two-week trial. ([Learn more](https://qodo-merge-docs.qodo.ai/installation/qodo_merge/#cloud-users))
- **CLI Endpoint**: A new Qodo Merge endpoint that accepts a lists of before/after code changes, executes Qodo Merge commands, and return the results. Currently available for enterprise customers. Contact [Qodo](https://www.qodo.ai/contact/) for more information.
- **Linear tickets support**: Qodo Merge now supports Linear tickets. ([Learn more](https://qodo-merge-docs.qodo.ai/core-abilities/fetching_ticket_context/#linear-integration))
- **Smart Update**: Upon PR updates, Qodo Merge will offer tailored code suggestions, addressing both the entire PR and the specific incremental changes since the last feedback ([Learn more](https://qodo-merge-docs.qodo.ai/core-abilities/incremental_update//))
=== "Future Roadmap"
- **Enhanced `review` tool**: Enhancing the `review` tool validate compliance across multiple categories including security, tickets, and custom best practices.
- **Smarter context retrieval**: Leverage AST and LSP analysis to gather relevant context from across the entire repository.
- **Enhanced portal experience**: Improved user experience in the Qodo Merge portal with new options and capabilities.

View File

@ -1,9 +1,11 @@
## Overview
The `analyze` tool combines advanced static code analysis with LLM capabilities to provide a comprehensive analysis of the PR code changes.
The tool scans the PR code changes, finds the code components (methods, functions, classes) that changed, and enables to interactively generate tests, docs, code suggestions and similar code search for each component.
It can be invoked manually by commenting on any PR:
```
/analyze
```
@ -14,6 +16,5 @@ An example result:
![Analyze 1](https://codium.ai/images/pr_agent/analyze_1.png){width=750}
**Notes**
- Language that are currently supported: Python, Java, C++, JavaScript, TypeScript, C#.
!!! note "Language that are currently supported:"
Python, Java, C++, JavaScript, TypeScript, C#, Go.

View File

@ -2,6 +2,7 @@
The `ask` tool answers questions about the PR, based on the PR code changes. Make sure to be specific and clear in your questions.
It can be invoked manually by commenting on any PR:
```
/ask "..."
```
@ -15,6 +16,7 @@ It can be invoked manually by commenting on any PR:
## Ask lines
You can run `/ask` on specific lines of code in the PR from the PR's diff view. The tool will answer questions based on the code changes in the selected lines.
- Click on the '+' sign next to the line number to select the line.
- To select multiple lines, click on the '+' sign of the first line and then hold and drag to select the rest of the lines.
- write `/ask "..."` in the comment box and press `Add single comment` button.
@ -28,32 +30,33 @@ Note that the tool does not have "memory" of previous questions, and answers eac
You can also ask questions about images that appear in the comment, where the entire PR code will be used as context.
<br>
The basic syntax is:
```
/ask "..."
[Image](https://real_link_to_image)
```
where `https://real_link_to_image` is the direct link to the image.
Note that GitHub has a built-in mechanism of pasting images in comments. However, pasted image does not provide a direct link.
To get a direct link to an image, we recommend using the following scheme:
1) First, post a comment that contains **only** the image:
1\. First, post a comment that contains **only** the image:
![Ask image1](https://codium.ai/images/pr_agent/ask_images1.png){width=512}
2) Quote reply to that comment:
2\. Quote reply to that comment:
![Ask image2](https://codium.ai/images/pr_agent/ask_images2.png){width=512}
3) In the screen opened, type the question below the image:
3\. In the screen opened, type the question below the image:
![Ask image3](https://codium.ai/images/pr_agent/ask_images3.png){width=512}
![Ask image4](https://codium.ai/images/pr_agent/ask_images4.png){width=512}
4) Post the comment, and receive the answer:
4\. Post the comment, and receive the answer:
![Ask image5](https://codium.ai/images/pr_agent/ask_images5.png){width=512}
See a full video tutorial [here](https://codium.ai/images/pr_agent/ask_image_video.mov)

View File

@ -18,20 +18,24 @@ The tool analyzes the failed checks and provides several feedbacks:
___
In addition to being automatically triggered, the tool can also be invoked manually by commenting on a PR:
```
/checks "https://github.com/{repo_name}/actions/runs/{run_number}/job/{job_number}"
```
where `{repo_name}` is the name of the repository, `{run_number}` is the run number of the failed check, and `{job_number}` is the job number of the failed check.
## Disabling the tool from running automatically
If you wish to disable the tool from running automatically, you can do so by adding the following configuration to the configuration file:
```
[checks]
enable_auto_checks_feedback = false
```
## Configuration options
- `enable_auto_checks_feedback` - if set to true, the tool will automatically provide feedback when a check is failed. Default is true.
- `excluded_checks_list` - a list of checks to exclude from the feedback, for example: ["check1", "check2"]. Default is an empty list.
- `persistent_comment` - if set to true, the tool will overwrite a previous checks comment with the new feedback. Default is true.

View File

@ -1,7 +1,9 @@
## Overview
The `generate_labels` tool scans the PR code changes, and given a list of labels and their descriptions, it automatically suggests labels that match the PR code changes.
It can be invoked manually by commenting on any PR:
```
/generate_labels
```
@ -19,21 +21,26 @@ When running the `generate_labels` tool on a PR that includes changes in SQL que
Note that in addition to the dedicated tool `generate_labels`, the custom labels will also be used by the `describe` tool.
### How to enable custom labels
There are 3 ways to enable custom labels:
#### 1. CLI (local configuration file)
When working from CLI, you need to apply the [configuration changes](#configuration-options) to the [custom_labels file](https://github.com/Codium-ai/pr-agent/blob/main/pr_agent/settings/custom_labels.toml):
#### 2. Repo configuration file
To enable custom labels, you need to apply the [configuration changes](#configuration-options) to the local `.pr_agent.toml` file in your repository.
#### 3. Handle custom labels from the Repo's labels page 💎
> This feature is available only in Qodo Merge Pro
> This feature is available only in Qodo Merge
* GitHub : `https://github.com/{owner}/{repo}/labels`, or click on the "Labels" tab in the issues or PRs page.
* GitLab : `https://gitlab.com/{owner}/{repo}/-/labels`, or click on "Manage" -> "Labels" on the left menu.
b. Add/edit the custom labels. It should be formatted as follows:
* Label name: The name of the custom label.
* Description: Start the description of with prefix `pr_agent:`, for example: `pr_agent: Description of when AI should suggest this label`.<br>
The description should be comprehensive and detailed, indicating when to add the desired label.
@ -45,8 +52,9 @@ c. Now the custom labels will be included in the `generate_labels` tool.
> This feature is supported in GitHub and GitLab.
## Configuration options
- Change `enable_custom_labels` to True: This will turn off the default labels and enable the custom labels provided in the custom_labels.toml file.
- Add the custom labels. It should be formatted as follows:
* Change `enable_custom_labels` to True: This will turn off the default labels and enable the custom labels provided in the custom_labels.toml file.
* Add the custom labels. It should be formatted as follows:
```
[config]

View File

@ -1,4 +1,5 @@
## Overview
The `custom_prompt` tool scans the PR code changes, and automatically generates suggestions for improving the PR code.
It shares similarities with the `improve` tool, but with one main difference: the `custom_prompt` tool will **only propose suggestions that follow specific guidelines defined by the prompt** in: `pr_custom_prompt.prompt` configuration.
@ -17,7 +18,7 @@ The code suggestions should focus only on the following:
With a [configuration file](../usage-guide/automations_and_usage.md#github-app), use the following template:
```
```toml
[pr_custom_prompt]
prompt="""\
The suggestions should focus only on the following:
@ -33,7 +34,8 @@ You might benefit from several trial-and-error iterations, until you get the cor
## Example usage
Here is an example of a possible prompt, defined in the configuration file:
```
```toml
[pr_custom_prompt]
prompt="""\
The code suggestions should focus only on the following:
@ -51,8 +53,8 @@ Results obtained with the prompt above:
## Configuration options
`prompt`: the prompt for the tool. It should be a multi-line string.
- `prompt`: the prompt for the tool. It should be a multi-line string.
`num_code_suggestions`: number of code suggestions provided by the 'custom_prompt' tool. Default is 4.
- `num_code_suggestions_per_chunk`: number of code suggestions provided by the 'custom_prompt' tool, per chunk. Default is 3.
`enable_help_text`: if set to true, the tool will display a help text in the comment. Default is true.
- `enable_help_text`: if set to true, the tool will display a help text in the comment. Default is true.

View File

@ -1,7 +1,9 @@
## Overview
The `describe` tool scans the PR code changes, and generates a description for the PR - title, type, summary, walkthrough and labels.
The tool can be triggered automatically every time a new PR is [opened](../usage-guide/automations_and_usage.md#github-app-automatic-tools-when-a-new-pr-is-opened), or it can be invoked manually by commenting on any PR:
```
/describe
```
@ -19,6 +21,7 @@ After ~30 seconds, the tool will generate a description for the PR:
![Describe New](https://codium.ai/images/pr_agent/describe_new.png){width=512}
If you want to edit [configurations](#configuration-options), add the relevant ones to the command:
```
/describe --pr_description.some_config1=... --pr_description.some_config2=...
```
@ -26,6 +29,7 @@ If you want to edit [configurations](#configuration-options), add the relevant o
### Automatic triggering
To run the `describe` automatically when a PR is opened, define in a [configuration file](https://qodo-merge-docs.qodo.ai/usage-guide/configuration_options/#wiki-configuration-file):
```
[github_app]
pr_commands = [
@ -41,62 +45,97 @@ publish_labels = true
- The `pr_commands` lists commands that will be executed automatically when a PR is opened.
- The `[pr_description]` section contains the configurations for the `describe` tool you want to edit (if any).
## Preserving the original user description
By default, Qodo Merge preserves your original PR description by placing it above the generated content.
This requires including your description during the initial PR creation.
Be aware that if you edit the description while the automated tool is running, a race condition may occur, potentially causing your original description to be lost.
When updating PR descriptions, the `/describe` tool considers everything above the "PR Type" field as user content and will preserve it.
Everything below this marker is treated as previously auto-generated content and will be replaced.
![Describe comment](https://codium.ai/images/pr_agent/pr_description_user_description.png){width=512}
## Sequence Diagram Support
The `/describe` tool includes a Mermaid sequence diagram showing component/function interactions.
This option is enabled by default via the `pr_description.enable_pr_diagram` param.
[//]: # (### How to enable\disable)
[//]: # ()
[//]: # (In your configuration:)
[//]: # ()
[//]: # (```)
[//]: # (toml)
[//]: # ([pr_description])
[//]: # (enable_pr_diagram = true)
[//]: # (```)
## Configuration options
!!! example "Possible configurations"
<table>
<tr>
<td><b>publish_labels</b></td>
<td>If set to true, the tool will publish labels to the PR. Default is false.</td>
</tr>
<tr>
<td><b>publish_description_as_comment</b></td>
<td>If set to true, the tool will publish the description as a comment to the PR. If false, it will overwrite the original description. Default is false.</td>
</tr>
<tr>
<td><b>publish_description_as_comment_persistent</b></td>
<td>If set to true and `publish_description_as_comment` is true, the tool will publish the description as a persistent comment to the PR. Default is true.</td>
</tr>
<tr>
<td><b>add_original_user_description</b></td>
<td>If set to true, the tool will add the original user description to the generated description. Default is true.</td>
</tr>
<tr>
<td><b>generate_ai_title</b></td>
<td>If set to true, the tool will also generate an AI title for the PR. Default is false.</td>
</tr>
<tr>
<td><b>extra_instructions</b></td>
<td>Optional extra instructions to the tool. For example: "focus on the changes in the file X. Ignore change in ..."</td>
</tr>
<tr>
<td><b>enable_pr_type</b></td>
<td>If set to false, it will not show the `PR type` as a text value in the description content. Default is true.</td>
</tr>
<tr>
<td><b>final_update_message</b></td>
<td>If set to true, it will add a comment message [`PR Description updated to latest commit...`](https://github.com/Codium-ai/pr-agent/pull/499#issuecomment-1837412176) after finishing calling `/describe`. Default is false.</td>
</tr>
<tr>
<td><b>enable_semantic_files_types</b></td>
<td>If set to true, "Changes walkthrough" section will be generated. Default is true.</td>
</tr>
<tr>
<td><b>collapsible_file_list</b></td>
<td>If set to true, the file list in the "Changes walkthrough" section will be collapsible. If set to "adaptive", the file list will be collapsible only if there are more than 8 files. Default is "adaptive".</td>
</tr>
<tr>
<td><b>enable_large_pr_handling</b></td>
<td>Pro feature. If set to true, in case of a large PR the tool will make several calls to the AI and combine them to be able to cover more files. Default is true.</td>
</tr>
<tr>
<td><b>enable_help_text</b></td>
<td>If set to true, the tool will display a help text in the comment. Default is false.</td>
</tr>
</table>
???+ example "Possible configurations"
<table>
<tr>
<td><b>publish_labels</b></td>
<td>If set to true, the tool will publish labels to the PR. Default is false.</td>
</tr>
<tr>
<td><b>publish_description_as_comment</b></td>
<td>If set to true, the tool will publish the description as a comment to the PR. If false, it will overwrite the original description. Default is false.</td>
</tr>
<tr>
<td><b>publish_description_as_comment_persistent</b></td>
<td>If set to true and `publish_description_as_comment` is true, the tool will publish the description as a persistent comment to the PR. Default is true.</td>
</tr>
<tr>
<td><b>add_original_user_description</b></td>
<td>If set to true, the tool will add the original user description to the generated description. Default is true.</td>
</tr>
<tr>
<td><b>generate_ai_title</b></td>
<td>If set to true, the tool will also generate an AI title for the PR. Default is false.</td>
</tr>
<tr>
<td><b>extra_instructions</b></td>
<td>Optional extra instructions to the tool. For example: "focus on the changes in the file X. Ignore change in ..."</td>
</tr>
<tr>
<td><b>enable_pr_type</b></td>
<td>If set to false, it will not show the `PR type` as a text value in the description content. Default is true.</td>
</tr>
<tr>
<td><b>final_update_message</b></td>
<td>If set to true, it will add a comment message [`PR Description updated to latest commit...`](https://github.com/Codium-ai/pr-agent/pull/499#issuecomment-1837412176) after finishing calling `/describe`. Default is false.</td>
</tr>
<tr>
<td><b>enable_semantic_files_types</b></td>
<td>If set to true, "Changes walkthrough" section will be generated. Default is true.</td>
</tr>
<tr>
<td><b>collapsible_file_list</b></td>
<td>If set to true, the file list in the "Changes walkthrough" section will be collapsible. If set to "adaptive", the file list will be collapsible only if there are more than 8 files. Default is "adaptive".</td>
</tr>
<tr>
<td><b>enable_large_pr_handling</b></td>
<td>Pro feature. If set to true, in case of a large PR the tool will make several calls to the AI and combine them to be able to cover more files. Default is true.</td>
</tr>
<tr>
<td><b>enable_help_text</b></td>
<td>If set to true, the tool will display a help text in the comment. Default is false.</td>
</tr>
<tr>
<td><b>enable_pr_diagram</b></td>
<td>If set to true, the tool will generate a horizontal Mermaid flowchart summarizing the main pull request changes. This field remains empty if not applicable. Default is true.</td>
</tr>
</table>
## Inline file summary 💎
@ -120,13 +159,13 @@ If you prefer to have the file summaries appear in the "Files changed" tab on ev
**Note**: that this feature is currently available only for GitHub.
## Markers template
To enable markers, set `pr_description.use_description_markers=true`.
Markers enable to easily integrate user's content and auto-generated content, with a template-like mechanism.
For example, if the PR original description was:
```
User content...
@ -139,21 +178,22 @@ pr_agent:summary
## PR Walkthrough:
pr_agent:walkthrough
```
The marker `pr_agent:type` will be replaced with the PR type, `pr_agent:summary` will be replaced with the PR summary, and `pr_agent:walkthrough` will be replaced with the PR walkthrough.
![Describe markers before](https://codium.ai/images/pr_agent/describe_markers_before.png){width=512}
&rarr;
becomes
![Describe markers after](https://codium.ai/images/pr_agent/describe_markers_after.png){width=512}
**Configuration params**:
- `use_description_markers`: if set to true, the tool will use markers template. It replaces every marker of the form `pr_agent:marker_name` with the relevant content. Default is false.
- `include_generated_by_header`: if set to true, the tool will add a dedicated header: 'Generated by PR Agent at ...' to any automatic content. Default is true.
## Custom labels
The default labels of the describe tool are quite generic, since they are meant to be used in any repo: [`Bug fix`, `Tests`, `Enhancement`, `Documentation`, `Other`].
You can define custom labels that are relevant for your repo and use cases.
@ -163,7 +203,9 @@ Make sure to provide proper title, and a detailed and well-phrased description f
Each label description should be a **conditional statement**, that indicates if to add the label to the PR or not, according to the PR content.
### Handle custom labels from a configuration file
Example for a custom labels configuration setup in a configuration file:
```
[config]
enable_custom_labels=true
@ -182,26 +224,25 @@ description = "use when a PR primarily contains new tests"
You can also control the custom labels that will be suggested by the `describe` tool from the repo's labels page:
* GitHub : go to `https://github.com/{owner}/{repo}/labels` (or click on the "Labels" tab in the issues or PRs page)
* GitLab : go to `https://gitlab.com/{owner}/{repo}/-/labels` (or click on "Manage" -> "Labels" on the left menu)
- GitHub : go to `https://github.com/{owner}/{repo}/labels` (or click on the "Labels" tab in the issues or PRs page)
- GitLab : go to `https://gitlab.com/{owner}/{repo}/-/labels` (or click on "Manage" -> "Labels" on the left menu)
Now add/edit the custom labels. they should be formatted as follows:
* Label name: The name of the custom label.
* Description: Start the description of with prefix `pr_agent:`, for example: `pr_agent: Description of when AI should suggest this label`.<br>
- Label name: The name of the custom label.
- Description: Start the description of with prefix `pr_agent:`, for example: `pr_agent: Description of when AI should suggest this label`.<br>
Examples for custom labels:
- `Main topic:performance` - pr_agent:The main topic of this PR is performance
- `New endpoint` - pr_agent:A new endpoint was added in this PR
- `SQL query` - pr_agent:A new SQL query was added in this PR
- `Dockerfile changes` - pr_agent:The PR contains changes in the Dockerfile
- ...
- `Main topic:performance` - pr_agent:The main topic of this PR is performance
- `New endpoint` - pr_agent:A new endpoint was added in this PR
- `SQL query` - pr_agent:A new SQL query was added in this PR
- `Dockerfile changes` - pr_agent:The PR contains changes in the Dockerfile
- ...
The description should be comprehensive and detailed, indicating when to add the desired label. For example:
![Add native custom labels](https://codium.ai/images/pr_agent/add_native_custom_labels.png){width=768}
## Usage Tips
!!! tip "Automation"
@ -211,14 +252,15 @@ The description should be comprehensive and detailed, indicating when to add the
```
meaning the `describe` tool will run automatically on every PR, with the default configurations.
- Markers are an alternative way to control the generated description, to give maximal control to the user. If you set:
- Markers are an alternative way to control the generated description, to give maximal control to the user. If you set:
```
pr_commands = ["/describe --pr_description.use_description_markers=true", ...]
```
the tool will replace every marker of the form `pr_agent:marker_name` in the PR description with the relevant content, where `marker_name` is one of the following:
* `type`: the PR type.
*`type`: the PR type.
* `summary`: the PR summary.
* `walkthrough`: the PR walkthrough.
- Note that when markers are enabled, if the original PR description does not contain any markers, the tool will not alter the description at all.
- Note that when markers are enabled, if the original PR description does not contain any markers, the tool will not alter the description at all.

View File

@ -1,7 +1,9 @@
## Overview
The `add_docs` tool scans the PR code changes, and automatically suggests documentation for any code components that changed in the PR (functions, classes, etc.).
It can be invoked manually by commenting on any PR:
```
/add_docs
```
@ -19,15 +21,36 @@ The tool will generate documentation for all the components that changed in the
![Docs single component](https://codium.ai/images/pr_agent/docs_single_component.png){width=768}
You can state a name of a specific component in the PR to get documentation only for that component:
```
/add_docs component_name
```
## Manual triggering
Comment `/add_docs` on a PR to invoke it manually.
## Automatic triggering
To automatically run the `add_docs` tool when a pull request is opened, define in a [configuration file](https://qodo-merge-docs.qodo.ai/usage-guide/configuration_options/):
```toml
[github_app]
pr_commands = [
"/add_docs",
...
]
```
The `pr_commands` list defines commands that run automatically when a PR is opened.
Since this is under the [github_app] section, it only applies when using the Qodo Merge GitHub App in GitHub environments.
## Configuration options
- `docs_style`: The exact style of the documentation (for python docstring). you can choose between: `google`, `numpy`, `sphinx`, `restructuredtext`, `plain`. Default is `sphinx`.
- `extra_instructions`: Optional extra instructions to the tool. For example: "focus on the changes in the file X. Ignore change in ...".
**Notes**
- `docs_style`: The exact style of the documentation (for python docstring). you can choose between: `google`, `numpy`, `sphinx`, `restructuredtext`, `plain`. Default is `sphinx`.
- `extra_instructions`: Optional extra instructions to the tool. For example: "focus on the changes in the file X. Ignore change in ...".
- Language that are currently fully supported: Python, Java, C++, JavaScript, TypeScript, C#.
- This tool can also be triggered interactively by using the [`analyze`](./analyze.md) tool.
!!! note "Notes"
- The following languages are currently supported: Python, Java, C++, JavaScript, TypeScript, C#.
- This tool can also be triggered interactively by using the [`analyze`](./analyze.md) tool.

View File

@ -1,13 +1,16 @@
## Overview
The `help` tool provides a list of all the available tools and their descriptions.
For Qodo Merge Pro users, it also enables to trigger each tool by checking the relevant box.
For Qodo Merge users, it also enables to trigger each tool by checking the relevant box.
It can be invoked manually by commenting on any PR:
```
/help
```
## Example usage
An example [result](https://github.com/Codium-ai/pr-agent/pull/546#issuecomment-1868524805):
![Help 1](https://codium.ai/images/pr_agent/help1.png){width=750}

View File

@ -0,0 +1,110 @@
## Overview
The `help_docs` tool can answer a free-text question based on a git documentation folder.
It can be invoked manually by commenting on any PR or Issue:
```
/help_docs "..."
```
Or configured to be triggered automatically when a [new issue is opened](#run-as-a-github-action).
The tool assumes by default that the documentation is located in the root of the repository, at `/docs` folder.
However, this can be customized by setting the `docs_path` configuration option:
```toml
[pr_help_docs]
repo_url = "" # The repository to use as context
docs_path = "docs" # The documentation folder
repo_default_branch = "main" # The branch to use in case repo_url overwritten
```
See more configuration options in the [Configuration options](#configuration-options) section.
## Example usage
[//]: # (#### Asking a question about this repository:)
[//]: # (![help_docs on the documentation of this repository]&#40;https://codium.ai/images/pr_agent/help_docs_comment.png&#41;{width=512})
**Asking a question about another repository**
![help_docs on the documentation of another repository](https://codium.ai/images/pr_agent/help_docs_comment_explicit_git.png){width=512}
**Response**:
![help_docs response](https://codium.ai/images/pr_agent/help_docs_response.png){width=512}
## Run automatically when a new issue is opened
You can configure PR-Agent to run `help_docs` automatically on any newly created issue.
This can be useful, for example, for providing immediate feedback to users who open issues with questions on open-source projects with extensive documentation.
Here's how:
1) Follow the steps depicted under [Run as a Github Action](https://qodo-merge-docs.qodo.ai/installation/github/#run-as-a-github-action) to create a new workflow, such as:`.github/workflows/help_docs.yml`:
2) Edit your yaml file to the following:
```yaml
name: Run pr agent on every opened issue, respond to user comments on an issue
#When the action is triggered
on:
issues:
types: [opened] #New issue
# Read env. variables
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
GITHUB_API_URL: ${{ github.api_url }}
GIT_REPO_URL: ${{ github.event.repository.clone_url }}
ISSUE_URL: ${{ github.event.issue.html_url || github.event.comment.html_url }}
ISSUE_BODY: ${{ github.event.issue.body || github.event.comment.body }}
OPENAI_KEY: ${{ secrets.OPENAI_KEY }}
# The actual set of actions
jobs:
issue_agent:
runs-on: ubuntu-latest
if: ${{ github.event.sender.type != 'Bot' }} #Do not respond to bots
# Set required permissions
permissions:
contents: read # For reading repository contents
issues: write # For commenting on issues
steps:
- name: Run PR Agent on Issues
if: ${{ env.ISSUE_URL != '' }}
uses: docker://codiumai/pr-agent:latest
with:
entrypoint: /bin/bash #Replace invoking cli.py directly with a shell
args: |
-c "cd /app && \
echo 'Running Issue Agent action step on ISSUE_URL=$ISSUE_URL' && \
export config__git_provider='github' && \
export github__user_token=$GITHUB_TOKEN && \
export github__base_url=$GITHUB_API_URL && \
export openai__key=$OPENAI_KEY && \
python -m pr_agent.cli --issue_url=$ISSUE_URL --pr_help_docs.repo_url="..." --pr_help_docs.docs_path="..." --pr_help_docs.openai_key=$OPENAI_KEY && \help_docs \"$ISSUE_BODY\""
```
3) Following completion of the remaining steps (such as adding secrets and relevant configurations, such as `repo_url` and `docs_path`) merge this change to your main branch.
When a new issue is opened, you should see a comment from `github-actions` bot with an auto response, assuming the question is related to the documentation of the repository.
---
## Configuration options
Under the section `pr_help_docs`, the [configuration file](https://github.com/Codium-ai/pr-agent/blob/main/pr_agent/settings/configuration.toml#L50) contains options to customize the 'help docs' tool:
- `repo_url`: If not overwritten, will use the repo from where the context came from (issue or PR), otherwise - use the given repo as context.
- `repo_default_branch`: The branch to use in case repo_url overwritten, otherwise - has no effect.
- `docs_path`: Relative path from root of repository (either the one this PR has been issued for, or above repo url).
- `exclude_root_readme`: Whether or not to exclude the root README file for querying the model.
- `supported_doc_exts` : Which file extensions should be included for the purpose of querying the model.
---

View File

@ -0,0 +1,57 @@
`Platforms supported: GitHub, GitLab, Bitbucket`
## Overview
The `implement` tool converts human code review discussions and feedback into ready-to-commit code changes.
It leverages LLM technology to transform PR comments and review suggestions into concrete implementation code, helping developers quickly turn feedback into working solutions.
## Usage Scenarios
=== "For Reviewers"
Reviewers can request code changes by:
1. Selecting the code block to be modified.
2. Adding a comment with the syntax:
```
/implement <code-change-description>
```
![implement1](https://codium.ai/images/pr_agent/implement1.png){width=640}
=== "For PR Authors"
PR authors can implement suggested changes by replying to a review comment using either:
1. Add specific implementation details as described above
```
/implement <code-change-description>
```
2. Use the original review comment as instructions
```
/implement
```
![implement2](https://codium.ai/images/pr_agent/implement2.png){width=640}
=== "For Referencing Comments"
You can reference and implement changes from any comment by:
```
/implement <link-to-review-comment>
```
![implement3](https://codium.ai/images/pr_agent/implement3.png){width=640}
Note that the implementation will occur within the review discussion thread.
## Configuration options
- Use `/implement` to implement code change within and based on the review discussion.
- Use `/implement <code-change-description>` inside a review discussion to implement specific instructions.
- Use `/implement <link-to-review-comment>` to indirectly call the tool from any comment.

View File

@ -1,16 +1,26 @@
## Overview
The `improve` tool scans the PR code changes, and automatically generates [meaningful](https://github.com/Codium-ai/pr-agent/blob/main/pr_agent/settings/pr_code_suggestions_prompts.toml#L41) suggestions for improving the PR code.
The `improve` tool scans the PR code changes, and automatically generates meaningful suggestions for improving the PR code.
The tool can be triggered automatically every time a new PR is [opened](../usage-guide/automations_and_usage.md#github-app-automatic-tools-when-a-new-pr-is-opened), or it can be invoked manually by commenting on any PR:
```toml
/improve
```
![code_suggestions_as_comment_closed.png](https://codium.ai/images/pr_agent/code_suggestions_as_comment_closed.png){width=512}
## How it looks
![code_suggestions_as_comment_open.png](https://codium.ai/images/pr_agent/code_suggestions_as_comment_open.png){width=512}
=== "Suggestions Overview"
![code_suggestions_as_comment_closed](https://codium.ai/images/pr_agent/code_suggestions_as_comment_closed.png){width=512}
Note that the `Apply this suggestion` checkbox, which interactively converts a suggestion into a commitable code comment, is available only for Qodo Merge Pro 💎 users.
=== "Selecting a specific suggestion"
![code_suggestions_as_comment_open](https://codium.ai/images/pr_agent/code_suggestions_as_comment_open.png){width=512}
___
!!! note "The following features are available only for Qodo Merge 💎 users:"
- The `Apply / Chat` checkbox, which interactively converts a suggestion into a committable code comment
- The `More` checkbox to generate additional suggestions
- On Bitbucket (Cloud & Data Center) and GitLab Server (v16 and earlier), you can invoke [More Suggestions manually](#manual-more-suggestions)
## Example usage
@ -18,25 +28,34 @@ Note that the `Apply this suggestion` checkbox, which interactively converts a s
Invoke the tool manually by commenting `/improve` on any PR. The code suggestions by default are presented as a single comment:
To edit [configurations](#configuration-options) related to the improve tool, use the following template:
To edit [configurations](#configuration-options) related to the `improve` tool, use the following template:
```toml
/improve --pr_code_suggestions.some_config1=... --pr_code_suggestions.some_config2=...
```
For example, you can choose to present all the suggestions as commitable code comments, by running the following command:
For example, you can choose to present all the suggestions as committable code comments, by running the following command:
```toml
/improve --pr_code_suggestions.commitable_code_suggestions=true
```
![improve](https://codium.ai/images/pr_agent/improve.png){width=512}
As can be seen, a single table comment has a significantly smaller PR footprint. We recommend this mode for most cases.
Also note that collapsible are not supported in _Bitbucket_. Hence, the suggestions can only be presented in Bitbucket as code comments.
#### Manual more suggestions
To generate more suggestions (distinct from the ones already generated), for git-providers that don't support interactive checkbox option, you can manually run:
```
/improve --more_suggestions=true
```
### Automatic triggering
To run the `improve` automatically when a PR is opened, define in a [configuration file](https://qodo-merge-docs.qodo.ai/usage-guide/configuration_options/#wiki-configuration-file):
```toml
[github_app]
pr_commands = [
@ -52,25 +71,28 @@ num_code_suggestions_per_chunk = ...
- The `pr_commands` lists commands that will be executed automatically when a PR is opened.
- The `[pr_code_suggestions]` section contains the configurations for the `improve` tool you want to edit (if any)
### Assessing Impact 💎
### Assessing Impact
Note that Qodo Merge pro tracks two types of implementations:
>`💎 feature`
Qodo Merge tracks two types of implementations for tracking implemented suggestions:
- Direct implementation - when the user directly applies the suggestion by clicking the `Apply` checkbox.
- Indirect implementation - when the user implements the suggestion in their IDE environment. In this case, Qodo Merge will utilize, after each commit, a dedicated logic to identify if a suggestion was implemented, and will mark it as implemented.
![code_suggestions_asses_impact](https://codium.ai/images/pr_agent/code_suggestions_asses_impact.png){width=512}
![code_suggestions_assess_impact](https://codium.ai/images/pr_agent/code_suggestions_asses_impact.png){width=512}
In post-process, Qodo Merge counts the number of suggestions that were implemented, and provides general statistics and insights about the suggestions' impact on the PR process.
![code_suggestions_asses_impact_stats_1](https://codium.ai/images/pr_agent/code_suggestions_asses_impact_stats_1.png){width=512}
![code_suggestions_assess_impact_stats_1](https://codium.ai/images/pr_agent/code_suggestions_asses_impact_stats_1.png){width=512}
![code_suggestions_asses_impact_stats_2](https://codium.ai/images/pr_agent/code_suggestions_asses_impact_stats_2.png){width=512}
![code_suggestions_assess_impact_stats_2](https://codium.ai/images/pr_agent/code_suggestions_asses_impact_stats_2.png){width=512}
## Suggestion tracking 💎
`Platforms supported: GitHub, GitLab`
## Suggestion tracking
Qodo Merge employs an novel detection system to automatically [identify](https://qodo-merge-docs.qodo.ai/core-abilities/impact_evaluation/) AI code suggestions that PR authors have accepted and implemented.
>`💎 feature. Platforms supported: GitHub, GitLab`
Qodo Merge employs a novel detection system to automatically [identify](https://qodo-merge-docs.qodo.ai/core-abilities/impact_evaluation/) AI code suggestions that PR authors have accepted and implemented.
Accepted suggestions are also automatically documented in a dedicated wiki page called `.pr_agent_accepted_suggestions`, allowing users to track historical changes, assess the tool's effectiveness, and learn from previously implemented recommendations in the repository.
An example [result](https://github.com/Codium-ai/pr-agent/wiki/.pr_agent_accepted_suggestions):
@ -95,9 +117,299 @@ This feature is controlled by a boolean configuration parameter: `pr_code_sugges
Instead, we leverage a dedicated private page, within your repository wiki, to track suggestions. This approach offers convenient secure suggestion tracking while avoiding pull requests or any noise to the main repository.
## `Extra instructions` and `best practices`
The `improve` tool can be further customized by providing additional instructions and best practices to the AI model.
### Extra instructions
You can use the `extra_instructions` configuration option to give the AI model additional instructions for the `improve` tool.
Be specific, clear, and concise in the instructions. With extra instructions, you are the prompter.
Examples for possible instructions:
```toml
[pr_code_suggestions]
extra_instructions="""\
(1) Answer in Japanese
(2) Don't suggest to add try-except block
(3) Ignore changes in toml files
...
"""
```
Use triple quotes to write multi-line instructions. Use bullet points or numbers to make the instructions more readable.
### Best practices
> `💎 feature. Platforms supported: GitHub, GitLab, Bitbucket`
Qodo Merge supports both simple and hierarchical best practices configurations to provide guidance to the AI model for generating relevant code suggestions.
???- tip "Writing effective best practices files"
The following guidelines apply to all best practices files:
- Write clearly and concisely
- Include brief code examples when helpful with before/after patterns
- Focus on project-specific guidelines that will result in relevant suggestions you actually want to get
- Keep each file relatively short, under 800 lines, since:
- AI models may not process effectively very long documents
- Long files tend to contain generic guidelines already known to AI
- Use pattern-based structure rather than simple bullet points for better clarity
???- tip "Example of a best practices file"
Pattern 1: Add proper error handling with try-except blocks around external function calls.
Example code before:
```python
# Some code that might raise an exception
return process_pr_data(data)
```
Example code after:
```python
try:
# Some code that might raise an exception
return process_pr_data(data)
except Exception as e:
logger.exception("Failed to process request", extra={"error": e})
```
Pattern 2: Add defensive null/empty checks before accessing object properties or performing operations on potentially null variables to prevent runtime errors.
Example code before:
```python
def get_pr_code(pr_data):
if "changed_code" in pr_data:
return pr_data.get("changed_code", "")
return ""
```
Example code after:
```python
def get_pr_code(pr_data):
if pr_data is None:
return ""
if "changed_code" in pr_data:
return pr_data.get("changed_code", "")
return ""
```
#### Local best practices
For basic usage, create a `best_practices.md` file in your repository's root directory containing a list of best practices, coding standards, and guidelines specific to your repository.
The AI model will use this `best_practices.md` file as a reference, and in case the PR code violates any of the guidelines, it will create additional suggestions, with a dedicated label: `Organization best practice`.
#### Global hierarchical best practices
For organizations managing multiple repositories with different requirements, Qodo Merge supports a hierarchical best practices system using a dedicated global configuration repository.
**Supported scenarios:**
1. **Standalone repositories**: Individual repositories can have their own specific best practices tailored to their unique requirements
2. **Groups of repositories**: Repositories can be mapped to shared group-level best practices for consistent standards across similar projects
3. **Monorepos with subprojects**: Large monorepos can have both repository-level and subproject-level best practices, with automatic path-based matching
#### Setting up global hierarchical best practices
1\. Create a new repository named `pr-agent-settings` in your organization/workspace.
2\. Build the folder hierarchy in your `pr-agent-settings` repository, for example:
```bash
pr-agent-settings/
├── metadata.yaml # Maps repos/folders to best practice paths
└── codebase_standards/ # Root for all best practice definitions
├── global/ # Global rules, inherited widely
│ └── best_practices.md
├── groups/ # For groups of repositories
│ ├── frontend_repos/
│ │ └── best_practices.md
│ ├── backend_repos/
│ │ └── best_practices.md
│ └── ...
├── qodo-merge/ # For standalone repositories
│ └── best_practices.md
├── qodo-monorepo/ # For monorepo-specific rules
│ ├── best_practices.md # Root level monorepo rules
│ ├── qodo-github/ # Subproject best practices
│ │ └── best_practices.md
│ └── qodo-gitlab/ # Another subproject
│ └── best_practices.md
└── ... # More repositories
```
3\. Define the metadata file `metadata.yaml` that maps your repositories to their relevant best practices paths, for example:
```yaml
# Standalone repos
qodo-merge:
best_practices_paths:
- "qodo-merge"
# Group-associated repos
repo_b:
best_practices_paths:
- "groups/backend_repos"
# Multi-group repos
repo_c:
best_practices_paths:
- "groups/frontend_repos"
- "groups/backend_repos"
# Monorepo with subprojects
qodo-monorepo:
best_practices_paths:
- "qodo-monorepo"
monorepo_subprojects:
qodo-github:
best_practices_paths:
- "qodo-monorepo/qodo-github"
qodo-gitlab:
best_practices_paths:
- "qodo-monorepo/qodo-gitlab"
```
4\. Set the following configuration in your global configuration file:
```toml
[best_practices]
enable_global_best_practices = true
```
???- info "Best practices priority and fallback behavior"
When global best practices are enabled, Qodo Merge follows this priority order:
1\. **Primary**: Global hierarchical best practices from `pr-agent-settings` repository:
1.1 If the repository is mapped in `metadata.yaml`, it uses the specified paths
1.2 For monorepos, it automatically collects best practices matching PR file paths
1.3 If no mapping exists, it falls back to the global best practices
2\. **Fallback**: Local repository `best_practices.md` file:
2.1 Used when global best practices are not found or configured
2.2 Acts as a safety net for repositories not yet configured in the global system
2.3 Local best practices are completely ignored when global best practices are successfully loaded
???- info "Edge cases and behavior"
- **Missing paths**: If specified paths in `metadata.yaml` don't exist in the file system, those paths are skipped
- **Monorepo subproject matching**: For monorepos, Qodo Merge automatically matches PR file paths against subproject paths to apply relevant best practices
- **Multiple group inheritance**: Repositories can inherit from multiple groups, and all applicable best practices are combined
[//]: # (#### Best practices for multiple languages)
[//]: # ()
[//]: # (For a git organization working with multiple programming languages, you can maintain a centralized global `best_practices.md` file containing language-specific guidelines.)
[//]: # (When reviewing pull requests, Qodo Merge automatically identifies the programming language and applies the relevant best practices from this file.)
[//]: # ()
[//]: # (To do this, structure your `best_practices.md` file using the following format:)
[//]: # ()
[//]: # (```)
[//]: # (# [Python])
[//]: # (...)
[//]: # (# [Java])
[//]: # (...)
[//]: # (# [JavaScript])
[//]: # (...)
[//]: # (```)
???- info "Dedicated label for best practices suggestions"
Best practice suggestions are labeled as `Organization best practice` by default.
To customize this label, modify it in your configuration file:
```toml
[best_practices]
organization_name = "..."
```
And the label will be: `{organization_name} best practice`.
#### Example results
![best_practice](https://codium.ai/images/pr_agent/org_best_practice.png){width=512}
### Auto best practices
>`💎 feature. Platforms supported: GitHub.`
`Auto best practices` is a novel Qodo Merge capability that:
1. Identifies recurring patterns from accepted suggestions
2. **Automatically** generates [best practices page](https://github.com/qodo-ai/pr-agent/wiki/.pr_agent_auto_best_practices) based on what your team consistently values
3. Applies these learned patterns to future code reviews
This creates an automatic feedback loop where the system continuously learns from your team's choices to provide increasingly relevant suggestions.
The system maintains two analysis phases:
- Open exploration for new issues
- Targeted checking against established best practices
Note that when a [custom best practices](https://qodo-merge-docs.qodo.ai/tools/improve/#best-practices) exist, Qodo Merge will still generate an 'auto best practices' wiki file, though it won't use it in the `improve` tool.
Learn more about utilizing 'auto best practices' in our [detailed guide](https://qodo-merge-docs.qodo.ai/core-abilities/auto_best_practices/).
#### Relevant configurations
```toml
[auto_best_practices]
# Disable all auto best practices usage or generation
enable_auto_best_practices = true
# Disable usage of auto best practices file in the 'improve' tool
utilize_auto_best_practices = true
# Extra instructions to the auto best practices generation prompt
extra_instructions = ""
# Max number of patterns to be detected
max_patterns = 5
```
### Multiple best practices sources
The `improve` tool will combine best practices from all available sources - global configuration, local configuration, and auto-generated files - to provide you with comprehensive recommendations.
### Combining 'extra instructions' and 'best practices'
> `💎 feature`
The `extra instructions` configuration is more related to the `improve` tool prompt. It can be used, for example, to avoid specific suggestions ("Don't suggest to add try-except block", "Ignore changes in toml files", ...) or to emphasize specific aspects or formats ("Answer in Japanese", "Give only short suggestions", ...)
In contrast, the `best_practices.md` file is a general guideline for the way code should be written in the repo.
Using a combination of both can help the AI model to provide relevant and tailored suggestions.
## Usage Tips
### Implementing the proposed code suggestions
Each generated suggestion consists of three key elements:
1. A single-line summary of the proposed change
@ -105,14 +417,15 @@ Each generated suggestion consists of three key elements:
3. A diff snippet showing the recommended code modification (before and after)
We advise users to apply critical analysis and judgment when implementing the proposed suggestions.
In addition to mistakes (which may happen, but are rare), sometimes the presented code modification may serve more as an _illustrative example_ than a direct applicable solution.
In addition to mistakes (which may happen, but are rare), sometimes the presented code modification may serve more as an _illustrative example_ than a directly applicable solution.
In such cases, we recommend prioritizing the suggestion's detailed description, using the diff snippet primarily as a supporting reference.
### Dual publishing mode
Our recommended approach for presenting code suggestions is through a [table](https://qodo-merge-docs.qodo.ai/tools/improve/#overview) (`--pr_code_suggestions.commitable_code_suggestions=false`).
This method significantly reduces the PR footprint and allows for quick and easy digestion of multiple suggestions.
We also offer a complementary **dual publishing mode**. When enabled, suggestions exceeding a certain score threshold are not only displayed in the table, but also presented as commitable PR comments.
We also offer a complementary **dual publishing mode**. When enabled, suggestions exceeding a certain score threshold are not only displayed in the table, but also presented as committable PR comments.
This mode helps highlight suggestions deemed more critical.
To activate dual publishing mode, use the following setting:
@ -122,10 +435,31 @@ To activate dual publishing mode, use the following setting:
dual_publishing_score_threshold = x
```
Where x represents the minimum score threshold (>=) for suggestions to be presented as commitable PR comments in addition to the table. Default is -1 (disabled).
Where x represents the minimum score threshold (>=) for suggestions to be presented as committable PR comments in addition to the table. Default is -1 (disabled).
### Controlling suggestions depth
> `💎 feature`
You can control the depth and comprehensiveness of the code suggestions by using the `pr_code_suggestions.suggestions_depth` parameter.
Available options:
- `selective` - Shows only suggestions above a score threshold of 6
- `regular` - Default mode with balanced suggestion coverage
- `exhaustive` - Provides maximum suggestion comprehensiveness
(Alternatively, use numeric values: 1, 2, or 3 respectively)
We recommend starting with `regular` mode, then exploring `exhaustive` mode, which can provide more comprehensive suggestions and enhanced bug detection.
### Self-review
> `💎 feature. Platforms supported: GitHub, GitLab`
If you set in a configuration file:
```toml
[pr_code_suggestions]
demand_code_suggestions_self_review = true
@ -133,6 +467,7 @@ demand_code_suggestions_self_review = true
The `improve` tool will add a checkbox below the suggestions, prompting user to acknowledge that they have reviewed the suggestions.
You can set the content of the checkbox text via:
```toml
[pr_code_suggestions]
code_suggestions_self_review_text = "... (your text here) ..."
@ -140,7 +475,6 @@ code_suggestions_self_review_text = "... (your text here) ..."
![self_review_1](https://codium.ai/images/pr_agent/self_review_1.png){width=512}
!!! tip "Tip - Reducing visual footprint after self-review 💎"
The configuration parameter `pr_code_suggestions.fold_suggestions_on_self_review` (default is True)
@ -148,8 +482,6 @@ code_suggestions_self_review_text = "... (your text here) ..."
This reduces the visual footprint of the suggestions, and also indicates to the PR reviewer that the suggestions have been reviewed by the PR author, and don't require further attention.
!!! tip "Tip - Demanding self-review from the PR author 💎"
By setting:
@ -170,123 +502,28 @@ code_suggestions_self_review_text = "... (your text here) ..."
### How many code suggestions are generated?
Qodo Merge uses a dynamic strategy to generate code suggestions based on the size of the pull request (PR). Here's how it works:
1) Chunking large PRs:
#### 1. Chunking large PRs
- Qodo Merge divides large PRs into 'chunks'.
- Each chunk contains up to `pr_code_suggestions.max_context_tokens` tokens (default: 14,000).
- Each chunk contains up to `pr_code_suggestions.max_context_tokens` tokens (default: 24,000).
2) Generating suggestions:
#### 2. Generating suggestions
- For each chunk, Qodo Merge generates up to `pr_code_suggestions.num_code_suggestions_per_chunk` suggestions (default: 4).
This approach has two main benefits:
- Scalability: The number of suggestions scales with the PR size, rather than being fixed.
- Quality: By processing smaller chunks, the AI can maintain higher quality suggestions, as larger contexts tend to decrease AI performance.
Note: Chunking is primarily relevant for large PRs. For most PRs (up to 500 lines of code), Qodo Merge will be able to process the entire code in a single call.
### 'Extra instructions' and 'best practices'
#### Extra instructions
>`Platforms supported: GitHub, GitLab, Bitbucket`
You can use the `extra_instructions` configuration option to give the AI model additional instructions for the `improve` tool.
Be specific, clear, and concise in the instructions. With extra instructions, you are the prompter. Specify relevant aspects that you want the model to focus on.
Examples for possible instructions:
```toml
[pr_code_suggestions]
extra_instructions="""\
(1) Answer in japanese
(2) Don't suggest to add try-excpet block
(3) Ignore changes in toml files
...
"""
```
Use triple quotes to write multi-line instructions. Use bullet points or numbers to make the instructions more readable.
#### Best practices 💎
>`Platforms supported: GitHub, GitLab`
Another option to give additional guidance to the AI model is by creating a dedicated [**wiki page**](https://github.com/Codium-ai/pr-agent/wiki) called `best_practices.md`.
This page can contain a list of best practices, coding standards, and guidelines that are specific to your repo/organization.
The AI model will use this wiki page as a reference, and in case the PR code violates any of the guidelines, it will suggest improvements accordingly, with a dedicated label: `Organization
best practice`.
Example for a `best_practices.md` content can be found [here](https://github.com/Codium-ai/pr-agent/blob/main/docs/docs/usage-guide/EXAMPLE_BEST_PRACTICE.md) (adapted from Google's [pyguide](https://google.github.io/styleguide/pyguide.html)).
This file is only an example. Since it is used as a prompt for an AI model, we want to emphasize the following:
- It should be written in a clear and concise manner
- If needed, it should give short relevant code snippets as examples
- Recommended to limit the text to 800 lines or fewer. Heres why:
1) Extremely long best practices documents may not be fully processed by the AI model.
2) A lengthy file probably represent a more "**generic**" set of guidelines, which the AI model is already familiar with. The objective is to focus on a more targeted set of guidelines tailored to the specific needs of this project.
##### Local and global best practices
By default, Qodo Merge will look for a local `best_practices.md` wiki file in the root of the relevant local repo.
If you want to enable also a global `best_practices.md` wiki file, set first in the global configuration file:
```toml
[best_practices]
enable_global_best_practices = true
```
Then, create a `best_practices.md` wiki file in the root of [global](https://qodo-merge-docs.qodo.ai/usage-guide/configuration_options/#global-configuration-file) configuration repository, `pr-agent-settings`.
##### Best practices for multiple languages
For a git organization working with multiple programming languages, you can maintain a centralized global `best_practices.md` file containing language-specific guidelines.
When reviewing pull requests, Qodo Merge automatically identifies the programming language and applies the relevant best practices from this file.
Structure your `best_practices.md` file using the following format:
```
# [Python]
...
# [Java]
...
# [JavaScript]
...
```
##### Dedicated label for best practices suggestions
Best practice suggestions are labeled as `Organization best practice` by default.
To customize this label, modify it in your configuration file:
```toml
[best_practices]
organization_name = ""
```
And the label will be: `{organization_name} best practice`.
##### Example results
![best_practice](https://codium.ai/images/pr_agent/org_best_practice.png){width=512}
#### How to combine `extra instructions` and `best practices`
The `extra instructions` configuration is more related to the `improve` tool prompt. It can be used, for example, to avoid specific suggestions ("Don't suggest to add try-except block", "Ignore changes in toml files", ...) or to emphasize specific aspects or formats ("Answer in Japanese", "Give only short suggestions", ...)
In contrast, the `best_practices.md` file is a general guideline for the way code should be written in the repo.
Using a combination of both can help the AI model to provide relevant and tailored suggestions.
Note: Chunking is primarily relevant for large PRs. For most PRs (up to 600 lines of code), Qodo Merge will be able to process the entire code in a single call.
## Configuration options
??? example "General options"
???+ example "General options"
<table>
<tr>
@ -295,11 +532,19 @@ Using a combination of both can help the AI model to provide relevant and tailor
</tr>
<tr>
<td><b>commitable_code_suggestions</b></td>
<td>If set to true, the tool will display the suggestions as commitable code comments. Default is false.</td>
<td>If set to true, the tool will display the suggestions as committable code comments. Default is false.</td>
</tr>
<tr>
<td><b>enable_chat_in_code_suggestions</b></td>
<td>If set to true, QM bot will interact with comments made on code changes it has proposed. Default is true.</td>
</tr>
<tr>
<td><b>suggestions_depth 💎</b></td>
<td> Controls the depth of the suggestions. Can be set to 'selective', 'regular', or 'exhaustive'. Default is 'regular'.</td>
</tr>
<tr>
<td><b>dual_publishing_score_threshold</b></td>
<td>Minimum score threshold for suggestions to be presented as commitable PR comments in addition to the table. Default is -1 (disabled).</td>
<td>Minimum score threshold for suggestions to be presented as committable PR comments in addition to the table. Default is -1 (disabled).</td>
</tr>
<tr>
<td><b>focus_only_on_problems</b></td>
@ -307,7 +552,7 @@ Using a combination of both can help the AI model to provide relevant and tailor
</tr>
<tr>
<td><b>persistent_comment</b></td>
<td>If set to true, the improve comment will be persistent, meaning that every new improve request will edit the previous one. Default is false.</td>
<td>If set to true, the improve comment will be persistent, meaning that every new improve request will edit the previous one. Default is true.</td>
</tr>
<tr>
<td><b>suggestions_score_threshold</b></td>
@ -317,6 +562,10 @@ Using a combination of both can help the AI model to provide relevant and tailor
<td><b>apply_suggestions_checkbox</b></td>
<td> Enable the checkbox to create a committable suggestion. Default is true.</td>
</tr>
<tr>
<td><b>enable_more_suggestions_checkbox</b></td>
<td> Enable the checkbox to generate more suggestions. Default is true.</td>
</tr>
<tr>
<td><b>enable_help_text</b></td>
<td>If set to true, the tool will display a help text in the comment. Default is true.</td>
@ -325,13 +574,20 @@ Using a combination of both can help the AI model to provide relevant and tailor
<td><b>enable_chat_text</b></td>
<td>If set to true, the tool will display a reference to the PR chat in the comment. Default is true.</td>
</tr>
<tr>
<td><b>publish_output_no_suggestions</b></td>
<td>If set to true, the tool will publish a comment even if no suggestions were found. Default is true.</td>
<tr>
<td><b>wiki_page_accepted_suggestions</b></td>
<td>If set to true, the tool will automatically track accepted suggestions in a dedicated wiki page called `.pr_agent_accepted_suggestions`. Default is true.</td>
</tr>
<tr>
<td><b>allow_thumbs_up_down</b></td>
<td>If set to true, all code suggestions will have thumbs up and thumbs down buttons, to encourage users to provide feedback on the suggestions. Default is false. Note that this feature is for statistics tracking. It will not affect future feedback from the AI model.</td>
</tr>
</table>
??? example "Params for number of suggestions and AI calls"
???+ example "Params for number of suggestions and AI calls"
<table>
<tr>
@ -340,26 +596,21 @@ Using a combination of both can help the AI model to provide relevant and tailor
</tr>
<tr>
<td><b>num_code_suggestions_per_chunk</b></td>
<td>Number of code suggestions provided by the 'improve' tool, per chunk. Default is 4.</td>
<td>Number of code suggestions provided by the 'improve' tool, per chunk. Default is 3.</td>
</tr>
<tr>
<td><b>max_number_of_calls</b></td>
<td>Maximum number of chunks. Default is 3.</td>
</tr>
<tr>
<td><b>rank_extended_suggestions</b></td>
<td>If set to true, the tool will rank the suggestions, based on importance. Default is true.</td>
</tr>
</table>
## A note on code suggestions quality
## Understanding AI Code Suggestions
- AI models for code are getting better and better (Sonnet-3.5 and GPT-4), but they are not flawless. Not all the suggestions will be perfect, and a user should not accept all of them automatically. Critical reading and judgment are required.
- While mistakes of the AI are rare but can happen, a real benefit from the suggestions of the `improve` (and [`review`](https://qodo-merge-docs.qodo.ai/tools/review/)) tool is to catch, with high probability, **mistakes or bugs done by the PR author**, when they happen. So, it's a good practice to spend the needed ~30-60 seconds to review the suggestions, even if not all of them are always relevant.
- The hierarchical structure of the suggestions is designed to help the user to _quickly_ understand them, and to decide which ones are relevant and which are not:
- Only if the `Category` header is relevant, the user should move to the summarized suggestion description
- Only if the summarized suggestion description is relevant, the user should click on the collapsible, to read the full suggestion description with a code preview example.
- In addition, we recommend to use the [`extra_instructions`](https://qodo-merge-docs.qodo.ai/tools/improve/#extra-instructions-and-best-practices) field to guide the model to suggestions that are more relevant to the specific needs of the project.
- The interactive [PR chat](https://qodo-merge-docs.qodo.ai/chrome-extension/) also provides an easy way to get more tailored suggestions and feedback from the AI model.
- **AI Limitations:** AI models for code are getting better and better, but they are not flawless. Not all the suggestions will be perfect, and a user should not accept all of them automatically. Critical reading and judgment are required. Mistakes of the AI are rare but can happen, and it is usually quite easy for a human to spot them.
- **Purpose of Suggestions:**
- **Self-reflection:** The suggestions aim to enable developers to _self-reflect_ and improve their pull requests. This process can help to identify blind spots, uncover missed edge cases, and enhance code readability and coherency. Even when a specific code suggestion isn't suitable, the underlying issue it highlights often reveals something important that might deserve attention.
- **Bug detection:** The suggestions also alert on any _critical bugs_ that may have been identified during the analysis. This provides an additional safety net to catch potential issues before they make it into production. It's perfectly acceptable to implement only the suggestions you find valuable for your specific context.
- **Hierarchy:** Presenting the suggestions in a structured hierarchical table enables the user to _quickly_ understand them, and to decide which ones are relevant and which are not.
- **Customization:** To guide the model to suggestions that are more relevant to the specific needs of your project, we recommend using the [`extra_instructions`](https://qodo-merge-docs.qodo.ai/tools/improve/#extra-instructions-and-best-practices) and [`best practices`](https://qodo-merge-docs.qodo.ai/tools/improve/#best-practices) fields.
- **Model Selection:** SaaS users can also [choose](https://qodo-merge-docs.qodo.ai/usage-guide/qodo_merge_models/) between different models. For specific programming languages or use cases, some models may perform better than others.
- **Interactive usage:** The interactive [PR chat](https://qodo-merge-docs.qodo.ai/chrome-extension/) also provides an easy way to get more tailored suggestions and feedback from the AI model.

View File

@ -1,13 +1,14 @@
## Overview
The `improve_component` tool generates code suggestions for a specific code component that changed in the PR.
it can be invoked manually by commenting on any PR:
```
/improve_component component_name
```
To get a list of the components that changed in the PR and choose the relevant component interactively, use the [`analyze`](./analyze.md) tool.
## Example usage
Invoke the tool manually by commenting `/improve_component` on any PR:
@ -18,11 +19,12 @@ The tool will generate code suggestions for the selected component (if no compon
![improve_component2](https://codium.ai/images/pr_agent/improve_component2.png){width=768}
**Notes**
- Language that are currently supported by the tool: Python, Java, C++, JavaScript, TypeScript, C#.
- This tool can also be triggered interactively by using the [`analyze`](./analyze.md) tool.
!!! note "Notes"
- Language that are currently supported by the tool: Python, Java, C++, JavaScript, TypeScript, C#.
- This tool can also be triggered interactively by using the [`analyze`](./analyze.md) tool.
## Configuration options
- `num_code_suggestions`: number of code suggestions to provide. Default is 4
- `extra_instructions`: Optional extra instructions to the tool. For example: "focus on ...".
- `file`: in case there are several components with the same name, you can specify the relevant file.

View File

@ -8,15 +8,18 @@ Here is a list of Qodo Merge tools, each with a dedicated page that explains how
| **[PR Review (`/review`](./review.md))** | Adjustable feedback about the PR, possible issues, security concerns, review effort and more |
| **[Code Suggestions (`/improve`](./improve.md))** | Code suggestions for improving the PR |
| **[Question Answering (`/ask ...`](./ask.md))** | Answering free-text questions about the PR, or on specific code lines |
| **[Update Changelog (`/update_changelog`](./update_changelog.md))** | Automatically updating the CHANGELOG.md file with the PR changes |
| **[Find Similar Issue (`/similar_issue`](./similar_issues.md))** | Automatically retrieves and presents similar issues |
| **[Help (`/help`](./help.md))** | Provides a list of all the available tools. Also enables to trigger them interactively (💎) |
| **[Help Docs (`/help_docs`](./help_docs.md))** | Answer a free-text question based on a git documentation folder. |
| **[Update Changelog (`/update_changelog`](./update_changelog.md))** | Automatically updating the CHANGELOG.md file with the PR changes |
| **💎 [Add Documentation (`/add_docs`](./documentation.md))** | Generates documentation to methods/functions/classes that changed in the PR |
| **💎 [Generate Custom Labels (`/generate_labels`](./custom_labels.md))** | Generates custom labels for the PR, based on specific guidelines defined by the user |
| **💎 [Analyze (`/analyze`](./analyze.md))** | Identify code components that changed in the PR, and enables to interactively generate tests, docs, and code suggestions for each component |
| **💎 [Custom Prompt (`/custom_prompt`](./custom_prompt.md))** | Automatically generates custom suggestions for improving the PR code, based on specific guidelines defined by the user |
| **💎 [Generate Tests (`/test component_name`](./test.md))** | Automatically generates unit tests for a selected component, based on the PR code changes |
| **💎 [Improve Component (`/improve_component component_name`](./improve_component.md))** | Generates code suggestions for a specific code component that changed in the PR |
| **💎 [CI Feedback (`/checks ci_job`](./ci_feedback.md))** | Automatically generates feedback and analysis for a failed CI job |
| **💎 [Custom Prompt (`/custom_prompt`](./custom_prompt.md))** | Automatically generates custom suggestions for improving the PR code, based on specific guidelines defined by the user |
| **💎 [Generate Custom Labels (`/generate_labels`](./custom_labels.md))** | Generates custom labels for the PR, based on specific guidelines defined by the user |
| **💎 [Generate Tests (`/test`](./test.md))** | Automatically generates unit tests for a selected component, based on the PR code changes |
| **💎 [Implement (`/implement`](./implement.md))** | Generates implementation code from review suggestions |
| **💎 [Improve Component (`/improve_component component_name`](./improve_component.md))** | Generates code suggestions for a specific code component that changed in the PR |
| **💎 [Scan Repo Discussions (`/scan_repo_discussions`](./scan_repo_discussions.md))** | Generates `best_practices.md` file based on previous discussions in the repository |
| **💎 [Similar Code (`/similar_code`](./similar_code.md))** | Retrieves the most similar code components from inside the organization's codebase, or from open-source code. |
Note that the tools marked with 💎 are available only for Qodo Merge Pro users.
Note that the tools marked with 💎 are available only for Qodo Merge users.

View File

@ -1,7 +1,9 @@
## Overview
The `review` tool scans the PR code changes, and generates a list of feedbacks about the PR, aiming to aid the reviewing process.
<br>
The tool can be triggered automatically every time a new PR is [opened](../usage-guide/automations_and_usage.md#github-app-automatic-tools-when-a-new-pr-is-opened), or can be invoked manually by commenting on any PR:
```
/review
```
@ -10,7 +12,6 @@ Note that the main purpose of the `review` tool is to provide the **PR reviewer*
(Read more about the different personas in the PR process and how Qodo Merge aims to assist them in our [blog](https://www.codium.ai/blog/understanding-the-challenges-and-pain-points-of-the-pull-request-cycle/))
## Example usage
### Manual triggering
@ -24,6 +25,7 @@ After ~30 seconds, the tool will generate a review for the PR:
![review](https://codium.ai/images/pr_agent/review3.png){width=512}
If you want to edit [configurations](#configuration-options), add the relevant ones to the command:
```
/review --pr_reviewer.some_config1=... --pr_reviewer.some_config2=...
```
@ -31,6 +33,7 @@ If you want to edit [configurations](#configuration-options), add the relevant o
### Automatic triggering
To run the `review` automatically when a PR is opened, define in a [configuration file](https://qodo-merge-docs.qodo.ai/usage-guide/configuration_options/#wiki-configuration-file):
```
[github_app]
pr_commands = [
@ -39,144 +42,94 @@ pr_commands = [
]
[pr_reviewer]
num_code_suggestions = ...
extra_instructions = "..."
...
```
- The `pr_commands` lists commands that will be executed automatically when a PR is opened.
- The `[pr_reviewer]` section contains the configurations for the `review` tool you want to edit (if any).
[//]: # ()
[//]: # (### Incremental Mode)
[//]: # (Incremental review only considers changes since the last Qodo Merge review. This can be useful when working on the PR in an iterative manner, and you want to focus on the changes since the last review instead of reviewing the entire PR again.)
[//]: # (For invoking the incremental mode, the following command can be used:)
[//]: # (```)
[//]: # (/review -i)
[//]: # (```)
[//]: # (Note that the incremental mode is only available for GitHub.)
[//]: # ()
[//]: # (![incremental review]&#40;https://codium.ai/images/pr_agent/incremental_review_2.png&#41;{width=512})
[//]: # (### PR Reflection)
[//]: # ()
[//]: # (By invoking:)
[//]: # (```)
[//]: # (/reflect_and_review)
[//]: # (```)
[//]: # (The tool will first ask the author questions about the PR, and will guide the review based on their answers.)
[//]: # ()
[//]: # (![reflection questions]&#40;https://codium.ai/images/pr_agent/reflection_questions.png&#41;{width=512})
[//]: # ()
[//]: # (![reflection answers]&#40;https://codium.ai/images/pr_agent/reflection_answers.png&#41;{width=512})
[//]: # ()
[//]: # (![reflection insights]&#40;https://codium.ai/images/pr_agent/reflection_insights.png&#41;{width=512})
## Configuration options
!!! example "General options"
???+ example "General options"
<table>
<tr>
<td><b>num_code_suggestions</b></td>
<td>Number of code suggestions provided by the 'review' tool. Default is 0, meaning no code suggestions will be provided by the `review` tool.</td>
</tr>
<tr>
<td><b>inline_code_comments</b></td>
<td>If set to true, the tool will publish the code suggestions as comments on the code diff. Default is false. Note that you need to set `num_code_suggestions`>0 to get code suggestions </td>
</tr>
<tr>
<td><b>persistent_comment</b></td>
<td>If set to true, the review comment will be persistent, meaning that every new review request will edit the previous one. Default is true.</td>
</tr>
<tr>
<td><b>extra_instructions</b></td>
<td>Optional extra instructions to the tool. For example: "focus on the changes in the file X. Ignore change in ...".</td>
</tr>
<tr>
<td><b>enable_help_text</b></td>
<td>If set to true, the tool will display a help text in the comment. Default is true.</td>
</tr>
</table>
<table>
<tr>
<td><b>persistent_comment</b></td>
<td>If set to true, the review comment will be persistent, meaning that every new review request will edit the previous one. Default is true.</td>
</tr>
<tr>
<td><b>final_update_message</b></td>
<td>When set to true, updating a persistent review comment during online commenting will automatically add a short comment with a link to the updated review in the pull request .Default is true.</td>
</tr>
<tr>
<td><b>extra_instructions</b></td>
<td>Optional extra instructions to the tool. For example: "focus on the changes in the file X. Ignore change in ...".</td>
</tr>
<tr>
<td><b>enable_help_text</b></td>
<td>If set to true, the tool will display a help text in the comment. Default is true.</td>
</tr>
<tr>
<td><b>num_max_findings</b></td>
<td>Number of maximum returned findings. Default is 3.</td>
</tr>
</table>
!!! example "Enable\\disable specific sub-sections"
???+ example "Enable\\disable specific sub-sections"
<table>
<tr>
<td><b>require_score_review</b></td>
<td>If set to true, the tool will add a section that scores the PR. Default is false.</td>
</tr>
<tr>
<td><b>require_tests_review</b></td>
<td>If set to true, the tool will add a section that checks if the PR contains tests. Default is true.</td>
</tr>
<tr>
<td><b>require_estimate_effort_to_review</b></td>
<td>If set to true, the tool will add a section that estimates the effort needed to review the PR. Default is true.</td>
</tr>
<tr>
<td><b>require_can_be_split_review</b></td>
<td>If set to true, the tool will add a section that checks if the PR contains several themes, and can be split into smaller PRs. Default is false.</td>
</tr>
<tr>
<td><b>require_security_review</b></td>
<td>If set to true, the tool will add a section that checks if the PR contains a possible security or vulnerability issue. Default is true.</td>
</tr>
<tr>
<td><b>require_ticket_analysis_review</b></td>
<td>If set to true, and the PR contains a GitHub or Jira ticket link, the tool will add a section that checks if the PR in fact fulfilled the ticket requirements. Default is true.</td>
</tr>
</table>
<table>
<tr>
<td><b>require_score_review</b></td>
<td>If set to true, the tool will add a section that scores the PR. Default is false.</td>
</tr>
<tr>
<td><b>require_tests_review</b></td>
<td>If set to true, the tool will add a section that checks if the PR contains tests. Default is true.</td>
</tr>
<tr>
<td><b>require_estimate_effort_to_review</b></td>
<td>If set to true, the tool will add a section that estimates the effort needed to review the PR. Default is true.</td>
</tr>
<tr>
<td><b>require_can_be_split_review</b></td>
<td>If set to true, the tool will add a section that checks if the PR contains several themes, and can be split into smaller PRs. Default is false.</td>
</tr>
<tr>
<td><b>require_security_review</b></td>
<td>If set to true, the tool will add a section that checks if the PR contains a possible security or vulnerability issue. Default is true.</td>
</tr>
<tr>
<td><b>require_todo_scan</b></td>
<td>If set to true, the tool will add a section that lists TODO comments found in the PR code changes. Default is false.
</td>
</tr>
<tr>
<td><b>require_ticket_analysis_review</b></td>
<td>If set to true, and the PR contains a GitHub or Jira ticket link, the tool will add a section that checks if the PR in fact fulfilled the ticket requirements. Default is true.</td>
</tr>
</table>
!!! example "Adding PR labels"
???+ example "Adding PR labels"
You can enable\disable the `review` tool to add specific labels to the PR:
You can enable\disable the `review` tool to add specific labels to the PR:
<table>
<tr>
<td><b>enable_review_labels_security</b></td>
<td>If set to true, the tool will publish a 'possible security issue' label if it detects a security issue. Default is true.</td>
</tr>
<tr>
<td><b>enable_review_labels_effort</b></td>
<td>If set to true, the tool will publish a 'Review effort [1-5]: x' label. Default is true.</td>
</tr>
</table>
!!! example "Auto-approval"
If enabled, the `review` tool can approve a PR when a specific comment, `/review auto_approve`, is invoked.
<table>
<tr>
<td><b>enable_auto_approval</b></td>
<td>If set to true, the tool will approve the PR when invoked with the 'auto_approve' command. Default is false. This flag can be changed only from a configuration file.</td>
</tr>
<tr>
<td><b>maximal_review_effort</b></td>
<td>Maximal effort level for auto-approval. If the PR's estimated review effort is above this threshold, the auto-approval will not run. Default is 5.</td>
</tr>
</table>
<table>
<tr>
<td><b>enable_review_labels_security</b></td>
<td>If set to true, the tool will publish a 'possible security issue' label if it detects a security issue. Default is true.</td>
</tr>
<tr>
<td><b>enable_review_labels_effort</b></td>
<td>If set to true, the tool will publish a 'Review effort x/5' label (15 scale). Default is true.</td>
</tr>
</table>
## Usage Tips
!!! tip "General guidelines"
### General guidelines
!!! tip ""
The `review` tool provides a collection of configurable feedbacks about a PR.
It is recommended to review the [Configuration options](#configuration-options) section, and choose the relevant options for your use case.
@ -186,24 +139,40 @@ If enabled, the `review` tool can approve a PR when a specific comment, `/review
On the other hand, if you find one of the enabled features to be irrelevant for your use case, disable it. No default configuration can fit all use cases.
!!! tip "Automation"
### Automation
!!! tip ""
When you first install Qodo Merge app, the [default mode](../usage-guide/automations_and_usage.md#github-app-automatic-tools-when-a-new-pr-is-opened) for the `review` tool is:
```
pr_commands = ["/review --pr_reviewer.num_code_suggestions=0", ...]
pr_commands = ["/review", ...]
```
Meaning the `review` tool will run automatically on every PR, without providing code suggestions.
Meaning the `review` tool will run automatically on every PR, without any additional configurations.
Edit this field to enable/disable the tool, or to change the configurations used.
!!! tip "Possible labels from the review tool"
### Auto-generated PR labels by the Review Tool
The `review` tool can auto-generate two specific types of labels for a PR:
!!! tip ""
- a `possible security issue` label that detects if a possible [security issue](https://github.com/Codium-ai/pr-agent/blob/tr/user_description/pr_agent/settings/pr_reviewer_prompts.toml#L136) exists in the PR code (`enable_review_labels_security` flag)
- a `Review effort [1-5]: x` label, where x is the estimated effort to review the PR (`enable_review_labels_effort` flag)
The `review` can tool automatically add labels to your Pull Requests:
Both modes are useful, and we recommended to enable them.
- **`possible security issue`**: This label is applied if the tool detects a potential [security vulnerability](https://github.com/qodo-ai/pr-agent/blob/main/pr_agent/settings/pr_reviewer_prompts.toml#L103) in the PR's code. This feedback is controlled by the 'enable_review_labels_security' flag (default is true).
- **`review effort [x/5]`**: This label estimates the [effort](https://github.com/qodo-ai/pr-agent/blob/main/pr_agent/settings/pr_reviewer_prompts.toml#L90) required to review the PR on a relative scale of 1 to 5, where 'x' represents the assessed effort. This feedback is controlled by the 'enable_review_labels_effort' flag (default is true).
- **`ticket compliance`**: Adds a label indicating code compliance level ("Fully compliant" | "PR Code Verified" | "Partially compliant" | "Not compliant") to any GitHub/Jira/Linea ticket linked in the PR. Controlled by the 'require_ticket_labels' flag (default: false). If 'require_no_ticket_labels' is also enabled, PRs without ticket links will receive a "No ticket found" label.
!!! tip "Extra instructions"
### Auto-blocking PRs from being merged based on the generated labels
!!! tip ""
You can configure a CI/CD Action to prevent merging PRs with specific labels. For example, implement a dedicated [GitHub Action](https://medium.com/sequra-tech/quick-tip-block-pull-request-merge-using-labels-6cc326936221).
This approach helps ensure PRs with potential security issues or ticket compliance problems will not be merged without further review.
Since AI may make mistakes or lack complete context, use this feature judiciously. For flexibility, users with appropriate permissions can remove generated labels when necessary. When a label is removed, this action will be automatically documented in the PR discussion, clearly indicating it was a deliberate override by an authorized user to allow the merge.
### Extra instructions
!!! tip ""
Extra instructions are important.
The `review` tool can be configured with extra instructions, which can be used to guide the model to a feedback tailored to the needs of your project.
@ -222,39 +191,3 @@ If enabled, the `review` tool can approve a PR when a specific comment, `/review
"""
```
Use triple quotes to write multi-line instructions. Use bullet points to make the instructions more readable.
!!! tip "Auto-approval"
Qodo Merge can approve a PR when a specific comment is invoked.
To ensure safety, the auto-approval feature is disabled by default. To enable auto-approval, you need to actively set in a pre-defined configuration file the following:
```
[pr_reviewer]
enable_auto_approval = true
```
(this specific flag cannot be set with a command line argument, only in the configuration file, committed to the repository)
After enabling, by commenting on a PR:
```
/review auto_approve
```
Qodo Merge will automatically approve the PR, and add a comment with the approval.
You can also enable auto-approval only if the PR meets certain requirements, such as that the `estimated_review_effort` label is equal or below a certain threshold, by adjusting the flag:
```
[pr_reviewer]
maximal_review_effort = 5
```
[//]: # (!!! tip "Code suggestions")
[//]: # ()
[//]: # ( If you set `num_code_suggestions`>0 , the `review` tool will also provide code suggestions.)
[//]: # ( )
[//]: # ( Notice If you are interested **only** in the code suggestions, it is recommended to use the [`improve`]&#40;./improve.md&#41; feature instead, since it is a dedicated only to code suggestions, and usually gives better results.)
[//]: # ( Use the `review` tool if you want to get more comprehensive feedback, which includes code suggestions as well.)

View File

@ -0,0 +1,44 @@
`Platforms supported: GitHub`
## Overview
The `scan_repo_discussions` tool analyzes code discussions (meaning review comments over code lines) from merged pull requests over the past 12 months.
It processes these discussions alongside other PR metadata to identify recurring patterns related to best practices in team feedback and code reviews, generating a comprehensive [`best_practices.md`](https://github.com/qodo-ai/pr-agent/blob/qodo-merge-best-practices_2025-04-16_1018/best_practices.md) document that distills key insights and recommendations.
This file captures repository-specific patterns derived from your team's actual workflow and discussions, rather than more generic best practices.
It will be utilized by Qodo Merge to provide tailored suggestions for improving code quality in future pull requests.
!!! note "Active repositories are needed"
The tool is designed to work with real-life repositories, as it relies on actual discussions to generate meaningful insights.
At least 50 merged PRs are required to generate the `best_practices.md` file.
!!! note "Additional customization"
Teams are encouraged to further customize and refine these insights to better align with their specific development priorities and contexts.
This can be done by editing the `best_practices.md` file directly when the PR is created, or iteratively over time to enhance the 'best practices' suggestions provided by Qodo Merge.
The tool can be invoked manually by commenting on any PR:
```
/scan_repo_discussions
```
As a response, the bot will create a new PR that contains an auto-generated `best_practices.md` file.
Note that the scan can take several minutes to complete, since up to 250 PRs are scanned.
## Example usage
![scan1](https://codium.ai/images/pr_agent/scan_repo_discussions_1.png){width=640}
The PR created by the bot:
![scan1](https://codium.ai/images/pr_agent/scan_repo_discussions_2.png){width=640}
The `best_practices.md` file in the PR:
![scan1](https://codium.ai/images/pr_agent/scan_repo_discussions_3.png){width=640}
### Configuration options
- Use `/scan_repo_discussions --scan_repo_discussions.force_scan=true` to force generating a PR with a new `best_practices.md` file, even if it already exists (by default, the bot will not generate a new file if it already exists).
- Use `/scan_repo_discussions --scan_repo_discussions.days_back=X` to specify the number of days back to scan for discussions. The default is 365 days.
- Use `/scan_repo_discussions --scan_repo_discussions.minimal_number_of_prs=X` to specify the minimum number of merged PRs needed to generate the `best_practices.md` file. The default is 50 PRs.

View File

@ -1,4 +1,5 @@
## Overview
The similar code tool retrieves the most similar code components from inside the organization's codebase, or from open-source code.
For example:
@ -7,7 +8,6 @@ For example:
![similar code global](https://codium.ai/images/pr_agent/similar_code_global2.png){width=768}
Qodo Merge will examine the code component and will extract the most relevant keywords to search for similar code:
- `extracted keywords`: the keywords that were extracted from the code by Qodo Merge. the link will open a search page with the extracted keywords, to allow the user to modify the search if needed.
@ -19,18 +19,20 @@ Search result link example:
![code search result single](https://codium.ai/images/pr_agent/code_search_result_single.png){width=768}
`Organization Search`:
![similar code org](https://codium.ai/images/pr_agent/similar_code_org.png){width=768}
## How to use
### Manually
To invoke the `similar code` tool manually, comment on the PR:
```
/find_similar_component COMPONENT_NAME
```
Where `COMPONENT_NAME` should be the name of a code component in the PR (class, method, function).
If there is a name ambiguity, there are two configurations that will help the tool to find the correct component:
@ -39,23 +41,27 @@ If there is a name ambiguity, there are two configurations that will help the to
- `--pr_find_similar_component.class_name`: in case there are several methods with the same name in the same file, you can specify the relevant class name.
example:
```
/find_similar_component COMPONENT_NAME --pr_find_similar_component.file=FILE_NAME
```
### Automatically (via Analyze table)
It can be invoked automatically from the analyze table, can be accessed by:
```
/analyze
```
Choose the components you want to find similar code for, and click on the `similar` checkbox.
![analyze similar](https://codium.ai/images/pr_agent/analyze_similar.png){width=768}
If you are looking to search for similar code in the organization's codebase, you can click on the `Organization` checkbox, and it will invoke a new search command just for the organization's codebase.
You can search for similar code either within the organization's codebase or globally, which includes open-source repositories. Each result will include the relevant code components along with their associated license details.
![similar code global](https://codium.ai/images/pr_agent/similar_code_global.png){width=768}
## Configuration options
- `search_from_org`: if set to true, the tool will search for similar code in the organization's codebase. Default is false.

View File

@ -1,11 +1,12 @@
## Overview
The similar issue tool retrieves the most similar issues to the current issue.
It can be invoked manually by commenting on any PR:
```
/similar_issue
```
## Example usage
![similar_issue_original_issue](https://codium.ai/images/pr_agent/similar_issue_original_issue.png){width=768}
@ -16,24 +17,31 @@ It can be invoked manually by commenting on any PR:
Note that to perform retrieval, the `similar_issue` tool indexes all the repo previous issues (once).
### Selecting a Vector Database
**Select VectorDBs** by changing `pr_similar_issue` parameter in `configuration.toml` file
Configure your preferred database by changing the `pr_similar_issue` parameter in `configuration.toml` file.
#### Available Options
Choose from the following Vector Databases:
2 VectorDBs are available to switch in
1. LanceDB
2. Pinecone
To enable usage of the '**similar issue**' tool for Pinecone, you need to set the following keys in `.secrets.toml` (or in the relevant environment variables):
#### Pinecone Configuration
To use Pinecone with the `similar issue` tool, add these credentials to `.secrets.toml` (or set as environment variables):
```
[pinecone]
api_key = "..."
environment = "..."
```
These parameters can be obtained by registering to [Pinecone](https://app.pinecone.io/?sessionType=signup/).
## How to use
- To invoke the 'similar issue' tool from **CLI**, run:
`python3 cli.py --issue_url=... similar_issue`

View File

@ -1,9 +1,12 @@
## Overview
By combining LLM abilities with static code analysis, the `test` tool generate tests for a selected component, based on the PR code changes.
It can be invoked manually by commenting on any PR:
```
/test component_name
```
where 'component_name' is the name of a specific component in the PR.
To get a list of the components that changed in the PR and choose the relevant component interactively, use the [`analyze`](./analyze.md) tool.
@ -14,15 +17,14 @@ The tool will generate tests for the selected component (if no component is stat
![test1](https://codium.ai/images/pr_agent/test1.png){width=768}
(Example taken from [here](https://github.com/Codium-ai/pr-agent/pull/598#issuecomment-1913679429)):
**Notes**
- Language that are currently supported by the tool: Python, Java, C++, JavaScript, TypeScript, C#.
- This tool can also be triggered interactively by using the [`analyze`](./analyze.md) tool.
!!! note "Notes"
- The following languages are currently supported: Python, Java, C++, JavaScript, TypeScript, C#.
- This tool can also be triggered interactively by using the [`analyze`](./analyze.md) tool.
## Configuration options
- `num_tests`: number of tests to generate. Default is 3.
- `testing_framework`: the testing framework to use. If not set, for Python it will use `pytest`, for Java it will use `JUnit`, for C++ it will use `Catch2`, and for JavaScript and TypeScript it will use `jest`.
- `avoid_mocks`: if set to true, the tool will try to avoid using mocks in the generated tests. Note that even if this option is set to true, the tool might still use mocks if it cannot generate a test without them. Default is true.

View File

@ -1,6 +1,8 @@
## Overview
The `update_changelog` tool automatically updates the CHANGELOG.md file with the PR changes.
It can be invoked manually by commenting on any PR:
```
/update_changelog
```
@ -15,5 +17,7 @@ It can be invoked manually by commenting on any PR:
Under the section `pr_update_changelog`, the [configuration file](https://github.com/Codium-ai/pr-agent/blob/main/pr_agent/settings/configuration.toml#L50) contains options to customize the 'update changelog' tool:
- `push_changelog_changes`: whether to push the changes to CHANGELOG.md, or just print them. Default is false (print only).
- `extra_instructions`: Optional extra instructions to the tool. For example: "focus on the changes in the file X. Ignore change in ...
- `push_changelog_changes`: whether to push the changes to CHANGELOG.md, or just publish them as a comment. Default is false (publish as comment).
- `extra_instructions`: Optional extra instructions to the tool. For example: "Use the following structure: ..."
- `add_pr_link`: whether the model should try to add a link to the PR in the changelog. Default is true.
- `skip_ci_on_push`: whether the commit message (when `push_changelog_changes` is true) will include the term "[skip ci]", preventing CI tests to be triggered on the changelog commit. Default is true.

View File

@ -1,7 +1,8 @@
## Recommend Python Best Practices
This document outlines a series of recommended best practices for Python development. These guidelines aim to improve code quality, maintainability, and readability.
### Imports
### Imports
Use `import` statements for packages and modules only, not for individual types, classes, or functions.
@ -9,16 +10,16 @@ Use `import` statements for packages and modules only, not for individual type
Reusability mechanism for sharing code from one module to another.
#### Decision
#### Decision
- Use `import x` for importing packages and modules.
- Use `from x import y` where `x` is the package prefix and `y` is the module name with no prefix.
- Use `from x import y as z` in any of the following circumstances:
- Two modules named `y` are to be imported.
- `y` conflicts with a top-level name defined in the current module.
- `y` conflicts with a common parameter name that is part of the public API (e.g., `features`).
- `y` is an inconveniently long name, or too generic in the context of your code
- Use `import y as z` only when `z` is a standard abbreviation (e.g., `import numpy as np`).
- Use `import x` for importing packages and modules.
- Use `from x import y` where `x` is the package prefix and `y` is the module name with no prefix.
- Use `from x import y as z` in any of the following circumstances:
- Two modules named `y` are to be imported.
- `y` conflicts with a top-level name defined in the current module.
- `y` conflicts with a common parameter name that is part of the public API (e.g., `features`).
- `y` is an inconveniently long name, or too generic in the context of your code
- Use `import y as z` only when `z` is a standard abbreviation (e.g., `import numpy as np`).
For example the module `sound.effects.echo` may be imported as follows:
@ -35,13 +36,13 @@ Do not use relative names in imports. Even if the module is in the same package,
Exemptions from this rule:
- Symbols from the following modules are used to support static analysis and type checking:
- [`typing` module](https://google.github.io/styleguide/pyguide.html#typing-imports)
- [`collections.abc` module](https://google.github.io/styleguide/pyguide.html#typing-imports)
- [`typing_extensions` module](https://github.com/python/typing_extensions/blob/main/README.md)
- Redirects from the [six.moves module](https://six.readthedocs.io/#module-six.moves).
- Symbols from the following modules are used to support static analysis and type checking:
- [`typing` module](https://google.github.io/styleguide/pyguide.html#typing-imports)
- [`collections.abc` module](https://google.github.io/styleguide/pyguide.html#typing-imports)
- [`typing_extensions` module](https://github.com/python/typing_extensions/blob/main/README.md)
- Redirects from the [six.moves module](https://six.readthedocs.io/#module-six.moves).
### Packages
### Packages
Import each module using the full pathname location of the module.
@ -85,6 +86,7 @@ No:
The directory the main binary is located in should not be assumed to be in `sys.path` despite that happening in some environments. This being the case, code should assume that `import jodie` refers to a third-party or top-level package named `jodie`, not a local `jodie.py`.
### Default Iterators and Operators
Use default iterators and operators for types that support them, like lists, dictionaries, and files.
#### Definition
@ -125,7 +127,7 @@ Okay in most cases.
You can specify values for variables at the end of a functions parameter list, e.g., `def foo(a, b=0):`. If `foo` is called with only one argument, `b` is set to 0. If it is called with two arguments, `b` has the value of the second argument.
#### Decision
#### Decision
Okay to use with the following caveat:
@ -158,7 +160,6 @@ No: def foo(a, b: Mapping = {}): # Could still get passed to unchecked code.
### True/False Evaluations
Use the “implicit” false if possible, e.g., `if foo:` rather than `if foo != []:`
### Lexical Scoping
@ -175,11 +176,11 @@ def get_adder(summand1: float) -> Callable[[float], float]:
return adder
```
#### Decision
Okay to use.
### Threading
Do not rely on the atomicity of built-in types.

View File

@ -1,18 +0,0 @@
## Qodo Merge Pro Models
The default models used by Qodo Merge Pro are a combination of Claude-3.5-sonnet and OpenAI's GPT-4 models.
Users can configure Qodo Merge Pro to use solely a specific model by editing the [configuration](https://qodo-merge-docs.qodo.ai/usage-guide/configuration_options/) file.
For example, to restrict Qodo Merge Pro to using only `Claude-3.5-sonnet`, add this setting:
```
[config]
model="claude-3-5-sonnet"
```
Or to restrict Qodo Merge Pro to using only `GPT-4o`, add this setting:
```
[config]
model="gpt-4o"
```

View File

@ -1,32 +1,35 @@
## Show possible configurations
The possible configurations of Qodo Merge are stored in [here](https://github.com/Codium-ai/pr-agent/blob/main/pr_agent/settings/configuration.toml).
The possible configurations of Qodo Merge are stored in [here](https://github.com/Codium-ai/pr-agent/blob/main/pr_agent/settings/configuration.toml){:target="_blank"}.
In the [tools](https://qodo-merge-docs.qodo.ai/tools/) page you can find explanations on how to use these configurations for each tool.
To print all the available configurations as a comment on your PR, you can use the following command:
```
/config
```
![possible_config1](https://codium.ai/images/pr_agent/possible_config1.png){width=512}
To view the **actual** configurations used for a specific tool, after all the user settings are applied, you can add for each tool a `--config.output_relevant_configurations=true` suffix.
For example:
```
/improve --config.output_relevant_configurations=true
```
Will output an additional field showing the actual configurations used for the `improve` tool.
![possible_config2](https://codium.ai/images/pr_agent/possible_config2.png){width=512}
## Ignoring files from analysis
In some cases, you may want to exclude specific files or directories from the analysis performed by Qodo Merge. This can be useful, for example, when you have files that are generated automatically or files that shouldn't be reviewed, like vendor code.
You can ignore files or folders using the following methods:
- `IGNORE.GLOB`
- `IGNORE.REGEX`
- `IGNORE.GLOB`
- `IGNORE.REGEX`
which you can edit to ignore files or folders based on glob or regex patterns.
@ -37,42 +40,67 @@ Let's look at an example where we want to ignore all files with `.py` extension
To ignore Python files in a PR with online usage, comment on a PR:
`/review --ignore.glob="['*.py']"`
To ignore Python files in all PRs using `glob` pattern, set in a configuration file:
```
[ignore]
glob = ['*.py']
```
And to ignore Python files in all PRs using `regex` pattern, set in a configuration file:
```
[regex]
[ignore]
regex = ['.*\.py$']
```
## Extra instructions
All Qodo Merge tools have a parameter called `extra_instructions`, that enables to add free-text extra instructions. Example usage:
```
/update_changelog --pr_update_changelog.extra_instructions="Make sure to update also the version ..."
```
## Working with large PRs
## Language Settings
The default mode of CodiumAI is to have a single call per tool, using GPT-4, which has a token limit of 8000 tokens.
This mode provides a very good speed-quality-cost tradeoff, and can handle most PRs successfully.
When the PR is above the token limit, it employs a [PR Compression strategy](../core-abilities/index.md).
The default response language for Qodo Merge is **U.S. English**. However, some development teams may prefer to display information in a different language. For example, your team's workflow might improve if PR descriptions and code suggestions are set to your country's native language.
However, for very large PRs, or in case you want to emphasize quality over speed and cost, there are two possible solutions:
1) [Use a model](https://qodo-merge-docs.qodo.ai/usage-guide/changing_a_model/) with larger context, like GPT-32K, or claude-100K. This solution will be applicable for all the tools.
2) For the `/improve` tool, there is an ['extended' mode](https://qodo-merge-docs.qodo.ai/tools/improve/) (`/improve --extended`),
which divides the PR into chunks, and processes each chunk separately. With this mode, regardless of the model, no compression will be done (but for large PRs, multiple model calls may occur)
To configure this, set the `response_language` parameter in the configuration file. This will prompt the model to respond in the specified language. Use a **standard locale code** based on [ISO 3166](https://en.wikipedia.org/wiki/ISO_3166) (country codes) and [ISO 639](https://en.wikipedia.org/wiki/ISO_639) (language codes) to define a language-country pair. See this [comprehensive list of locale codes](https://simplelocalize.io/data/locales/).
Example:
```toml
[config]
response_language = "it-IT"
```
This will set the response language globally for all the commands to Italian.
> **Important:** Note that only dynamic text generated by the AI model is translated to the configured language. Static text such as labels and table headers that are not part of the AI models response will remain in US English. In addition, the model you are using must have good support for the specified language.
[//]: # (## Working with large PRs)
[//]: # ()
[//]: # (The default mode of CodiumAI is to have a single call per tool, using GPT-4, which has a token limit of 8000 tokens.)
[//]: # (This mode provides a very good speed-quality-cost tradeoff, and can handle most PRs successfully.)
[//]: # (When the PR is above the token limit, it employs a [PR Compression strategy]&#40;../core-abilities/index.md&#41;.)
[//]: # ()
[//]: # (However, for very large PRs, or in case you want to emphasize quality over speed and cost, there are two possible solutions:)
[//]: # (1&#41; [Use a model]&#40;https://qodo-merge-docs.qodo.ai/usage-guide/changing_a_model/&#41; with larger context, like GPT-32K, or claude-100K. This solution will be applicable for all the tools.)
[//]: # (2&#41; For the `/improve` tool, there is an ['extended' mode]&#40;https://qodo-merge-docs.qodo.ai/tools/improve/&#41; &#40;`/improve --extended`&#41;,)
[//]: # (which divides the PR into chunks, and processes each chunk separately. With this mode, regardless of the model, no compression will be done &#40;but for large PRs, multiple model calls may occur&#41;)
## Patch Extra Lines
By default, around any change in your PR, git patch provides three lines of context above and below the change.
```
@@ -12,5 +12,5 @@ def func1():
code line that already existed in the file...
@ -86,6 +114,7 @@ By default, around any change in your PR, git patch provides three lines of cont
```
Qodo Merge will try to increase the number of lines of context, via the parameter:
```
[config]
patch_extra_lines_before=3
@ -96,30 +125,23 @@ Increasing this number provides more context to the model, but will also increas
If the PR is too large (see [PR Compression strategy](https://github.com/Codium-ai/pr-agent/blob/main/PR_COMPRESSION.md)), Qodo Merge may automatically set this number to 0, and will use the original git patch.
## Log Level
## Editing the prompts
Qodo Merge allows you to control the verbosity of logging by using the `log_level` configuration parameter. This is particularly useful for troubleshooting and debugging issues with your PR workflows.
The prompts for the various Qodo Merge tools are defined in the `pr_agent/settings` folder.
In practice, the prompts are loaded and stored as a standard setting object.
Hence, editing them is similar to editing any other configuration value - just place the relevant key in `.pr_agent.toml`file, and override the default value.
For example, if you want to edit the prompts of the [describe](https://github.com/Codium-ai/pr-agent/blob/main/pr_agent/settings/pr_description_prompts.toml) tool, you can add the following to your `.pr_agent.toml` file:
```
[pr_description_prompt]
system="""
...
"""
user="""
...
"""
[config]
log_level = "DEBUG" # Options: "DEBUG", "INFO", "WARNING", "ERROR", "CRITICAL"
```
Note that the new prompt will need to generate an output compatible with the relevant [post-process function](https://github.com/Codium-ai/pr-agent/blob/main/pr_agent/tools/pr_description.py#L137).
The default log level is "DEBUG", which provides detailed output of all operations. If you prefer less verbose logs, you can set higher log levels like "INFO" or "WARNING".
## Integrating with Logging Observability Platforms
Various logging observability tools can be used out-of-the box when using the default LiteLLM AI Handler. Simply configure the LiteLLM callback settings in `configuration.toml` and set environment variables according to the LiteLLM [documentation](https://docs.litellm.ai/docs/).
For example, to use [LangSmith](https://www.langchain.com/langsmith) you can add the following to your `configuration.toml` file:
```
[litellm]
enable_callbacks = true
@ -138,21 +160,31 @@ LANGSMITH_BASE_URL=<url>
## Ignoring automatic commands in PRs
In some cases, you may want to automatically ignore specific PRs . Qodo Merge enables you to ignore PR with a specific title, or from/to specific branches (regex matching).
Qodo Merge allows you to automatically ignore certain PRs based on various criteria:
- PRs with specific titles (using regex matching)
- PRs between specific branches (using regex matching)
- PRs from specific repositories (using regex matching)
- PRs not from specific folders
- PRs containing specific labels
- PRs opened by specific users
### Ignoring PRs with specific titles
To ignore PRs with a specific title such as "[Bump]: ...", you can add the following to your `configuration.toml` file:
```
```toml
[config]
ignore_pr_title = ["\\[Bump\\]"]
```
Where the `ignore_pr_title` is a list of regex patterns to match the PR title you want to ignore. Default is `ignore_pr_title = ["^\\[Auto\\]", "^Auto"]`.
### Ignoring PRs between specific branches
To ignore PRs from specific source or target branches, you can add the following to your `configuration.toml` file:
```
```toml
[config]
ignore_pr_source_branches = ['develop', 'main', 'master', 'stage']
ignore_pr_target_branches = ["qa"]
@ -161,6 +193,19 @@ ignore_pr_target_branches = ["qa"]
Where the `ignore_pr_source_branches` and `ignore_pr_target_branches` are lists of regex patterns to match the source and target branches you want to ignore.
They are not mutually exclusive, you can use them together or separately.
### Ignoring PRs from specific repositories
To ignore PRs from specific repositories, you can add the following to your `configuration.toml` file:
```toml
[config]
ignore_repositories = ["my-org/my-repo1", "my-org/my-repo2"]
```
Where the `ignore_repositories` is a list of regex patterns to match the repositories you want to ignore. This is useful when you have multiple repositories and want to exclude certain ones from analysis.
### Ignoring PRs not from specific folders
To allow only specific folders (often needed in large monorepos), set:
@ -169,4 +214,51 @@ To allow only specific folders (often needed in large monorepos), set:
allow_only_specific_folders=['folder1','folder2']
```
For the configuration above, automatic feedback will only be triggered when the PR changes include files from 'folder1' or 'folder2'
For the configuration above, automatic feedback will only be triggered when the PR changes include files where 'folder1' or 'folder2' is in the file path
### Ignoring PRs containing specific labels
To ignore PRs containing specific labels, you can add the following to your `configuration.toml` file:
```
[config]
ignore_pr_labels = ["do-not-merge"]
```
Where the `ignore_pr_labels` is a list of labels that when present in the PR, the PR will be ignored.
### Ignoring PRs from specific users
Qodo Merge tries to automatically identify and ignore pull requests created by bots using:
- GitHub's native bot detection system
- Name-based pattern matching
While this detection is robust, it may not catch all cases, particularly when:
- Bots are registered as regular user accounts
- Bot names don't match common patterns
To supplement the automatic bot detection, you can manually specify users to ignore. Add the following to your `configuration.toml` file to ignore PRs from specific users:
```
[config]
ignore_pr_authors = ["my-special-bot-user", ...]
```
Where the `ignore_pr_authors` is a list of usernames that you want to ignore.
!!! note
There is one specific case where bots will receive an automatic response - when they generated a PR with a _failed test_. In that case, the [`ci_feedback`](https://qodo-merge-docs.qodo.ai/tools/ci_feedback/) tool will be invoked.
### Ignoring Generated Files by Language/Framework
To automatically exclude files generated by specific languages or frameworks, you can add the following to your `configuration.toml` file:
```
[config]
ignore_language_framework = ['protobuf', ...]
```
You can view the list of auto-generated file patterns in [`generated_code_ignore.toml`](https://github.com/qodo-ai/pr-agent/blob/main/pr_agent/settings/generated_code_ignore.toml).
Files matching these glob patterns will be automatically excluded from PR Agent analysis.

View File

@ -1,4 +1,5 @@
## Local repo (CLI)
When running from your locally cloned Qodo Merge repo (CLI), your local configuration file will be used.
Examples of invoking the different tools via the CLI:
@ -6,38 +7,55 @@ Examples of invoking the different tools via the CLI:
- **Describe**: `python -m pr_agent.cli --pr_url=<pr_url> describe`
- **Improve**: `python -m pr_agent.cli --pr_url=<pr_url> improve`
- **Ask**: `python -m pr_agent.cli --pr_url=<pr_url> ask "Write me a poem about this PR"`
- **Reflect**: `python -m pr_agent.cli --pr_url=<pr_url> reflect`
- **Update Changelog**: `python -m pr_agent.cli --pr_url=<pr_url> update_changelog`
`<pr_url>` is the url of the relevant PR (for example: [#50](https://github.com/Codium-ai/pr-agent/pull/50)).
**Notes:**
(1) in addition to editing your local configuration file, you can also change any configuration value by adding it to the command line:
1. in addition to editing your local configuration file, you can also change any configuration value by adding it to the command line:
```
python -m pr_agent.cli --pr_url=<pr_url> /review --pr_reviewer.extra_instructions="focus on the file: ..."
```
(2) You can print results locally, without publishing them, by setting in `configuration.toml`:
2. You can print results locally, without publishing them, by setting in `configuration.toml`:
```
[config]
publish_output=false
verbosity_level=2
```
This is useful for debugging or experimenting with different tools.
(3)
3. **git provider**: The [git_provider](https://github.com/Codium-ai/pr-agent/blob/main/pr_agent/settings/configuration.toml#L5) field in a configuration file determines the GIT provider that will be used by Qodo Merge. Currently, the following providers are supported:
`github` **(default)**, `gitlab`, `bitbucket`, `azure`, `codecommit`, `local`,`gitea`, and `gerrit`.
**git provider**: The [git_provider](https://github.com/Codium-ai/pr-agent/blob/main/pr_agent/settings/configuration.toml#L5) field in a configuration file determines the GIT provider that will be used by Qodo Merge. Currently, the following providers are supported:
`
"github", "gitlab", "bitbucket", "azure", "codecommit", "local", "gerrit"
`
### CLI Health Check
Default is "github".
To verify that Qodo Merge has been configured correctly, you can run this health check command from the repository root:
```bash
python -m tests.health_test.main
```
If the health check passes, you will see the following output:
### Online usage
```
========
Health test passed successfully
========
```
At the end of the run.
Before running the health check, ensure you have:
- Configured your [LLM provider](https://qodo-merge-docs.qodo.ai/usage-guide/changing_a_model/)
- Added a valid GitHub token to your configuration file
## Online usage
Online usage means invoking Qodo Merge tools by [comments](https://github.com/Codium-ai/pr-agent/pull/229#issuecomment-1695021901) on a PR.
Commands for invoking the different tools via comments:
@ -46,62 +64,97 @@ Commands for invoking the different tools via comments:
- **Describe**: `/describe`
- **Improve**: `/improve` (or `/improve_code` for bitbucket, since `/improve` is sometimes reserved)
- **Ask**: `/ask "..."`
- **Reflect**: `/reflect`
- **Update Changelog**: `/update_changelog`
To edit a specific configuration value, just add `--config_path=<value>` to any command.
For example, if you want to edit the `review` tool configurations, you can run:
```
/review --pr_reviewer.extra_instructions="..." --pr_reviewer.require_score_review=false
```
Any configuration value in [configuration file](https://github.com/Codium-ai/pr-agent/blob/main/pr_agent/settings/configuration.toml) file can be similarly edited. Comment `/config` to see the list of available configurations.
## Qodo Merge Automatic Feedback
## GitHub App
### Disabling all automatic feedback
!!! note "Configurations for Qodo Merge Pro"
Qodo Merge Pro for GitHub is an App, hosted by CodiumAI. So all the instructions below are relevant also for Qodo Merge Pro users.
To easily disable all automatic feedback from Qodo Merge (GitHub App, GitLab Webhook, BitBucket App, Azure DevOps Webhook), set in a configuration file:
```toml
[config]
disable_auto_feedback = true
```
When this parameter is set to `true`, Qodo Merge will not run any automatic tools (like `describe`, `review`, `improve`) when a new PR is opened, or when new code is pushed to an open PR.
### GitHub App
!!! note "Configurations for Qodo Merge"
Qodo Merge for GitHub is an App, hosted by Qodo. So all the instructions below are relevant also for Qodo Merge users.
Same goes for [GitLab webhook](#gitlab-webhook) and [BitBucket App](#bitbucket-app) sections.
### GitHub app automatic tools when a new PR is opened
#### GitHub app automatic tools when a new PR is opened
The [github_app](https://github.com/Codium-ai/pr-agent/blob/main/pr_agent/settings/configuration.toml#L108) section defines GitHub app specific configurations.
The [github_app](https://github.com/Codium-ai/pr-agent/blob/main/pr_agent/settings/configuration.toml#L220) section defines GitHub app specific configurations.
The configuration parameter `pr_commands` defines the list of tools that will be **run automatically** when a new PR is opened.
```
The configuration parameter `pr_commands` defines the list of tools that will be **run automatically** when a new PR is opened:
```toml
[github_app]
pr_commands = [
"/describe",
"/review",
"/improve --pr_code_suggestions.suggestions_score_threshold=5",
"/improve",
]
```
This means that when a new PR is opened/reopened or marked as ready for review, Qodo Merge will run the `describe`, `review` and `improve` tools.
For the `improve` tool, for example, the `suggestions_score_threshold` parameter will be set to 5 (suggestions below a score of 5 won't be presented)
**Draft PRs:**
By default, draft PRs are not considered for automatic tools, but you can change this by setting the `feedback_on_draft_pr` parameter to `true` in the configuration file.
```toml
[github_app]
feedback_on_draft_pr = true
```
**Changing default tool parameters:**
You can override the default tool parameters by using one the three options for a [configuration file](https://qodo-merge-docs.qodo.ai/usage-guide/configuration_options/): **wiki**, **local**, or **global**.
For example, if your local `.pr_agent.toml` file contains:
```
For example, if your configuration file contains:
```toml
[pr_description]
generate_ai_title = true
```
Every time you run the `describe` tool, including automatic runs, the PR title will be generated by the AI.
To cancel the automatic run of all the tools, set:
```
Every time you run the `describe` tool (including automatic runs) the PR title will be generated by the AI.
**Parameters for automated runs:**
You can customize configurations specifically for automated runs by using the `--config_path=<value>` parameter.
For instance, to modify the `review` tool settings only for newly opened PRs, use:
```toml
[github_app]
pr_commands = []
pr_commands = [
"/describe",
"/review --pr_reviewer.extra_instructions='focus on the file: ...'",
"/improve",
]
```
### GitHub app automatic tools for push actions (commits to an open PR)
#### GitHub app automatic tools for push actions (commits to an open PR)
In addition to running automatic tools when a PR is opened, the GitHub app can also respond to new code that is pushed to an open PR.
The configuration toggle `handle_push_trigger` can be used to enable this feature.
The configuration parameter `push_commands` defines the list of tools that will be **run automatically** when new code is pushed to the PR.
```
```toml
[github_app]
handle_push_trigger = true
push_commands = [
@ -109,12 +162,15 @@ push_commands = [
"/review",
]
```
This means that when new code is pushed to the PR, the Qodo Merge will run the `describe` and `review` tools, with the specified parameters.
## GitHub Action
### GitHub Action
`GitHub Action` is a different way to trigger Qodo Merge tools, and uses a different configuration mechanism than `GitHub App`.<br>
You can configure settings for `GitHub Action` by adding environment variables under the env section in `.github/workflows/pr_agent.yml` file.
Specifically, start by setting the following environment variables:
```yaml
env:
OPENAI_KEY: ${{ secrets.OPENAI_KEY }} # Make sure to add your OpenAI key to your repo secrets
@ -122,8 +178,9 @@ Specifically, start by setting the following environment variables:
github_action_config.auto_review: "true" # enable\disable auto review
github_action_config.auto_describe: "true" # enable\disable auto describe
github_action_config.auto_improve: "true" # enable\disable auto improve
github_action_config.pr_actions: ["opened", "reopened", "ready_for_review", "review_requested"]
github_action_config.pr_actions: '["opened", "reopened", "ready_for_review", "review_requested"]'
```
`github_action_config.auto_review`, `github_action_config.auto_describe` and `github_action_config.auto_improve` are used to enable/disable automatic tools that run when a new PR is opened.
If not set, the default configuration is for all three tools to run automatically when a new PR is opened.
@ -132,20 +189,24 @@ If not set, the default configuration is `["opened", "reopened", "ready_for_revi
`github_action_config.enable_output` are used to enable/disable github actions [output parameter](https://docs.github.com/en/actions/creating-actions/metadata-syntax-for-github-actions#outputs-for-docker-container-and-javascript-actions) (default is `true`).
Review result is output as JSON to `steps.{step-id}.outputs.review` property.
The JSON structure is equivalent to the yaml data structure defined in [pr_reviewer_prompts.toml](https://github.com/idubnori/pr-agent/blob/main/pr_agent/settings/pr_reviewer_prompts.toml).
The JSON structure is equivalent to the yaml data structure defined in [pr_reviewer_prompts.toml](https://github.com/qodo-ai/pr-agent/blob/main/pr_agent/settings/pr_reviewer_prompts.toml).
Note that you can give additional config parameters by adding environment variables to `.github/workflows/pr_agent.yml`, or by using a `.pr_agent.toml` [configuration file](https://qodo-merge-docs.qodo.ai/usage-guide/configuration_options/#global-configuration-file) in the root of your repo
For example, you can set an environment variable: `pr_description.publish_labels=false`, or add a `.pr_agent.toml` file with the following content:
```
```toml
[pr_description]
publish_labels = false
```
to prevent Qodo Merge from publishing labels when running the `describe` tool.
## GitLab Webhook
### GitLab Webhook
After setting up a GitLab webhook, to control which commands will run automatically when a new MR is opened, you can set the `pr_commands` parameter in the configuration file, similar to the GitHub App:
```
```toml
[gitlab]
pr_commands = [
"/describe",
@ -157,7 +218,8 @@ pr_commands = [
the GitLab webhook can also respond to new code that is pushed to an open MR.
The configuration toggle `handle_push_trigger` can be used to enable this feature.
The configuration parameter `push_commands` defines the list of tools that will be **run automatically** when new code is pushed to the MR.
```
```toml
[gitlab]
handle_push_trigger = true
push_commands = [
@ -168,42 +230,44 @@ push_commands = [
Note that to use the 'handle_push_trigger' feature, you need to give the gitlab webhook also the "Push events" scope.
## BitBucket App
Similar to GitHub app, when running Qodo Merge from BitBucket App, the default [configuration file](https://github.com/Codium-ai/pr-agent/blob/main/pr_agent/settings/configuration.toml) from a pre-built docker will be initially loaded.
### BitBucket App
By uploading a local `.pr_agent.toml` file to the root of the repo's main branch, you can edit and customize any configuration parameter. Note that you need to upload `.pr_agent.toml` prior to creating a PR, in order for the configuration to take effect.
Similar to GitHub app, when running Qodo Merge from BitBucket App, the default [configuration file](https://github.com/Codium-ai/pr-agent/blob/main/pr_agent/settings/configuration.toml) will be initially loaded.
By uploading a local `.pr_agent.toml` file to the root of the repo's default branch, you can edit and customize any configuration parameter. Note that you need to upload `.pr_agent.toml` prior to creating a PR, in order for the configuration to take effect.
For example, if your local `.pr_agent.toml` file contains:
```
```toml
[pr_reviewer]
extra_instructions = "Answer in japanese"
```
Each time you invoke a `/review` tool, it will use the extra instructions you set in the local configuration file.
Note that among other limitations, BitBucket provides relatively low rate-limits for applications (up to 1000 requests per hour), and does not provide an API to track the actual rate-limit usage.
If you experience a lack of responses from Qodo Merge, you might want to set: `bitbucket_app.avoid_full_files=true` in your configuration file.
This will prevent Qodo Merge from acquiring the full file content, and will only use the diff content. This will reduce the number of requests made to BitBucket, at the cost of small decrease in accuracy, as dynamic context will not be applicable.
### BitBucket Self-Hosted App automatic tools
#### BitBucket Self-Hosted App automatic tools
To control which commands will run automatically when a new PR is opened, you can set the `pr_commands` parameter in the configuration file:
Specifically, set the following values:
```
```toml
[bitbucket_app]
pr_commands = [
"/review",
"/improve --pr_code_suggestions.commitable_code_suggestions=true --pr_code_suggestions.suggestions_score_threshold=7",
]
```
Note that we set specifically for bitbucket, we recommend using: `--pr_code_suggestions.suggestions_score_threshold=7` and that is the default value we set for bitbucket.
Since this platform only supports inline code suggestions, we want to limit the number of suggestions, and only present a limited number.
To enable BitBucket app to respond to each **push** to the PR, set (for example):
```
```toml
[bitbucket_app]
handle_push_trigger = true
push_commands = [
@ -212,10 +276,11 @@ push_commands = [
]
```
## Azure DevOps provider
### Azure DevOps provider
To use Azure DevOps provider use the following settings in configuration.toml:
```
```toml
[config]
git_provider="azure"
```
@ -228,20 +293,35 @@ If PAT was chosen, you can assign the value in .secrets.toml.
If DefaultAzureCredential was chosen, you can assigned the additional env vars like AZURE_CLIENT_SECRET directly,
or use managed identity/az cli (for local development) without any additional configuration.
in any case, 'org' value must be assigned in .secrets.toml:
```
[azure_devops]
org = "https://dev.azure.com/YOUR_ORGANIZATION/"
# pat = "YOUR_PAT_TOKEN" needed only if using PAT for authentication
```
### Azure DevOps Webhook
#### Azure DevOps Webhook
To control which commands will run automatically when a new PR is opened, you can set the `pr_commands` parameter in the configuration file, similar to the GitHub App:
```
```toml
[azure_devops_server]
pr_commands = [
"/describe",
"/review --pr_reviewer.num_code_suggestions=0",
"/review",
"/improve",
]
```
### Gitea Webhook
After setting up a Gitea webhook, to control which commands will run automatically when a new MR is opened, you can set the `pr_commands` parameter in the configuration file, similar to the GitHub App:
```toml
[gitea]
pr_commands = [
"/describe",
"/review",
"/improve",
]
```

View File

@ -1,21 +1,43 @@
## Changing a model
## Changing a model in PR-Agent
See [here](https://github.com/Codium-ai/pr-agent/blob/main/pr_agent/algo/__init__.py) for a list of available models.
To use a different model than the default (GPT-4), you need to edit in the [configuration file](https://github.com/Codium-ai/pr-agent/blob/main/pr_agent/settings/configuration.toml#L2) the fields:
```
To use a different model than the default (o4-mini), you need to edit in the [configuration file](https://github.com/Codium-ai/pr-agent/blob/main/pr_agent/settings/configuration.toml#L2) the fields:
```toml
[config]
model = "..."
model_turbo = "..."
fallback_models = ["..."]
```
For models and environments not from OpenAI, you might need to provide additional keys and other parameters.
You can give parameters via a configuration file (see below for instructions), or from environment variables. See [litellm documentation](https://litellm.vercel.app/docs/proxy/quick_start#supported-llms) for the environment variables relevant per model.
You can give parameters via a configuration file, or from environment variables.
!!! note "Model-specific environment variables"
See [litellm documentation](https://litellm.vercel.app/docs/proxy/quick_start#supported-llms) for the environment variables needed per model, as they may vary and change over time. Our documentation per-model may not always be up-to-date with the latest changes.
Failing to set the needed keys of a specific model will usually result in litellm not identifying the model type, and failing to utilize it.
### OpenAI like API
To use an OpenAI like API, set the following in your `.secrets.toml` file:
```toml
[openai]
api_base = "https://api.openai.com/v1"
api_key = "sk-..."
```
or use the environment variables (make sure to use double underscores `__`):
```bash
OPENAI__API_BASE=https://api.openai.com/v1
OPENAI__KEY=sk-...
```
### Azure
To use Azure, set in your `.secrets.toml` (working from CLI), or in the GitHub `Settings > Secrets and variables` (working from GitHub App or GitHub Action):
```
```toml
[openai]
key = "" # your azure api key
api_type = "azure"
@ -25,103 +47,131 @@ deployment_id = "" # The deployment name you chose when you deployed the engine
```
and set in your configuration file:
```
```toml
[config]
model="" # the OpenAI model you've deployed on Azure (e.g. gpt-3.5-turbo)
model_turbo="" # the OpenAI model you've deployed on Azure (e.g. gpt-3.5-turbo)
fallback_models=["..."] # the OpenAI model you've deployed on Azure (e.g. gpt-3.5-turbo)
model="" # the OpenAI model you've deployed on Azure (e.g. gpt-4o)
fallback_models=["..."]
```
To use Azure AD (Entra id) based authentication set in your `.secrets.toml` (working from CLI), or in the GitHub `Settings > Secrets and variables` (working from GitHub App or GitHub Action):
```toml
[azure_ad]
client_id = "" # Your Azure AD application client ID
client_secret = "" # Your Azure AD application client secret
tenant_id = "" # Your Azure AD tenant ID
api_base = "" # Your Azure OpenAI service base URL (e.g., https://openai.xyz.com/)
```
Passing custom headers to the underlying LLM Model API can be done by setting extra_headers parameter to litellm.
```toml
[litellm]
extra_headers='{"projectId": "<authorized projectId >", ...}') #The value of this setting should be a JSON string representing the desired headers, a ValueError is thrown otherwise.
```
This enables users to pass authorization tokens or API keys, when routing requests through an API management gateway.
### Ollama
You can run models locally through either [VLLM](https://docs.litellm.ai/docs/providers/vllm) or [Ollama](https://docs.litellm.ai/docs/providers/ollama)
E.g. to use a new model locally via Ollama, set in `.secrets.toml` or in a configuration file:
```toml
[config]
model = "ollama/qwen2.5-coder:32b"
fallback_models=["ollama/qwen2.5-coder:32b"]
custom_model_max_tokens=128000 # set the maximal input tokens for the model
duplicate_examples=true # will duplicate the examples in the prompt, to help the model to generate structured output
[ollama]
api_base = "http://localhost:11434" # or whatever port you're running Ollama on
```
By default, Ollama uses a context window size of 2048 tokens. In most cases this is not enough to cover pr-agent prompt and pull-request diff. Context window size can be overridden with the `OLLAMA_CONTEXT_LENGTH` environment variable. For example, to set the default context length to 8K, use: `OLLAMA_CONTEXT_LENGTH=8192 ollama serve`. More information you can find on the [official ollama faq](https://github.com/ollama/ollama/blob/main/docs/faq.md#how-can-i-specify-the-context-window-size).
Please note that the `custom_model_max_tokens` setting should be configured in accordance with the `OLLAMA_CONTEXT_LENGTH`. Failure to do so may result in unexpected model output.
!!! note "Local models vs commercial models"
Qodo Merge is compatible with almost any AI model, but analyzing complex code repositories and pull requests requires a model specifically optimized for code analysis.
Commercial models such as GPT-4, Claude Sonnet, and Gemini have demonstrated robust capabilities in generating structured output for code analysis tasks with large input. In contrast, most open-source models currently available (as of January 2025) face challenges with these complex tasks.
Based on our testing, local open-source models are suitable for experimentation and learning purposes (mainly for the `ask` command), but they are not suitable for production-level code analysis tasks.
Hence, for production workflows and real-world usage, we recommend using commercial models.
### Hugging Face
**Local**
You can run Hugging Face models locally through either [VLLM](https://docs.litellm.ai/docs/providers/vllm) or [Ollama](https://docs.litellm.ai/docs/providers/ollama)
E.g. to use a new Hugging Face model locally via Ollama, set:
```
[__init__.py]
MAX_TOKENS = {
"model-name-on-ollama": <max_tokens>
}
e.g.
MAX_TOKENS={
...,
"ollama/llama2": 4096
}
[config] # in configuration.toml
model = "ollama/llama2"
model_turbo = "ollama/llama2"
fallback_models=["ollama/llama2"]
[ollama] # in .secrets.toml
api_base = ... # the base url for your Hugging Face inference endpoint
# e.g. if running Ollama locally, you may use:
api_base = "http://localhost:11434/"
```
### Inference Endpoints
To use a new model with Hugging Face Inference Endpoints, for example, set:
```
[__init__.py]
MAX_TOKENS = {
"model-name-on-huggingface": <max_tokens>
}
e.g.
MAX_TOKENS={
...,
"meta-llama/Llama-2-7b-chat-hf": 4096
}
```toml
[config] # in configuration.toml
model = "huggingface/meta-llama/Llama-2-7b-chat-hf"
model_turbo = "huggingface/meta-llama/Llama-2-7b-chat-hf"
fallback_models=["huggingface/meta-llama/Llama-2-7b-chat-hf"]
custom_model_max_tokens=... # set the maximal input tokens for the model
[huggingface] # in .secrets.toml
key = ... # your Hugging Face api key
api_base = ... # the base url for your Hugging Face inference endpoint
```
(you can obtain a Llama2 key from [here](https://replicate.com/replicate/llama-2-70b-chat/api))
### Replicate
To use Llama2 model with Replicate, for example, set:
```
```toml
[config] # in configuration.toml
model = "replicate/llama-2-70b-chat:2c1608e18606fad2812020dc541930f2d0495ce32eee50074220b87300bc16e1"
model_turbo = "replicate/llama-2-70b-chat:2c1608e18606fad2812020dc541930f2d0495ce32eee50074220b87300bc16e1"
fallback_models=["replicate/llama-2-70b-chat:2c1608e18606fad2812020dc541930f2d0495ce32eee50074220b87300bc16e1"]
[replicate] # in .secrets.toml
key = ...
```
(you can obtain a Llama2 key from [here](https://replicate.com/replicate/llama-2-70b-chat/api))
(you can obtain a Llama2 key from [here](https://replicate.com/replicate/llama-2-70b-chat/api))
Also, review the [AiHandler](https://github.com/Codium-ai/pr-agent/blob/main/pr_agent/algo/ai_handler.py) file for instructions on how to set keys for other models.
### Groq
To use Llama3 model with Groq, for example, set:
```
```toml
[config] # in configuration.toml
model = "llama3-70b-8192"
model_turbo = "llama3-70b-8192"
fallback_models = ["groq/llama3-70b-8192"]
[groq] # in .secrets.toml
key = ... # your Groq api key
```
(you can obtain a Groq key from [here](https://console.groq.com/keys))
### xAI
To use xAI's models with PR-Agent, set:
```toml
[config] # in configuration.toml
model = "xai/grok-2-latest"
fallback_models = ["xai/grok-2-latest"] # or any other model as fallback
[xai] # in .secrets.toml
key = "..." # your xAI API key
```
You can obtain an xAI API key from [xAI's console](https://console.x.ai/) by creating an account and navigating to the developer settings page.
### Vertex AI
To use Google's Vertex AI platform and its associated models (chat-bison/codechat-bison) set:
```
```toml
[config] # in configuration.toml
model = "vertex_ai/codechat-bison"
model_turbo = "vertex_ai/codechat-bison"
fallback_models="vertex_ai/codechat-bison"
[vertexai] # in .secrets.toml
@ -139,9 +189,8 @@ To use [Google AI Studio](https://aistudio.google.com/) models, set the relevant
```toml
[config] # in configuration.toml
model="google_ai_studio/gemini-1.5-flash"
model_turbo="google_ai_studio/gemini-1.5-flash"
fallback_models=["google_ai_studio/gemini-1.5-flash"]
model="gemini/gemini-1.5-flash"
fallback_models=["gemini/gemini-1.5-flash"]
[google_ai_studio] # in .secrets.toml
gemini_api_key = "..."
@ -153,54 +202,163 @@ If you don't want to set the API key in the .secrets.toml file, you can set the
To use Anthropic models, set the relevant models in the configuration section of the configuration file:
```
```toml
[config]
model="anthropic/claude-3-opus-20240229"
model_turbo="anthropic/claude-3-opus-20240229"
fallback_models=["anthropic/claude-3-opus-20240229"]
```
And also set the api key in the .secrets.toml file:
```
```toml
[anthropic]
KEY = "..."
```
See [litellm](https://docs.litellm.ai/docs/providers/anthropic#usage) documentation for more information about the environment variables required for Anthropic.
### Amazon Bedrock
To use Amazon Bedrock and its foundational models, add the below configuration:
```
```toml
[config] # in configuration.toml
model="bedrock/anthropic.claude-3-sonnet-20240229-v1:0"
model_turbo="bedrock/anthropic.claude-3-sonnet-20240229-v1:0"
fallback_models=["bedrock/anthropic.claude-v2:1"]
model="bedrock/anthropic.claude-3-5-sonnet-20240620-v1:0"
fallback_models=["bedrock/anthropic.claude-3-5-sonnet-20240620-v1:0"]
[aws]
AWS_ACCESS_KEY_ID="..."
AWS_SECRET_ACCESS_KEY="..."
AWS_REGION_NAME="..."
```
Note that you have to add access to foundational models before using them. Please refer to [this document](https://docs.aws.amazon.com/bedrock/latest/userguide/setting-up.html) for more details.
You can also use the new Meta Llama 4 models available on Amazon Bedrock:
If you are using the claude-3 model, please configure the following settings as there are parameters incompatible with claude-3.
```
[litellm]
drop_params = true
```toml
[config] # in configuration.toml
model="bedrock/us.meta.llama4-scout-17b-instruct-v1:0"
fallback_models=["bedrock/us.meta.llama4-maverick-17b-instruct-v1:0"]
```
AWS session is automatically authenticated from your environment, but you can also explicitly set `AWS_ACCESS_KEY_ID`, `AWS_SECRET_ACCESS_KEY` and `AWS_REGION_NAME` environment variables. Please refer to [this document](https://litellm.vercel.app/docs/providers/bedrock) for more details.
See [litellm](https://docs.litellm.ai/docs/providers/bedrock#usage) documentation for more information about the environment variables required for Amazon Bedrock.
### DeepSeek
To use deepseek-chat model with DeepSeek, for example, set:
```toml
[config] # in configuration.toml
model = "deepseek/deepseek-chat"
fallback_models=["deepseek/deepseek-chat"]
```
and fill up your key
```toml
[deepseek] # in .secrets.toml
key = ...
```
(you can obtain a deepseek-chat key from [here](https://platform.deepseek.com))
### DeepInfra
To use DeepSeek model with DeepInfra, for example, set:
```toml
[config] # in configuration.toml
model = "deepinfra/deepseek-ai/DeepSeek-R1-Distill-Llama-70B"
fallback_models = ["deepinfra/deepseek-ai/DeepSeek-R1-Distill-Qwen-32B"]
[deepinfra] # in .secrets.toml
key = ... # your DeepInfra api key
```
(you can obtain a DeepInfra key from [here](https://deepinfra.com/dash/api_keys))
### Mistral
To use models like Mistral or Codestral with Mistral, for example, set:
```toml
[config] # in configuration.toml
model = "mistral/mistral-small-latest"
fallback_models = ["mistral/mistral-medium-latest"]
[mistral] # in .secrets.toml
key = "..." # your Mistral api key
```
(you can obtain a Mistral key from [here](https://console.mistral.ai/api-keys))
### Codestral
To use Codestral model with Codestral, for example, set:
```toml
[config] # in configuration.toml
model = "codestral/codestral-latest"
fallback_models = ["codestral/codestral-2405"]
[codestral] # in .secrets.toml
key = "..." # your Codestral api key
```
(you can obtain a Codestral key from [here](https://console.mistral.ai/codestral))
### Openrouter
To use model from Openrouter, for example, set:
```toml
[config] # in configuration.toml
model="openrouter/anthropic/claude-3.7-sonnet"
fallback_models=["openrouter/deepseek/deepseek-chat"]
custom_model_max_tokens=20000
[openrouter] # in .secrets.toml or passed an environment variable openrouter__key
key = "..." # your openrouter api key
```
(you can obtain an Openrouter API key from [here](https://openrouter.ai/settings/keys))
### Custom models
If the relevant model doesn't appear [here](https://github.com/Codium-ai/pr-agent/blob/main/pr_agent/algo/__init__.py), you can still use it as a custom model:
(1) Set the model name in the configuration file:
```
1. Set the model name in the configuration file:
```toml
[config]
model="custom_model_name"
model_turbo="custom_model_name"
fallback_models=["custom_model_name"]
```
(2) Set the maximal tokens for the model:
```
2. Set the maximal tokens for the model:
```toml
[config]
custom_model_max_tokens= ...
```
(3) Go to [litellm documentation](https://litellm.vercel.app/docs/proxy/quick_start#supported-llms), find the model you want to use, and set the relevant environment variables.
3. Go to [litellm documentation](https://litellm.vercel.app/docs/proxy/quick_start#supported-llms), find the model you want to use, and set the relevant environment variables.
4. Most reasoning models do not support chat-style inputs (`system` and `user` messages) or temperature settings.
To bypass chat templates and temperature controls, set `config.custom_reasoning_model = true` in your configuration file.
## Dedicated parameters
### OpenAI models
```toml
[config]
reasoning_efffort= = "medium" # "low", "medium", "high"
```
With the OpenAI models that support reasoning effort (eg: o4-mini), you can specify its reasoning effort via `config` section. The default value is `medium`. You can change it to `high` or `low` based on your usage.
### Anthropic models
```toml
[config]
enable_claude_extended_thinking = false # Set to true to enable extended thinking feature
extended_thinking_budget_tokens = 2048
extended_thinking_max_output_tokens = 4096
```

View File

@ -1,29 +1,30 @@
The different tools and sub-tools used by Qodo Merge are adjustable via the **[configuration file](https://github.com/Codium-ai/pr-agent/blob/main/pr_agent/settings/configuration.toml)**.
The different tools and sub-tools used by Qodo Merge are adjustable via a Git configuration file.
There are three main ways to set persistent configurations:
In addition to general configuration options, each tool has its own configurations. For example, the `review` tool will use parameters from the [pr_reviewer](https://github.com/Codium-ai/pr-agent/blob/main/pr_agent/settings/configuration.toml#L16) section in the configuration file.
See the [Tools Guide](https://qodo-merge-docs.qodo.ai/tools/) for a detailed description of the different tools and their configurations.
There are three ways to set persistent configurations:
1. Wiki configuration page 💎
2. Local configuration file
3. Global configuration file 💎
1. [Wiki](https://qodo-merge-docs.qodo.ai/usage-guide/configuration_options/#wiki-configuration-file) configuration page 💎
2. [Local](https://qodo-merge-docs.qodo.ai/usage-guide/configuration_options/#local-configuration-file) configuration file
3. [Global](https://qodo-merge-docs.qodo.ai/usage-guide/configuration_options/#global-configuration-file) configuration file 💎
In terms of precedence, wiki configurations will override local configurations, and local configurations will override global configurations.
!!! tip "Tip1: edit only what you need"
For a list of all possible configurations, see the [configuration options](https://github.com/qodo-ai/pr-agent/blob/main/pr_agent/settings/configuration.toml/) page.
In addition to general configuration options, each tool has its own configurations. For example, the `review` tool will use parameters from the [pr_reviewer](https://github.com/Codium-ai/pr-agent/blob/main/pr_agent/settings/configuration.toml#L16) section in the configuration file.
!!! tip "Tip1: Edit only what you need"
Your configuration file should be minimal, and edit only the relevant values. Don't copy the entire configuration options, since it can lead to legacy problems when something changes.
!!! tip "Tip2: show relevant configurations"
If you set `config.output_relevant_configurations=true`, each tool will also output in a collapsible section its relevant configurations. This can be useful for debugging, or getting to know the configurations better.
!!! tip "Tip2: Show relevant configurations"
If you set `config.output_relevant_configurations` to True, each tool will also output in a collapsible section its relevant configurations. This can be useful for debugging, or getting to know the configurations better.
## Wiki configuration file 💎
`Platforms supported: GitHub, GitLab, Bitbucket`
With Qodo Merge Pro, you can set configurations by creating a page called `.pr_agent.toml` in the [wiki](https://github.com/Codium-ai/pr-agent/wiki/pr_agent.toml) of the repo.
With Qodo Merge, you can set configurations by creating a page called `.pr_agent.toml` in the [wiki](https://github.com/Codium-ai/pr-agent/wiki/pr_agent.toml) of the repo.
The advantage of this method is that it allows to set configurations without needing to commit new content to the repo - just edit the wiki page and **save**.
![wiki_configuration](https://codium.ai/images/pr_agent/wiki_configuration.png){width=512}
Click [here](https://codium.ai/images/pr_agent/wiki_configuration_pr_agent.mp4) to see a short instructional video. We recommend surrounding the configuration content with triple-quotes (or \`\`\`toml), to allow better presentation when displayed in the wiki as markdown.
@ -40,8 +41,7 @@ Qodo Merge will know to remove the surrounding quotes when reading the configura
`Platforms supported: GitHub, GitLab, Bitbucket, Azure DevOps`
By uploading a local `.pr_agent.toml` file to the root of the repo's main branch, you can edit and customize any configuration parameter. Note that you need to upload `.pr_agent.toml` prior to creating a PR, in order for the configuration to take effect.
By uploading a local `.pr_agent.toml` file to the root of the repo's default branch, you can edit and customize any configuration parameter. Note that you need to upload or update `.pr_agent.toml` before using the PR Agent tools (either at PR creation or via manual trigger) for the configuration to take effect.
For example, if you set in `.pr_agent.toml`:
@ -56,12 +56,11 @@ extra_instructions="""\
Then you can give a list of extra instructions to the `review` tool.
## Global configuration file 💎
`Platforms supported: GitHub, GitLab, Bitbucket`
If you create a repo called `pr-agent-settings` in your **organization**, it's configuration file `.pr_agent.toml` will be used as a global configuration file for any other repo that belongs to the same organization.
If you create a repo called `pr-agent-settings` in your **organization**, its configuration file `.pr_agent.toml` will be used as a global configuration file for any other repo that belongs to the same organization.
Parameters from a local `.pr_agent.toml` file, in a specific repo, will override the global configuration parameters.
For example, in the GitHub organization `Codium-ai`:
@ -69,3 +68,29 @@ For example, in the GitHub organization `Codium-ai`:
- The file [`https://github.com/Codium-ai/pr-agent-settings/.pr_agent.toml`](https://github.com/Codium-ai/pr-agent-settings/blob/main/.pr_agent.toml) serves as a global configuration file for all the repos in the GitHub organization `Codium-ai`.
- The repo [`https://github.com/Codium-ai/pr-agent`](https://github.com/Codium-ai/pr-agent/blob/main/.pr_agent.toml) inherits the global configuration file from `pr-agent-settings`.
### Bitbucket Organization level configuration file 💎
`Relevant platforms: Bitbucket Data Center`
In Bitbucket Data Center, there are two levels where you can define a global configuration file:
- Project-level global configuration:
Create a repository named `pr-agent-settings` within a specific project. The configuration file in this repository will apply to all repositories under the same project.
- Organization-level global configuration:
Create a dedicated project to hold a global configuration file that affects all repositories across all projects in your organization.
**Setting up organization-level global configuration:**
1. Create a new project with both the name and key: PR_AGENT_SETTINGS.
2. Inside the PR_AGENT_SETTINGS project, create a repository named pr-agent-settings.
3. In this repository, add a `.pr_agent.toml` configuration file—structured similarly to the global configuration file described above.
4. Optionally, you can add organizational-level [global best practices](https://qodo-merge-docs.qodo.ai/tools/improve/#global-hierarchical-best-practices).
Repositories across your entire Bitbucket organization will inherit the configuration from this file.
!!! note "Note"
If both organization-level and project-level global settings are defined, the project-level settings will take precedence over the organization-level configuration. Additionally, parameters from a repositorys local .pr_agent.toml file will always override both global settings.

View File

@ -0,0 +1,30 @@
`Supported Git Platforms: GitHub, GitLab, Bitbucket`
For optimal functionality of Qodo Merge, we recommend enabling a wiki for each repository where Qodo Merge is installed. The wiki serves several important purposes:
**Key Wiki Features: 💎**
- Storing a [configuration file](https://qodo-merge-docs.qodo.ai/usage-guide/configuration_options/#wiki-configuration-file)
- Track [accepted suggestions](https://qodo-merge-docs.qodo.ai/tools/improve/#suggestion-tracking)
- Facilitates learning over time by creating an [auto_best_practices.md](https://qodo-merge-docs.qodo.ai/core-abilities/auto_best_practices) file
**Setup Instructions (GitHub):**
To enable a wiki for your repository:
1. Navigate to your repository's main page on GitHub
2. Select "Settings" from the top navigation bar
3. Locate the "Features" section
4. Enable the "Wikis" option by checking the corresponding box
5. Return to your repository's main page
6. Look for the newly added "Wiki" tab in the top navigation
7. Initialize your wiki by clicking "Create the first page" and saving (this step is important - without creating an initial page, the wiki will not be fully functional)
### Why Wiki?
- Your code (and its derivatives, including accepted code suggestions) is yours. Qodo Merge will never store it on external servers.
- Repository changes typically require pull requests, which create overhead and are time-consuming. This process is too cumbersome for auto data aggregation, and is not very convenient even for managing frequently updated content like configuration files.
- A repository wiki page provides an ideal balance:
- It lives within your repository, making it suitable for code-related documentation
- It enables quick updates without the overhead of pull requests
- It maintains full Git version control, allowing you to track changes over time.

View File

@ -1,10 +1,10 @@
# Usage guide
This page provides a detailed guide on how to use Qodo Merge.
This section provides a detailed guide on how to use Qodo Merge.
It includes information on how to adjust Qodo Merge configurations, define which tools will run automatically, and other advanced configurations.
- [Introduction](./introduction.md)
- [Enabling a Wiki](./enabling_a_wiki)
- [Configuration File](./configuration_options.md)
- [Usage and Automation](./automations_and_usage.md)
- [Local Repo (CLI)](./automations_and_usage.md#local-repo-cli)
@ -12,15 +12,16 @@ It includes information on how to adjust Qodo Merge configurations, define which
- [GitHub App](./automations_and_usage.md#github-app)
- [GitHub Action](./automations_and_usage.md#github-action)
- [GitLab Webhook](./automations_and_usage.md#gitlab-webhook)
- [Gitea Webhook](./automations_and_usage.md#gitea-webhook)
- [BitBucket App](./automations_and_usage.md#bitbucket-app)
- [Azure DevOps Provider](./automations_and_usage.md#azure-devops-provider)
- [Managing Mail Notifications](./mail_notifications.md)
- [Changing a Model](./changing_a_model.md)
- [Additional Configurations Walkthrough](./additional_configurations.md)
- [Additional Configurations](./additional_configurations.md)
- [Ignoring files from analysis](./additional_configurations.md#ignoring-files-from-analysis)
- [Extra instructions](./additional_configurations.md#extra-instructions)
- [Working with large PRs](./additional_configurations.md#working-with-large-prs)
- [Changing a model](./additional_configurations.md#changing-a-model)
- [Changing a model](https://qodo-merge-docs.qodo.ai/usage-guide/changing_a_model/)
- [Patch Extra Lines](./additional_configurations.md#patch-extra-lines)
- [Editing the prompts](./additional_configurations.md#editing-the-prompts)
- [Qodo Merge Pro Models](./PR_agent_pro_models.md)
- [FAQ](https://qodo-merge-docs.qodo.ai/faq/)
- [Qodo Merge Models](./qodo_merge_models)

View File

@ -2,10 +2,9 @@
After [installation](https://qodo-merge-docs.qodo.ai/installation/), there are three basic ways to invoke Qodo Merge:
1. Locally running a CLI command
2. Online usage - by [commenting](https://github.com/Codium-ai/pr-agent/pull/229#issuecomment-1695021901) on a PR
2. Online usage - by [commenting](https://github.com/Codium-ai/pr-agent/pull/229#issuecomment-1695021901){:target="_blank"} on a PR
3. Enabling Qodo Merge tools to run automatically when a new PR is opened
Specifically, CLI commands can be issued by invoking a pre-built [docker image](https://qodo-merge-docs.qodo.ai/installation/locally/#using-docker-image), or by invoking a [locally cloned repo](https://qodo-merge-docs.qodo.ai/installation/locally/#run-from-source).
For online usage, you will need to setup either a [GitHub App](https://qodo-merge-docs.qodo.ai/installation/github/#run-as-a-github-app) or a [GitHub Action](https://qodo-merge-docs.qodo.ai/installation/github/#run-as-a-github-action) (GitHub), a [GitLab webhook](https://qodo-merge-docs.qodo.ai/installation/gitlab/#run-a-gitlab-webhook-server) (GitLab), or a [BitBucket App](https://qodo-merge-docs.qodo.ai/installation/bitbucket/#run-using-codiumai-hosted-bitbucket-app) (BitBucket).

View File

@ -8,10 +8,10 @@ As an alternative, you can filter in your mail provider the notifications specif
![filter_mail_notifications](https://codium.ai/images/pr_agent/filter_mail_notifications.png){width=512}
Another option to reduce the mail overload, yet still receive notifications on Qodo Merge tools, is to disable the help collapsible section in Qodo Merge bot comments.
This can done by setting `enable_help_text=false` for the relevant tool in the configuration file.
For example, to disable the help text for the `pr_reviewer` tool, set:
```
[pr_reviewer]
enable_help_text = false

View File

@ -0,0 +1,42 @@
The default models used by Qodo Merge (June 2025) are a combination of Claude Sonnet 4 and Gemini 2.5 Pro.
### Selecting a Specific Model
Users can configure Qodo Merge to use only a specific model by editing the [configuration](https://qodo-merge-docs.qodo.ai/usage-guide/configuration_options/) file.
The models supported by Qodo Merge are:
- `claude-4-sonnet`
- `o4-mini`
- `gpt-4.1`
- `gemini-2.5-pro`
- `deepseek/r1`
To restrict Qodo Merge to using only `o4-mini`, add this setting:
```toml
[config]
model="o4-mini"
```
To restrict Qodo Merge to using only `GPT-4.1`, add this setting:
```toml
[config]
model="gpt-4.1"
```
To restrict Qodo Merge to using only `gemini-2.5-pro`, add this setting:
```toml
[config]
model="gemini-2.5-pro"
```
To restrict Qodo Merge to using only `deepseek-r1` us-hosted, add this setting:
```toml
[config]
model="deepseek/r1"
```

View File

@ -1,64 +1,72 @@
site_name: Qodo Merge (formerly known as PR-Agent)
repo_url: https://github.com/Codium-ai/pr-agent
repo_name: Codium-ai/pr-agent
site_name: Qodo Merge (and open-source PR-Agent)
repo_url: https://github.com/qodo-ai/pr-agent
repo_name: Qodo-ai/pr-agent
nav:
- Overview:
- 'index.md'
- 💎 Qodo Merge Pro: 'overview/pr_agent_pro.md'
- 💎 Qodo Merge: 'overview/pr_agent_pro.md'
- Data Privacy: 'overview/data_privacy.md'
- Installation:
- 'installation/index.md'
- Locally: 'installation/locally.md'
- GitHub: 'installation/github.md'
- GitLab: 'installation/gitlab.md'
- BitBucket: 'installation/bitbucket.md'
- Azure DevOps: 'installation/azure.md'
- 💎 Qodo Merge Pro: 'installation/pr_agent_pro.md'
- PR-Agent: 'installation/pr_agent.md'
- 💎 Qodo Merge: 'installation/qodo_merge.md'
- Usage Guide:
- 'usage-guide/index.md'
- Introduction: 'usage-guide/introduction.md'
- Enabling a Wiki: 'usage-guide/enabling_a_wiki.md'
- Configuration File: 'usage-guide/configuration_options.md'
- Usage and Automation: 'usage-guide/automations_and_usage.md'
- Managing Mail Notifications: 'usage-guide/mail_notifications.md'
- Changing a Model: 'usage-guide/changing_a_model.md'
- Additional Configurations: 'usage-guide/additional_configurations.md'
- 💎 Qodo Merge Pro Models: 'usage-guide/PR_agent_pro_models'
- Frequently Asked Questions: 'faq/index.md'
- 💎 Qodo Merge Models: 'usage-guide/qodo_merge_models.md'
- Tools:
- 'tools/index.md'
- Describe: 'tools/describe.md'
- Review: 'tools/review.md'
- Improve: 'tools/improve.md'
- Ask: 'tools/ask.md'
- Update Changelog: 'tools/update_changelog.md'
- Similar Issues: 'tools/similar_issues.md'
- Help: 'tools/help.md'
- 💎 Analyze: 'tools/analyze.md'
- 💎 Test: 'tools/test.md'
- 💎 Improve Component: 'tools/improve_component.md'
- 💎 Documentation: 'tools/documentation.md'
- 💎 Custom Labels: 'tools/custom_labels.md'
- 💎 Custom Prompt: 'tools/custom_prompt.md'
- 💎 CI Feedback: 'tools/ci_feedback.md'
- 💎 Similar Code: 'tools/similar_code.md'
- 'tools/index.md'
- Describe: 'tools/describe.md'
- Review: 'tools/review.md'
- Improve: 'tools/improve.md'
- Ask: 'tools/ask.md'
- Help: 'tools/help.md'
- Help Docs: 'tools/help_docs.md'
- Update Changelog: 'tools/update_changelog.md'
- 💎 Add Documentation: 'tools/documentation.md'
- 💎 Analyze: 'tools/analyze.md'
- 💎 CI Feedback: 'tools/ci_feedback.md'
- 💎 Custom Prompt: 'tools/custom_prompt.md'
- 💎 Generate Labels: 'tools/custom_labels.md'
- 💎 Generate Tests: 'tools/test.md'
- 💎 Implement: 'tools/implement.md'
- 💎 Improve Components: 'tools/improve_component.md'
- 💎 Scan Repo Discussions: 'tools/scan_repo_discussions.md'
- 💎 Similar Code: 'tools/similar_code.md'
- Core Abilities:
- 'core-abilities/index.md'
- Fetching ticket context: 'core-abilities/fetching_ticket_context.md'
- Local and global metadata: 'core-abilities/metadata.md'
- Auto approval: 'core-abilities/auto_approval.md'
- Auto best practices: 'core-abilities/auto_best_practices.md'
- Chat on code suggestions: 'core-abilities/chat_on_code_suggestions.md'
- Code validation: 'core-abilities/code_validation.md'
# - Compression strategy: 'core-abilities/compression_strategy.md'
- Dynamic context: 'core-abilities/dynamic_context.md'
- Self-reflection: 'core-abilities/self_reflection.md'
- Fetching ticket context: 'core-abilities/fetching_ticket_context.md'
- Impact evaluation: 'core-abilities/impact_evaluation.md'
- Incremental Update: 'core-abilities/incremental_update.md'
- Interactivity: 'core-abilities/interactivity.md'
- Compression strategy: 'core-abilities/compression_strategy.md'
- Code-oriented YAML: 'core-abilities/code_oriented_yaml.md'
- Local and global metadata: 'core-abilities/metadata.md'
- RAG context enrichment: 'core-abilities/rag_context_enrichment.md'
- Self-reflection: 'core-abilities/self_reflection.md'
- Static code analysis: 'core-abilities/static_code_analysis.md'
- Code Fine-tuning Benchmark: 'finetuning_benchmark/index.md'
- Chrome Extension:
- Qodo Merge Chrome Extension: 'chrome-extension/index.md'
- Features: 'chrome-extension/features.md'
- Data Privacy: 'chrome-extension/data_privacy.md'
- FAQ:
- FAQ: 'faq/index.md'
- Options: 'chrome-extension/options.md'
- PR Benchmark:
- PR Benchmark: 'pr_benchmark/index.md'
- Recent Updates:
- Recent Updates: 'recent_updates/index.md'
- AI Docs Search: 'ai_search/index.md'
# - Code Fine-tuning Benchmark: 'finetuning_benchmark/index.md'
theme:
@ -79,7 +87,6 @@ theme:
- content.tabs.link
- content.code.annotation
- content.code.copy
- content.tabs.link
language: en
custom_dir: overrides
@ -147,6 +154,8 @@ markdown_extensions:
- pymdownx.emoji:
emoji_index: !!python/name:material.extensions.emoji.twemoji
emoji_generator: !!python/name:material.extensions.emoji.to_svg
- pymdownx.tabbed:
alternate_style: true
- toc:
title: On this page
toc_depth: 3
@ -154,4 +163,4 @@ markdown_extensions:
copyright: |
&copy; 2024 <a href="https://www.codium.ai/" target="_blank" rel="noopener">CodiumAI</a>
&copy; 2025 <a href="https://www.codium.ai/" target="_blank" rel="noopener">QodoAI</a>

View File

@ -82,7 +82,7 @@
<footer class="wrapper">
<div class="container">
<p class="footer-text">© 2024 <a href="https://www.qodo.ai/" target="_blank" rel="noopener">Qodo</a></p>
<p class="footer-text">© 2025 <a href="https://www.qodo.ai/" target="_blank" rel="noopener">Qodo</a></p>
<div class="footer-links">
<a href="https://qodo-gen-docs.qodo.ai/">Qodo Gen</a>
<p>|</p>

View File

@ -3,6 +3,7 @@ from functools import partial
from pr_agent.algo.ai_handlers.base_ai_handler import BaseAiHandler
from pr_agent.algo.ai_handlers.litellm_ai_handler import LiteLLMAIHandler
from pr_agent.algo.cli_args import CliArgs
from pr_agent.algo.utils import update_settings_from_args
from pr_agent.config_loader import get_settings
from pr_agent.git_providers.utils import apply_repo_settings
@ -12,8 +13,8 @@ from pr_agent.tools.pr_code_suggestions import PRCodeSuggestions
from pr_agent.tools.pr_config import PRConfig
from pr_agent.tools.pr_description import PRDescription
from pr_agent.tools.pr_generate_labels import PRGenerateLabels
from pr_agent.tools.pr_help_docs import PRHelpDocs
from pr_agent.tools.pr_help_message import PRHelpMessage
from pr_agent.tools.pr_information_from_user import PRInformationFromUser
from pr_agent.tools.pr_line_questions import PR_LineQuestions
from pr_agent.tools.pr_questions import PRQuestions
from pr_agent.tools.pr_reviewer import PRReviewer
@ -25,8 +26,6 @@ command2class = {
"answer": PRReviewer,
"review": PRReviewer,
"review_pr": PRReviewer,
"reflect": PRInformationFromUser,
"reflect_and_review": PRInformationFromUser,
"describe": PRDescription,
"describe_pr": PRDescription,
"improve": PRCodeSuggestions,
@ -41,17 +40,18 @@ command2class = {
"similar_issue": PRSimilarIssue,
"add_docs": PRAddDocs,
"generate_labels": PRGenerateLabels,
"help_docs": PRHelpDocs,
}
commands = list(command2class.keys())
class PRAgent:
def __init__(self, ai_handler: partial[BaseAiHandler,] = LiteLLMAIHandler):
self.ai_handler = ai_handler # will be initialized in run_action
self.forbidden_cli_args = ['enable_auto_approval']
async def handle_request(self, pr_url, request, notify=None) -> bool:
async def _handle_request(self, pr_url, request, notify=None) -> bool:
# First, apply repo specific settings if exists
apply_repo_settings(pr_url)
@ -64,24 +64,45 @@ class PRAgent:
else:
action, *args = request
if args:
for forbidden_arg in self.forbidden_cli_args:
for arg in args:
if forbidden_arg in arg:
get_logger().error(
f"CLI argument for param '{forbidden_arg}' is forbidden. Use instead a configuration file."
)
return False
# validate args
is_valid, arg = CliArgs.validate_user_args(args)
if not is_valid:
get_logger().error(
f"CLI argument for param '{arg}' is forbidden. Use instead a configuration file."
)
return False
# Update settings from args
args = update_settings_from_args(args)
# Append the response language in the extra instructions
response_language = get_settings().config.get('response_language', 'en-us')
if response_language.lower() != 'en-us':
get_logger().info(f'User has set the response language to: {response_language}')
for key in get_settings():
setting = get_settings().get(key)
if str(type(setting)) == "<class 'dynaconf.utils.boxing.DynaBox'>":
if hasattr(setting, 'extra_instructions'):
current_extra_instructions = setting.extra_instructions
# Define the language-specific instruction and the separator
lang_instruction_text = f"Your response MUST be written in the language corresponding to locale code: '{response_language}'. This is crucial."
separator_text = "\n======\n\nIn addition, "
# Check if the specific language instruction is already present to avoid duplication
if lang_instruction_text not in str(current_extra_instructions):
if current_extra_instructions: # If there's existing text
setting.extra_instructions = str(current_extra_instructions) + separator_text + lang_instruction_text
else: # If extra_instructions was None or empty
setting.extra_instructions = lang_instruction_text
# If lang_instruction_text is already present, do nothing.
action = action.lstrip("/").lower()
if action not in command2class:
get_logger().debug(f"Unknown command: {action}")
get_logger().warning(f"Unknown command: {action}")
return False
with get_logger().contextualize(command=action, pr_url=pr_url):
get_logger().info("PR-Agent request handler started", analytics=True)
if action == "reflect_and_review":
get_settings().pr_reviewer.ask_and_reflect = True
if action == "answer":
if notify:
notify()
@ -96,3 +117,10 @@ class PRAgent:
else:
return False
return True
async def handle_request(self, pr_url, request, notify=None) -> bool:
try:
return await self._handle_request(pr_url, request, notify)
except:
get_logger().exception("Failed to process the command.")
return False

View File

@ -20,13 +20,31 @@ MAX_TOKENS = {
'gpt-4o-mini-2024-07-18': 128000, # 128K, but may be limited by config.max_model_tokens
'gpt-4o-2024-08-06': 128000, # 128K, but may be limited by config.max_model_tokens
'gpt-4o-2024-11-20': 128000, # 128K, but may be limited by config.max_model_tokens
'gpt-4.5-preview': 128000, # 128K, but may be limited by config.max_model_tokens
'gpt-4.5-preview-2025-02-27': 128000, # 128K, but may be limited by config.max_model_tokens
'gpt-4.1': 1047576,
'gpt-4.1-2025-04-14': 1047576,
'gpt-4.1-mini': 1047576,
'gpt-4.1-mini-2025-04-14': 1047576,
'gpt-4.1-nano': 1047576,
'gpt-4.1-nano-2025-04-14': 1047576,
'o1-mini': 128000, # 128K, but may be limited by config.max_model_tokens
'o1-mini-2024-09-12': 128000, # 128K, but may be limited by config.max_model_tokens
'o1-preview': 128000, # 128K, but may be limited by config.max_model_tokens
'o1-preview-2024-09-12': 128000, # 128K, but may be limited by config.max_model_tokens
'o1-2024-12-17': 204800, # 200K, but may be limited by config.max_model_tokens
'o1': 204800, # 200K, but may be limited by config.max_model_tokens
'o3-mini': 204800, # 200K, but may be limited by config.max_model_tokens
'o3-mini-2025-01-31': 204800, # 200K, but may be limited by config.max_model_tokens
'o3': 200000, # 200K, but may be limited by config.max_model_tokens
'o3-2025-04-16': 200000, # 200K, but may be limited by config.max_model_tokens
'o4-mini': 200000, # 200K, but may be limited by config.max_model_tokens
'o4-mini-2025-04-16': 200000, # 200K, but may be limited by config.max_model_tokens
'claude-instant-1': 100000,
'claude-2': 100000,
'command-nightly': 4096,
'deepseek/deepseek-chat': 128000, # 128K, but may be limited by config.max_model_tokens
'deepseek/deepseek-reasoner': 64000, # 64K, but may be limited by config.max_model_tokens
'replicate/llama-2-70b-chat:2c1608e18606fad2812020dc541930f2d0495ce32eee50074220b87300bc16e1': 4096,
'meta-llama/Llama-2-7b-chat-hf': 4096,
'vertex_ai/codechat-bison': 6144,
@ -35,37 +53,85 @@ MAX_TOKENS = {
'vertex_ai/claude-3-5-haiku@20241022': 100000,
'vertex_ai/claude-3-sonnet@20240229': 100000,
'vertex_ai/claude-3-opus@20240229': 100000,
'vertex_ai/claude-opus-4@20250514': 200000,
'vertex_ai/claude-3-5-sonnet@20240620': 100000,
'vertex_ai/claude-3-5-sonnet-v2@20241022': 100000,
'vertex_ai/claude-3-7-sonnet@20250219': 200000,
'vertex_ai/claude-sonnet-4@20250514': 200000,
'vertex_ai/gemini-1.5-pro': 1048576,
'vertex_ai/gemini-2.5-pro-preview-03-25': 1048576,
'vertex_ai/gemini-2.5-pro-preview-05-06': 1048576,
'vertex_ai/gemini-2.5-pro-preview-06-05': 1048576,
'vertex_ai/gemini-2.5-pro': 1048576,
'vertex_ai/gemini-1.5-flash': 1048576,
'vertex_ai/gemini-2.0-flash': 1048576,
'vertex_ai/gemini-2.5-flash-preview-04-17': 1048576,
'vertex_ai/gemini-2.5-flash-preview-05-20': 1048576,
'vertex_ai/gemini-2.5-flash': 1048576,
'vertex_ai/gemma2': 8200,
'gemini/gemini-1.5-pro': 1048576,
'gemini/gemini-1.5-flash': 1048576,
'gemini/gemini-2.0-flash': 1048576,
'gemini/gemini-2.5-flash-preview-04-17': 1048576,
'gemini/gemini-2.5-flash-preview-05-20': 1048576,
'gemini/gemini-2.5-flash': 1048576,
'gemini/gemini-2.5-pro-preview-03-25': 1048576,
'gemini/gemini-2.5-pro-preview-05-06': 1048576,
'gemini/gemini-2.5-pro-preview-06-05': 1048576,
'gemini/gemini-2.5-pro': 1048576,
'codechat-bison': 6144,
'codechat-bison-32k': 32000,
'anthropic.claude-instant-v1': 100000,
'anthropic.claude-v1': 100000,
'anthropic.claude-v2': 100000,
'anthropic/claude-3-opus-20240229': 100000,
'anthropic/claude-opus-4-20250514': 200000,
'anthropic/claude-3-5-sonnet-20240620': 100000,
'anthropic/claude-3-5-sonnet-20241022': 100000,
'anthropic/claude-3-7-sonnet-20250219': 200000,
'anthropic/claude-sonnet-4-20250514': 200000,
'claude-3-7-sonnet-20250219': 200000,
'anthropic/claude-3-5-haiku-20241022': 100000,
'bedrock/anthropic.claude-instant-v1': 100000,
'bedrock/anthropic.claude-v2': 100000,
'bedrock/anthropic.claude-v2:1': 100000,
'bedrock/anthropic.claude-3-sonnet-20240229-v1:0': 100000,
'bedrock/anthropic.claude-opus-4-20250514-v1:0': 200000,
'bedrock/anthropic.claude-3-haiku-20240307-v1:0': 100000,
'bedrock/anthropic.claude-3-5-haiku-20241022-v1:0': 100000,
'bedrock/anthropic.claude-3-5-sonnet-20240620-v1:0': 100000,
'bedrock/anthropic.claude-3-5-sonnet-20241022-v2:0': 100000,
'bedrock/anthropic.claude-3-7-sonnet-20250219-v1:0': 200000,
'bedrock/anthropic.claude-sonnet-4-20250514-v1:0': 200000,
"bedrock/us.anthropic.claude-opus-4-20250514-v1:0": 200000,
"bedrock/us.anthropic.claude-3-5-sonnet-20241022-v2:0": 100000,
"bedrock/us.anthropic.claude-3-7-sonnet-20250219-v1:0": 200000,
"bedrock/us.anthropic.claude-sonnet-4-20250514-v1:0": 200000,
"bedrock/apac.anthropic.claude-3-5-sonnet-20241022-v2:0": 100000,
"bedrock/apac.anthropic.claude-3-7-sonnet-20250219-v1:0": 200000,
"bedrock/apac.anthropic.claude-sonnet-4-20250514-v1:0": 200000,
'claude-3-5-sonnet': 100000,
'groq/meta-llama/llama-4-scout-17b-16e-instruct': 131072,
'groq/meta-llama/llama-4-maverick-17b-128e-instruct': 131072,
'bedrock/us.meta.llama4-scout-17b-instruct-v1:0': 128000,
'bedrock/us.meta.llama4-maverick-17b-instruct-v1:0': 128000,
'groq/llama3-8b-8192': 8192,
'groq/llama3-70b-8192': 8192,
'groq/llama-3.1-8b-instant': 8192,
'groq/llama-3.3-70b-versatile': 128000,
'groq/mixtral-8x7b-32768': 32768,
'groq/llama-3.1-8b-instant': 131072,
'groq/llama-3.1-70b-versatile': 131072,
'groq/llama-3.1-405b-reasoning': 131072,
'groq/gemma2-9b-it': 8192,
'xai/grok-2': 131072,
'xai/grok-2-1212': 131072,
'xai/grok-2-latest': 131072,
'xai/grok-3': 131072,
'xai/grok-3-beta': 131072,
'xai/grok-3-fast': 131072,
'xai/grok-3-fast-beta': 131072,
'xai/grok-3-mini': 131072,
'xai/grok-3-mini-beta': 131072,
'xai/grok-3-mini-fast': 131072,
'xai/grok-3-mini-fast-beta': 131072,
'ollama/llama3': 4096,
'watsonx/meta-llama/llama-3-8b-instruct': 4096,
"watsonx/meta-llama/llama-3-70b-instruct": 4096,
@ -73,4 +139,57 @@ MAX_TOKENS = {
"watsonx/ibm/granite-13b-chat-v2": 8191,
"watsonx/ibm/granite-34b-code-instruct": 8191,
"watsonx/mistralai/mistral-large": 32768,
"deepinfra/deepseek-ai/DeepSeek-R1-Distill-Qwen-32B": 128000,
"deepinfra/deepseek-ai/DeepSeek-R1-Distill-Llama-70B": 128000,
"deepinfra/deepseek-ai/DeepSeek-R1": 128000,
"mistral/mistral-small-latest": 8191,
"mistral/mistral-medium-latest": 8191,
"mistral/mistral-large-2407": 128000,
"mistral/mistral-large-latest": 128000,
"mistral/open-mistral-7b": 8191,
"mistral/open-mixtral-8x7b": 8191,
"mistral/open-mixtral-8x22b": 8191,
"mistral/codestral-latest": 8191,
"mistral/open-mistral-nemo": 128000,
"mistral/open-mistral-nemo-2407": 128000,
"mistral/open-codestral-mamba": 256000,
"mistral/codestral-mamba-latest": 256000,
"codestral/codestral-latest": 8191,
"codestral/codestral-2405": 8191,
}
USER_MESSAGE_ONLY_MODELS = [
"deepseek/deepseek-reasoner",
"o1-mini",
"o1-mini-2024-09-12",
"o1-preview"
]
NO_SUPPORT_TEMPERATURE_MODELS = [
"deepseek/deepseek-reasoner",
"o1-mini",
"o1-mini-2024-09-12",
"o1",
"o1-2024-12-17",
"o3-mini",
"o3-mini-2025-01-31",
"o1-preview",
"o3",
"o3-2025-04-16",
"o4-mini",
"o4-mini-2025-04-16",
]
SUPPORT_REASONING_EFFORT_MODELS = [
"o3-mini",
"o3-mini-2025-01-31",
"o3",
"o3-2025-04-16",
"o4-mini",
"o4-mini-2025-04-16",
]
CLAUDE_EXTENDED_THINKING_MODELS = [
"anthropic/claude-3-7-sonnet-20250219",
"claude-3-7-sonnet-20250219"
]

View File

@ -1,13 +1,17 @@
_LANGCHAIN_INSTALLED = False
try:
from langchain_core.messages import HumanMessage, SystemMessage
from langchain_openai import AzureChatOpenAI, ChatOpenAI
_LANGCHAIN_INSTALLED = True
except: # we don't enforce langchain as a dependency, so if it's not installed, just move on
pass
import functools
from openai import APIError, RateLimitError, Timeout
from retry import retry
import openai
from tenacity import retry, retry_if_exception_type, retry_if_not_exception_type, stop_after_attempt
from langchain_core.runnables import Runnable
from pr_agent.algo.ai_handlers.base_ai_handler import BaseAiHandler
from pr_agent.config_loader import get_settings
@ -18,17 +22,14 @@ OPENAI_RETRIES = 5
class LangChainOpenAIHandler(BaseAiHandler):
def __init__(self):
# Initialize OpenAIHandler specific attributes here
if not _LANGCHAIN_INSTALLED:
error_msg = "LangChain is not installed. Please install it with `pip install langchain`."
get_logger().error(error_msg)
raise ImportError(error_msg)
super().__init__()
self.azure = get_settings().get("OPENAI.API_TYPE", "").lower() == "azure"
# Create a default unused chat object to trigger early validation
self._create_chat(self.deployment_id)
def chat(self, messages: list, model: str, temperature: float):
chat = self._create_chat(self.deployment_id)
return chat.invoke(input=messages, model=model, temperature=temperature)
@property
def deployment_id(self):
"""
@ -36,26 +37,10 @@ class LangChainOpenAIHandler(BaseAiHandler):
"""
return get_settings().get("OPENAI.DEPLOYMENT_ID", None)
@retry(exceptions=(APIError, Timeout, AttributeError, RateLimitError),
tries=OPENAI_RETRIES, delay=2, backoff=2, jitter=(1, 3))
async def chat_completion(self, model: str, system: str, user: str, temperature: float = 0.2):
try:
messages = [SystemMessage(content=system), HumanMessage(content=user)]
# get a chat completion from the formatted messages
resp = self.chat(messages, model=model, temperature=temperature)
finish_reason = "completed"
return resp.content, finish_reason
except (Exception) as e:
get_logger().error("Unknown error during OpenAI inference: ", e)
raise e
def _create_chat(self, deployment_id=None):
async def _create_chat_async(self, deployment_id=None):
try:
if self.azure:
# using a partial function so we can set the deployment_id later to support fallback_deployments
# but still need to access the other settings now so we can raise a proper exception if they're missing
# Using Azure OpenAI service
return AzureChatOpenAI(
openai_api_key=get_settings().openai.key,
openai_api_version=get_settings().openai.api_version,
@ -63,14 +48,64 @@ class LangChainOpenAIHandler(BaseAiHandler):
azure_endpoint=get_settings().openai.api_base,
)
else:
# for llms that compatible with openai, should use custom api base
# Using standard OpenAI or other LLM services
openai_api_base = get_settings().get("OPENAI.API_BASE", None)
if openai_api_base is None or len(openai_api_base) == 0:
return ChatOpenAI(openai_api_key=get_settings().openai.key)
else:
return ChatOpenAI(openai_api_key=get_settings().openai.key, openai_api_base=openai_api_base)
return ChatOpenAI(
openai_api_key=get_settings().openai.key,
openai_api_base=openai_api_base
)
except AttributeError as e:
if getattr(e, "name"):
raise ValueError(f"OpenAI {e.name} is required") from e
# Handle configuration errors
error_msg = f"OpenAI {e.name} is required" if getattr(e, "name") else str(e)
get_logger().error(error_msg)
raise ValueError(error_msg) from e
@retry(
retry=retry_if_exception_type(openai.APIError) & retry_if_not_exception_type(openai.RateLimitError),
stop=stop_after_attempt(OPENAI_RETRIES),
)
async def chat_completion(self, model: str, system: str, user: str, temperature: float = 0.2, img_path: str = None):
if img_path:
get_logger().warning(f"Image path is not supported for LangChainOpenAIHandler. Ignoring image path: {img_path}")
try:
messages = [SystemMessage(content=system), HumanMessage(content=user)]
llm = await self._create_chat_async(deployment_id=self.deployment_id)
if not isinstance(llm, Runnable):
error_message = (
f"The Langchain LLM object ({type(llm)}) does not implement the Runnable interface. "
f"Please update your Langchain library to the latest version or "
f"check your LLM configuration to support async calls. "
f"PR-Agent is designed to utilize Langchain's async capabilities."
)
get_logger().error(error_message)
raise NotImplementedError(error_message)
# Handle parameters based on LLM type
if isinstance(llm, (ChatOpenAI, AzureChatOpenAI)):
# OpenAI models support all parameters
resp = await llm.ainvoke(
input=messages,
model=model,
temperature=temperature
)
else:
raise e
# Other LLMs (like Gemini) only support input parameter
get_logger().info(f"Using simplified ainvoke for {type(llm)}")
resp = await llm.ainvoke(input=messages)
finish_reason = "completed"
return resp.content, finish_reason
except openai.RateLimitError as e:
get_logger().error(f"Rate limit error during LLM inference: {e}")
raise
except openai.APIError as e:
get_logger().warning(f"Error during LLM inference: {e}")
raise
except Exception as e:
get_logger().warning(f"Unknown error during LLM inference: {e}")
raise openai.APIError from e

View File

@ -1,14 +1,16 @@
import os
import litellm
import openai
import requests
from litellm import acompletion
from tenacity import retry, retry_if_exception_type, stop_after_attempt
from tenacity import retry, retry_if_exception_type, retry_if_not_exception_type, stop_after_attempt
from pr_agent.algo import CLAUDE_EXTENDED_THINKING_MODELS, NO_SUPPORT_TEMPERATURE_MODELS, SUPPORT_REASONING_EFFORT_MODELS, USER_MESSAGE_ONLY_MODELS
from pr_agent.algo.ai_handlers.base_ai_handler import BaseAiHandler
from pr_agent.algo.utils import ReasoningEffort, get_version
from pr_agent.config_loader import get_settings
from pr_agent.log import get_logger
import json
OPENAI_RETRIES = 5
@ -28,6 +30,7 @@ class LiteLLMAIHandler(BaseAiHandler):
self.azure = False
self.api_base = None
self.repetition_penalty = None
if get_settings().get("OPENAI.KEY", None):
openai.api_key = get_settings().openai.key
litellm.openai_key = get_settings().openai.key
@ -38,11 +41,6 @@ class LiteLLMAIHandler(BaseAiHandler):
os.environ["AWS_ACCESS_KEY_ID"] = get_settings().aws.AWS_ACCESS_KEY_ID
os.environ["AWS_SECRET_ACCESS_KEY"] = get_settings().aws.AWS_SECRET_ACCESS_KEY
os.environ["AWS_REGION_NAME"] = get_settings().aws.AWS_REGION_NAME
if get_settings().get("litellm.use_client"):
litellm_token = get_settings().get("litellm.LITELLM_TOKEN")
assert litellm_token, "LITELLM_TOKEN is required"
os.environ["LITELLM_TOKEN"] = litellm_token
litellm.use_client = True
if get_settings().get("LITELLM.DROP_PARAMS", None):
litellm.drop_params = get_settings().litellm.drop_params
if get_settings().get("LITELLM.SUCCESS_CALLBACK", None):
@ -61,6 +59,7 @@ class LiteLLMAIHandler(BaseAiHandler):
litellm.api_version = get_settings().openai.api_version
if get_settings().get("OPENAI.API_BASE", None):
litellm.api_base = get_settings().openai.api_base
self.api_base = get_settings().openai.api_base
if get_settings().get("ANTHROPIC.KEY", None):
litellm.anthropic_key = get_settings().anthropic.key
if get_settings().get("COHERE.KEY", None):
@ -69,6 +68,8 @@ class LiteLLMAIHandler(BaseAiHandler):
litellm.api_key = get_settings().groq.key
if get_settings().get("REPLICATE.KEY", None):
litellm.replicate_key = get_settings().replicate.key
if get_settings().get("XAI.KEY", None):
litellm.api_key = get_settings().xai.key
if get_settings().get("HUGGINGFACE.KEY", None):
litellm.huggingface_key = get_settings().huggingface.key
if get_settings().get("HUGGINGFACE.API_BASE", None) and 'huggingface' in get_settings().config.model:
@ -89,6 +90,79 @@ class LiteLLMAIHandler(BaseAiHandler):
if get_settings().get("GOOGLE_AI_STUDIO.GEMINI_API_KEY", None):
os.environ["GEMINI_API_KEY"] = get_settings().google_ai_studio.gemini_api_key
# Support deepseek models
if get_settings().get("DEEPSEEK.KEY", None):
os.environ['DEEPSEEK_API_KEY'] = get_settings().get("DEEPSEEK.KEY")
# Support deepinfra models
if get_settings().get("DEEPINFRA.KEY", None):
os.environ['DEEPINFRA_API_KEY'] = get_settings().get("DEEPINFRA.KEY")
# Support mistral models
if get_settings().get("MISTRAL.KEY", None):
os.environ["MISTRAL_API_KEY"] = get_settings().get("MISTRAL.KEY")
# Support codestral models
if get_settings().get("CODESTRAL.KEY", None):
os.environ["CODESTRAL_API_KEY"] = get_settings().get("CODESTRAL.KEY")
# Check for Azure AD configuration
if get_settings().get("AZURE_AD.CLIENT_ID", None):
self.azure = True
# Generate access token using Azure AD credentials from settings
access_token = self._get_azure_ad_token()
litellm.api_key = access_token
openai.api_key = access_token
# Set API base from settings
self.api_base = get_settings().azure_ad.api_base
litellm.api_base = self.api_base
openai.api_base = self.api_base
# Support for Openrouter models
if get_settings().get("OPENROUTER.KEY", None):
openrouter_api_key = get_settings().get("OPENROUTER.KEY", None)
os.environ["OPENROUTER_API_KEY"] = openrouter_api_key
litellm.api_key = openrouter_api_key
openai.api_key = openrouter_api_key
openrouter_api_base = get_settings().get("OPENROUTER.API_BASE", "https://openrouter.ai/api/v1")
os.environ["OPENROUTER_API_BASE"] = openrouter_api_base
self.api_base = openrouter_api_base
litellm.api_base = openrouter_api_base
# Models that only use user message
self.user_message_only_models = USER_MESSAGE_ONLY_MODELS
# Model that doesn't support temperature argument
self.no_support_temperature_models = NO_SUPPORT_TEMPERATURE_MODELS
# Models that support reasoning effort
self.support_reasoning_models = SUPPORT_REASONING_EFFORT_MODELS
# Models that support extended thinking
self.claude_extended_thinking_models = CLAUDE_EXTENDED_THINKING_MODELS
def _get_azure_ad_token(self):
"""
Generates an access token using Azure AD credentials from settings.
Returns:
str: The access token
"""
from azure.identity import ClientSecretCredential
try:
credential = ClientSecretCredential(
tenant_id=get_settings().azure_ad.tenant_id,
client_id=get_settings().azure_ad.client_id,
client_secret=get_settings().azure_ad.client_secret
)
# Get token for Azure OpenAI service
token = credential.get_token("https://cognitiveservices.azure.com/.default")
return token.token
except Exception as e:
get_logger().error(f"Failed to get Azure AD token: {e}")
raise
def prepare_logs(self, response, system, user, resp, finish_reason):
response_log = response.dict().copy()
response_log['system'] = system
@ -101,7 +175,44 @@ class LiteLLMAIHandler(BaseAiHandler):
response_log['main_pr_language'] = 'unknown'
return response_log
def add_litellm_callbacks(selfs, kwargs) -> dict:
def _configure_claude_extended_thinking(self, model: str, kwargs: dict) -> dict:
"""
Configure Claude extended thinking parameters if applicable.
Args:
model (str): The AI model being used
kwargs (dict): The keyword arguments for the model call
Returns:
dict: Updated kwargs with extended thinking configuration
"""
extended_thinking_budget_tokens = get_settings().config.get("extended_thinking_budget_tokens", 2048)
extended_thinking_max_output_tokens = get_settings().config.get("extended_thinking_max_output_tokens", 4096)
# Validate extended thinking parameters
if not isinstance(extended_thinking_budget_tokens, int) or extended_thinking_budget_tokens <= 0:
raise ValueError(f"extended_thinking_budget_tokens must be a positive integer, got {extended_thinking_budget_tokens}")
if not isinstance(extended_thinking_max_output_tokens, int) or extended_thinking_max_output_tokens <= 0:
raise ValueError(f"extended_thinking_max_output_tokens must be a positive integer, got {extended_thinking_max_output_tokens}")
if extended_thinking_max_output_tokens < extended_thinking_budget_tokens:
raise ValueError(f"extended_thinking_max_output_tokens ({extended_thinking_max_output_tokens}) must be greater than or equal to extended_thinking_budget_tokens ({extended_thinking_budget_tokens})")
kwargs["thinking"] = {
"type": "enabled",
"budget_tokens": extended_thinking_budget_tokens
}
if get_settings().config.verbosity_level >= 2:
get_logger().info(f"Adding max output tokens {extended_thinking_max_output_tokens} to model {model}, extended thinking budget tokens: {extended_thinking_budget_tokens}")
kwargs["max_tokens"] = extended_thinking_max_output_tokens
# temperature may only be set to 1 when thinking is enabled
if get_settings().config.verbosity_level >= 2:
get_logger().info("Temperature may only be set to 1 when thinking is enabled with claude models.")
kwargs["temperature"] = 1
return kwargs
def add_litellm_callbacks(self, kwargs) -> dict:
captured_extra = []
def capture_logs(message):
@ -132,7 +243,7 @@ class LiteLLMAIHandler(BaseAiHandler):
if "langfuse" in callbacks:
metadata.update({
"trace_name": command,
"tags": [git_provider, command],
"tags": [git_provider, command, f'version:{get_version()}'],
"trace_metadata": {
"command": command,
"pr_url": pr_url,
@ -141,7 +252,7 @@ class LiteLLMAIHandler(BaseAiHandler):
if "langsmith" in callbacks:
metadata.update({
"run_name": command,
"tags": [git_provider, command],
"tags": [git_provider, command, f'version:{get_version()}'],
"extra": {
"metadata": {
"command": command,
@ -163,8 +274,8 @@ class LiteLLMAIHandler(BaseAiHandler):
return get_settings().get("OPENAI.DEPLOYMENT_ID", None)
@retry(
retry=retry_if_exception_type((openai.APIError, openai.APIConnectionError, openai.APITimeoutError)), # No retry on RateLimitError
stop=stop_after_attempt(OPENAI_RETRIES)
retry=retry_if_exception_type(openai.APIError) & retry_if_not_exception_type(openai.RateLimitError),
stop=stop_after_attempt(OPENAI_RETRIES),
)
async def chat_completion(self, model: str, system: str, user: str, temperature: float = 0.2, img_path: str = None):
try:
@ -192,13 +303,11 @@ class LiteLLMAIHandler(BaseAiHandler):
messages[1]["content"] = [{"type": "text", "text": messages[1]["content"]},
{"type": "image_url", "image_url": {"url": img_path}}]
# Currently O1 does not support separate system and user prompts
O1_MODEL_PREFIX = 'o1-'
model_type = model.split('/')[-1] if '/' in model else model
if model_type.startswith(O1_MODEL_PREFIX):
# Currently, some models do not support a separate system and user prompts
if model in self.user_message_only_models or get_settings().config.custom_reasoning_model:
user = f"{system}\n\n\n{user}"
system = ""
get_logger().info(f"Using O1 model, combining system and user prompts")
get_logger().info(f"Using model {model}, combining system and user prompts")
messages = [{"role": "user", "content": user}]
kwargs = {
"model": model,
@ -212,11 +321,26 @@ class LiteLLMAIHandler(BaseAiHandler):
"model": model,
"deployment_id": deployment_id,
"messages": messages,
"temperature": temperature,
"timeout": get_settings().config.ai_timeout,
"api_base": self.api_base,
}
# Add temperature only if model supports it
if model not in self.no_support_temperature_models and not get_settings().config.custom_reasoning_model:
# get_logger().info(f"Adding temperature with value {temperature} to model {model}.")
kwargs["temperature"] = temperature
# Add reasoning_effort if model supports it
if (model in self.support_reasoning_models):
supported_reasoning_efforts = [ReasoningEffort.HIGH.value, ReasoningEffort.MEDIUM.value, ReasoningEffort.LOW.value]
reasoning_effort = get_settings().config.reasoning_effort if (get_settings().config.reasoning_effort in supported_reasoning_efforts) else ReasoningEffort.MEDIUM.value
get_logger().info(f"Adding reasoning_effort with value {reasoning_effort} to model {model}.")
kwargs["reasoning_effort"] = reasoning_effort
# https://docs.anthropic.com/en/docs/build-with-claude/extended-thinking
if (model in self.claude_extended_thinking_models) and get_settings().config.get("enable_claude_extended_thinking", False):
kwargs = self._configure_claude_extended_thinking(model, kwargs)
if get_settings().litellm.get("enable_callbacks", False):
kwargs = self.add_litellm_callbacks(kwargs)
@ -230,6 +354,16 @@ class LiteLLMAIHandler(BaseAiHandler):
if self.repetition_penalty:
kwargs["repetition_penalty"] = self.repetition_penalty
#Added support for extra_headers while using litellm to call underlying model, via a api management gateway, would allow for passing custom headers for security and authorization
if get_settings().get("LITELLM.EXTRA_HEADERS", None):
try:
litellm_extra_headers = json.loads(get_settings().litellm.extra_headers)
if not isinstance(litellm_extra_headers, dict):
raise ValueError("LITELLM.EXTRA_HEADERS must be a JSON object")
except json.JSONDecodeError as e:
raise ValueError(f"LITELLM.EXTRA_HEADERS contains invalid JSON: {str(e)}")
kwargs["extra_headers"] = litellm_extra_headers
get_logger().debug("Prompts", artifact={"system": system, "user": user})
if get_settings().config.verbosity_level >= 2:
@ -237,13 +371,13 @@ class LiteLLMAIHandler(BaseAiHandler):
get_logger().info(f"\nUser prompt:\n{user}")
response = await acompletion(**kwargs)
except (openai.APIError, openai.APITimeoutError) as e:
get_logger().warning(f"Error during LLM inference: {e}")
raise
except (openai.RateLimitError) as e:
except openai.RateLimitError as e:
get_logger().error(f"Rate limit error during LLM inference: {e}")
raise
except (Exception) as e:
except openai.APIError as e:
get_logger().warning(f"Error during LLM inference: {e}")
raise
except Exception as e:
get_logger().warning(f"Unknown error during LLM inference: {e}")
raise openai.APIError from e
if response is None or len(response["choices"]) == 0:

View File

@ -1,8 +1,8 @@
from os import environ
from pr_agent.algo.ai_handlers.base_ai_handler import BaseAiHandler
import openai
from openai import APIError, AsyncOpenAI, RateLimitError, Timeout
from retry import retry
from openai import AsyncOpenAI
from tenacity import retry, retry_if_exception_type, retry_if_not_exception_type, stop_after_attempt
from pr_agent.algo.ai_handlers.base_ai_handler import BaseAiHandler
from pr_agent.config_loader import get_settings
@ -38,10 +38,14 @@ class OpenAIHandler(BaseAiHandler):
"""
return get_settings().get("OPENAI.DEPLOYMENT_ID", None)
@retry(exceptions=(APIError, Timeout, AttributeError, RateLimitError),
tries=OPENAI_RETRIES, delay=2, backoff=2, jitter=(1, 3))
async def chat_completion(self, model: str, system: str, user: str, temperature: float = 0.2):
@retry(
retry=retry_if_exception_type(openai.APIError) & retry_if_not_exception_type(openai.RateLimitError),
stop=stop_after_attempt(OPENAI_RETRIES),
)
async def chat_completion(self, model: str, system: str, user: str, temperature: float = 0.2, img_path: str = None):
try:
if img_path:
get_logger().warning(f"Image path is not supported for OpenAIHandler. Ignoring image path: {img_path}")
get_logger().info("System: ", system)
get_logger().info("User: ", user)
messages = [{"role": "system", "content": system}, {"role": "user", "content": user}]
@ -57,12 +61,12 @@ class OpenAIHandler(BaseAiHandler):
get_logger().info("AI response", response=resp, messages=messages, finish_reason=finish_reason,
model=model, usage=usage)
return resp, finish_reason
except (APIError, Timeout) as e:
get_logger().error("Error during OpenAI inference: ", e)
except openai.RateLimitError as e:
get_logger().error(f"Rate limit error during LLM inference: {e}")
raise
except (RateLimitError) as e:
get_logger().error("Rate limit error during OpenAI inference: ", e)
raise
except (Exception) as e:
get_logger().error("Unknown error during OpenAI inference: ", e)
except openai.APIError as e:
get_logger().warning(f"Error during LLM inference: {e}")
raise
except Exception as e:
get_logger().warning(f"Unknown error during LLM inference: {e}")
raise openai.APIError from e

Some files were not shown because too many files have changed in this diff Show More