Skip to content

Conversation

@rynomster
Copy link

@rynomster rynomster commented Jan 21, 2026

User description

Bump version, newer models - YAY!


PR Type

Enhancement


Description

  • Update litellm dependency from 1.77.7 to 1.81.1

  • Enables access to newer AI models and features


Diagram Walkthrough

flowchart LR
  A["litellm 1.77.7"] -- "upgrade" --> B["litellm 1.81.1"]
  B -- "enables" --> C["Newer models & features"]
Loading

File Walkthrough

Relevant files
Dependencies
requirements.txt
Upgrade litellm dependency version                                             

requirements.txt

  • Updated litellm package version from 1.77.7 to 1.81.1
  • Brings in newer model support and improvements
+1/-1     

Bump version, newer models - YAY!
@qodo-free-for-open-source-projects
Copy link
Contributor

PR Compliance Guide 🔍

Below is a summary of compliance checks for this PR:

Security Compliance
🟢
No security concerns identified No security vulnerabilities detected by AI analysis. Human verification advised for critical code.
Ticket Compliance
🎫 No ticket provided
  • Create ticket/issue
Codebase Duplication Compliance
Codebase context is not defined

Follow the guide to enable codebase context checks.

Custom Compliance
🟢
Consistent Naming Conventions

Objective: All new variables, functions, and classes must follow the project's established naming
standards

Status: Passed

No Dead or Commented-Out Code

Objective: Keep the codebase clean by ensuring all submitted code is active and necessary

Status: Passed

Robust Error Handling

Objective: Ensure potential errors and edge cases are anticipated and handled gracefully throughout
the code

Status: Passed

Single Responsibility for Functions

Objective: Each function should have a single, well-defined responsibility

Status: Passed

When relevant, utilize early return

Objective: In a code snippet containing multiple logic conditions (such as 'if-else'), prefer an
early return on edge cases than deep nesting

Status: Passed

Compliance status legend 🟢 - Fully Compliant
🟡 - Partial Compliant
🔴 - Not Compliant
⚪ - Requires Further Human Verification
🏷️ - Compliance label

@qodo-free-for-open-source-projects
Copy link
Contributor

PR Code Suggestions ✨

No code suggestions found for the PR.

@rynomster
Copy link
Author

@naorpeled Good day, requesting review please boss 👍

Copy link
Collaborator

@naorpeled naorpeled left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM 🔥

@naorpeled
Copy link
Collaborator

I'll do some manual testing and get this merged asap 🙏

@gvago
Copy link

gvago commented Jan 27, 2026

/config

@qodo-free-for-open-source-projects
Copy link
Contributor

🛠️ Wiki configuration file settings:
[pr_code_suggestions]
demand_code_suggestions_self_review = true
suggestions_depth='exhaustive'
extra_instructions="""
- don't give suggestions about link being broken
"""

[pr_description] # /describe #
enable_pr_diagram=true

[pr_reviewer]
require_todo_scan=true

[github_app]
pr_commands = [
    "/describe --pr_description.final_update_message=false",
    "/compliance",
    "/improve"
]

push_commands = [
    "/describe",
    "/compliance"
]

🛠️ Local configuration file settings:
 [pr_reviewer]
enable_review_labels_effort = true
enable_auto_approval = true

[github_app]
pr_commands = [
    "/describe --pr_description.publish_description_as_comment=true",
    "/improve",
    "/agentic_review"
]

handle_push_trigger = true
push_commands = [
    "/improve",
    "/agentic_review"
]

[review_agent]
enabled = true
publish_output = true

🛠️ Global configuration file settings:

🛠️ PR-Agent final configurations:
==================== CONFIG ====================
config.model_reasoning = 'vertex_ai/gemini-2.5-pro'  
config.model = 'gpt-5.2-2025-12-11'  
config.model_turbo = 'anthropic/claude-haiku-4-5-20251001'  
config.fallback_models = ['anthropic/claude-sonnet-4-5-20250929', 'bedrock/us.anthropic.claude-sonnet-4-5-20250929-v1:0']  
config.second_model_for_exhaustive_mode = 'o4-mini'  
config.git_provider = 'github'  
config.publish_output = True  
config.publish_output_no_suggestions = True  
config.publish_output_progress = True  
config.verbosity_level = 0  
config.publish_logs = False  
config.debug_mode = False  
config.use_wiki_settings_file = True  
config.use_repo_settings_file = True  
config.use_global_settings_file = True  
config.use_global_wiki_settings_file = False  
config.disable_auto_feedback = False  
config.ai_timeout = 150  
config.response_language = 'en-US'  
config.clone_repo_instead_of_fetch = True  
config.always_clone = False  
config.add_repo_metadata = True  
config.clone_repo_time_limit = 300  
config.publish_inline_comments_fallback_batch_size = 5  
config.publish_inline_comments_fallback_sleep_time = 2  
config.max_model_tokens = 32000  
config.custom_model_max_tokens = -1  
config.patch_extension_skip_types = ['.md', '.txt']  
config.extra_allowed_extensions = []  
config.allow_dynamic_context = True  
config.allow_forward_dynamic_context = True  
config.max_extra_lines_before_dynamic_context = 12  
config.patch_extra_lines_before = 5  
config.patch_extra_lines_after = 1  
config.ai_handler = 'litellm'  
config.cli_mode = False  
config.trial_git_org_max_invokes_per_month = 75  
config.trial_ratio_close_to_limit = 0.8  
config.invite_only_mode = False  
config.enable_request_access_msg_on_new_pr = False  
config.check_also_invites_field = False  
config.calculate_context = True  
config.disable_checkboxes = False  
config.output_relevant_configurations = False  
config.large_patch_policy = 'clip'  
config.seed = -1  
config.temperature = 0.2  
config.allow_dynamic_context_ab_testing = False  
config.choose_dynamic_context_ab_testing_ratio = 0.5  
config.ignore_pr_title = ['^\\[Auto\\]', '^Auto']  
config.ignore_pr_target_branches = []  
config.ignore_pr_source_branches = []  
config.ignore_pr_labels = []  
config.ignore_ticket_labels = []  
config.allow_only_specific_folders = []  
config.ignore_pr_authors = 'REDACTED'  
config.ignore_repositories = []  
config.ignore_language_framework = []  
config.is_auto_command = False  
config.is_new_pr = False  
config.enable_ai_metadata = True  
config.present_reasoning = True  
config.max_tickets = 10  
config.max_tickets_chars = 8000  
config.prevent_any_approval = False  
config.enable_comment_approval = False  
config.enable_auto_approval = False  
config.auto_approve_for_low_review_effort = -1  
config.auto_approve_for_no_suggestions = False  
config.ensure_ticket_compliance = False  
config.new_diff_format = True  
config.new_diff_format_add_external_references = True  
config.enable_custom_labels = False  

==================== PR_REVIEWER ====================
pr_reviewer.require_score_review = False  
pr_reviewer.require_tests_review = True  
pr_reviewer.require_estimate_effort_to_review = True  
pr_reviewer.require_can_be_split_review = False  
pr_reviewer.require_security_review = True  
pr_reviewer.require_todo_scan = True  
pr_reviewer.require_ticket_analysis_review = True  
pr_reviewer.require_ticket_labels = False  
pr_reviewer.require_no_ticket_labels = False  
pr_reviewer.check_pr_additional_content = False  
pr_reviewer.persistent_comment = True  
pr_reviewer.extra_instructions = ''  
pr_reviewer.final_update_message = True  
pr_reviewer.enable_review_labels_security = True  
pr_reviewer.enable_review_labels_effort = True  
pr_reviewer.enable_help_text = False  
pr_reviewer.enable_auto_approval = True  

==================== PR_COMPLIANCE ====================
pr_compliance.enabled = True  
pr_compliance.enable_rules_platform = False  
pr_compliance.enable_security_section = True  
pr_compliance.enable_ticket_section = True  
pr_compliance.enable_codebase_duplication_section = True  
pr_compliance.enable_custom_compliance_section = True  
pr_compliance.require_ticket_analysis_review = True  
pr_compliance.allow_repo_pr_compliance = True  
pr_compliance.enable_global_pr_compliance = True  
pr_compliance.max_lines_allowed = 2000  
pr_compliance.local_wiki_compliance_str = ''  
pr_compliance.global_wiki_pr_compliance = ''  
pr_compliance.local_repo_compliance_str = 'pr_compliances:\n  - title: "Consistent Naming Conventions"\n    compliance_label: false\n    objective: "All new variables, functions, and classes must follow the project\'s established naming standards"\n    success_criteria: "All identifiers follow the established naming patterns (camelCase, snake_case, etc.)"\n    failure_criteria: "Inconsistent or non-standard naming that deviates from project conventions"\n\n  - title: "No Dead or Commented-Out Code"\n    compliance_label: false\n    objective: "Keep the codebase clean by ensuring all submitted code is active and necessary"\n    success_criteria: "All code in the PR is active and serves a purpose; no commented-out blocks"\n    failure_criteria: "Presence of unused, dead, or commented-out code sections"\n\n  - title: "Robust Error Handling"\n    compliance_label: false\n    objective: "Ensure potential errors and edge cases are anticipated and handled gracefully throughout the code"\n    success_criteria: "All error scenarios are properly caught and handled with appropriate responses"\n    failure_criteria: "Unhandled exceptions, ignored errors, or missing edge case handling"\n\n  - title: "Single Responsibility for Functions"\n    compliance_label: false\n    objective: "Each function should have a single, well-defined responsibility"\n    success_criteria: "Functions perform one cohesive task with a single purpose"\n    failure_criteria: "Functions that combine multiple unrelated operations or handle several distinct concerns"\n\n  - title: "When relevant, utilize early return"\n    compliance_label: false\n    objective: "In a code snippet containing multiple logic conditions (such as \'if-else\'), prefer an early return on edge cases than deep nesting"\n    success_criteria: "When relevant, utilize early return that reduces nesting"\n    failure_criteria: "Unjustified deep nesting that can be simplified by early return"\n'  
pr_compliance.global_repo_pr_compliance_str = ''  
pr_compliance.global_compliance_str = ''  
pr_compliance.enable_generic_custom_compliance_checklist = True  
pr_compliance.persist_generic_custom_compliance_checklist = False  
pr_compliance.display_no_compliance_only = False  
pr_compliance.enable_security_compliance = True  
pr_compliance.enable_update_pr_compliance_checkbox = True  
pr_compliance.enable_todo_scan = False  
pr_compliance.enable_ticket_labels = False  
pr_compliance.enable_no_ticket_labels = False  
pr_compliance.check_pr_additional_content = False  
pr_compliance.enable_compliance_labels_security = True  
pr_compliance.enable_user_defined_compliance_labels = True  
pr_compliance.enable_estimate_effort_to_review = True  
pr_compliance.max_rag_components_to_analyze = 5  
pr_compliance.min_component_size = 5  
pr_compliance.persistent_comment = True  
pr_compliance.enable_help_text = False  
pr_compliance.extra_instructions = ''  

==================== PR_DESCRIPTION ====================
pr_description.publish_labels = False  
pr_description.add_original_user_description = True  
pr_description.generate_ai_title = False  
pr_description.extra_instructions = ''  
pr_description.enable_pr_type = True  
pr_description.final_update_message = True  
pr_description.enable_help_text = False  
pr_description.enable_help_comment = False  
pr_description.bring_latest_tag = False  
pr_description.enable_pr_diagram = True  
pr_description.publish_description_as_comment = False  
pr_description.publish_description_as_comment_persistent = True  
pr_description.enable_semantic_files_types = True  
pr_description.collapsible_file_list = 'adaptive'  
pr_description.collapsible_file_list_threshold = 8  
pr_description.inline_file_summary = False  
pr_description.use_description_markers = False  
pr_description.include_generated_by_header = True  
pr_description.enable_large_pr_handling = True  
pr_description.max_ai_calls = 4  
pr_description.auto_create_ticket = False  

==================== PR_QUESTIONS ====================
pr_questions.enable_help_text = False  

==================== PR_CODE_SUGGESTIONS ====================
pr_code_suggestions.suggestions_depth = 'exhaustive'  
pr_code_suggestions.commitable_code_suggestions = False  
pr_code_suggestions.decouple_hunks = False  
pr_code_suggestions.dual_publishing_score_threshold = -1  
pr_code_suggestions.focus_only_on_problems = True  
pr_code_suggestions.allow_thumbs_up_down = False  
pr_code_suggestions.enable_suggestion_type_reuse = False  
pr_code_suggestions.enable_more_suggestions_checkbox = True  
pr_code_suggestions.high_level_suggestions_enabled = True  
pr_code_suggestions.extra_instructions = "- don't give suggestions about link being broken\n"  
pr_code_suggestions.enable_help_text = False  
pr_code_suggestions.show_extra_context = False  
pr_code_suggestions.persistent_comment = True  
pr_code_suggestions.max_history_len = 5  
pr_code_suggestions.apply_suggestions_checkbox = True  
pr_code_suggestions.enable_chat_in_code_suggestions = True  
pr_code_suggestions.apply_limit_scope = True  
pr_code_suggestions.suggestions_score_threshold = 0  
pr_code_suggestions.new_score_mechanism = True  
pr_code_suggestions.new_score_mechanism_th_high = 9  
pr_code_suggestions.new_score_mechanism_th_medium = 7  
pr_code_suggestions.discard_unappliable_suggestions = False  
pr_code_suggestions.num_code_suggestions_per_chunk = 3  
pr_code_suggestions.num_best_practice_suggestions = 2  
pr_code_suggestions.max_number_of_calls = 3  
pr_code_suggestions.final_clip_factor = 0.8  
pr_code_suggestions.demand_code_suggestions_self_review = True  
pr_code_suggestions.code_suggestions_self_review_text = '**Author self-review**: I have reviewed the PR code suggestions, and addressed the relevant ones.'  
pr_code_suggestions.approve_pr_on_self_review = False  
pr_code_suggestions.fold_suggestions_on_self_review = True  
pr_code_suggestions.publish_post_process_suggestion_impact = True  
pr_code_suggestions.wiki_page_accepted_suggestions = True  
pr_code_suggestions.enable_local_self_reflect_in_large_prs = False  
pr_code_suggestions.simplify_response = True  

==================== PR_CUSTOM_PROMPT ====================
pr_custom_prompt.prompt = 'The code suggestions should focus only on the following:\n- ...\n- ...\n...\n'  
pr_custom_prompt.suggestions_score_threshold = 0  
pr_custom_prompt.num_code_suggestions_per_chunk = 4  
pr_custom_prompt.self_reflect_on_custom_suggestions = True  
pr_custom_prompt.enable_help_text = False  

==================== PR_ADD_DOCS ====================
pr_add_docs.extra_instructions = ''  
pr_add_docs.docs_style = 'Sphinx'  
pr_add_docs.file = ''  
pr_add_docs.class_name = ''  

==================== PR_UPDATE_CHANGELOG ====================
pr_update_changelog.push_changelog_changes = False  
pr_update_changelog.extra_instructions = ''  
pr_update_changelog.add_pr_link = True  
pr_update_changelog.skip_ci_on_push = True  

==================== PR_ANALYZE ====================
pr_analyze.enable_help_text = False  

==================== PR_TEST ====================
pr_test.enable = True  
pr_test.extra_instructions = ''  
pr_test.testing_framework = ''  
pr_test.num_tests = 3  
pr_test.avoid_mocks = True  
pr_test.file = ''  
pr_test.class_name = ''  
pr_test.enable_help_text = False  

==================== PR_IMPROVE_COMPONENT ====================
pr_improve_component.num_code_suggestions = 4  
pr_improve_component.extra_instructions = ''  
pr_improve_component.file = ''  
pr_improve_component.class_name = ''  

==================== PR_IMPLEMENT ====================
pr_implement.allow_agent_implementation = False  

==================== PR_HELP ====================
pr_help.force_local_db = False  
pr_help.num_retrieved_snippets = 5  

==================== PR_NEW_ISSUE ====================
pr_new_issue.label_to_prompt_part = {'general': 'general question', 'feature': 'feature request (may already be addressed in the documentation)', 'bug': 'possible bug report (may be a by design behavior)'}  
pr_new_issue.supported_repos = ['qodo-ai/pr-agent']  

==================== PR_HELP_DOCS ====================
pr_help_docs.repo_url = ''  
pr_help_docs.repo_default_branch = 'main'  
pr_help_docs.docs_path = 'docs'  
pr_help_docs.exclude_root_readme = False  
pr_help_docs.supported_doc_exts = ['.md', '.mdx', '.rst']  
pr_help_docs.enable_help_text = False  

==================== PR_SIMILAR_ISSUE ====================
pr_similar_issue.skip_comments = False  
pr_similar_issue.force_update_dataset = False  
pr_similar_issue.max_issues_to_scan = 500  
pr_similar_issue.vectordb = 'pinecone'  

==================== PR_FIND_SIMILAR_COMPONENT ====================
pr_find_similar_component.class_name = ''  
pr_find_similar_component.file = ''  
pr_find_similar_component.search_from_org = False  
pr_find_similar_component.allow_fallback_less_words = True  
pr_find_similar_component.number_of_keywords = 5  
pr_find_similar_component.number_of_results = 5  

==================== BEST_PRACTICES ====================
best_practices.auto_best_practices_str = '<b>Pattern 1: When catching exceptions in try-except blocks, always capture the exception object using \'as e\' syntax (e.g., \'except TypeError as e:\') to enable proper error logging and debugging. This prevents NameError when trying to reference the exception in the except block.\n</b>\n\nExample code before:\n```\ntry:\n    risky_operation()\nexcept ValueError:\n    logger.error(f"Error occurred: {e}")\n```\n\nExample code after:\n```\ntry:\n    risky_operation()\nexcept ValueError as e:\n    logger.error(f"Error occurred: {e}")\n```\n\n\n\n\n___\n\n\n<b>Pattern 2: When accessing nested dictionary or object attributes, use safe access patterns like .get() with defaults or getattr() to prevent AttributeError or KeyError when intermediate values are None or missing. Chain multiple safe accesses when traversing deep structures.\n</b>\n\nExample code before:\n```\nuser_name = data[\'user\'][\'profile\'][\'name\']\napi_key = settings.api.key\n```\n\nExample code after:\n```\nuser_name = data.get(\'user\', {}).get(\'profile\', {}).get(\'name\', \'\')\napi_key = getattr(getattr(settings, \'api\', None), \'key\', None)\n```\n\n\n\n\n___\n\n\n<b>Pattern 3: Avoid repeatedly calling configuration or settings retrieval functions inside loops. Fetch configuration values once before the loop and reuse the stored value to improve performance and reduce unnecessary function calls.\n</b>\n\nExample code before:\n```\nfor item in items:\n    if get_settings().feature.enabled:\n        process(item)\n```\n\nExample code after:\n```\nfeature_enabled = get_settings().feature.enabled\nfor item in items:\n    if feature_enabled:\n        process(item)\n```\n\n\n\n\n___\n\n\n<b>Pattern 4: When handling file I/O operations or decoding operations (like UTF-8 decoding), wrap them in try-except blocks to gracefully handle encoding errors, missing files, or corrupted data. Use error handling strategies like \'errors="replace"\' for decoding when appropriate.\n</b>\n\nExample code before:\n```\ncontent = file_bytes.decode(\'utf-8\')\n```\n\nExample code after:\n```\ntry:\n    content = file_bytes.decode(\'utf-8\')\nexcept UnicodeDecodeError:\n    content = file_bytes.decode(\'utf-8\', errors=\'replace\')\n```\n\n\n\n\n___\n\n\n<b>Pattern 5: When validating configuration values that should be from a restricted set of options, explicitly check the value against allowed options and raise a clear error for invalid values. Don\'t silently default to fallback values without validation, as this can mask configuration errors.\n</b>\n\nExample code before:\n```\nauth_type = config.get(\'auth_type\', \'default\')\nif auth_type:\n    use_auth(auth_type)\n```\n\nExample code after:\n```\nauth_type = config.get(\'auth_type\', \'default\')\nif auth_type not in [\'oauth\', \'token\', \'basic\']:\n    raise ValueError(f"Invalid auth_type: \'{auth_type}\'. Must be one of: oauth, token, basic")\nuse_auth(auth_type)\n```\n\n\n\n\n___\n'  
best_practices.wiki_best_practices_str = ''  
best_practices.global_wiki_best_practices = ''  
best_practices.local_repo_best_practices_str = ''  
best_practices.global_repo_best_practices_str = ''  
best_practices.global_best_practices_str = ''  
best_practices.organization_name = ''  
best_practices.max_lines_allowed = 2000  
best_practices.enable_global_best_practices = True  
best_practices.allow_repo_best_practices = True  
best_practices.enabled = True  

==================== AUTO_BEST_PRACTICES ====================
auto_best_practices.enable_auto_best_practices = True  
auto_best_practices.utilize_auto_best_practices = True  
auto_best_practices.extra_instructions = ''  
auto_best_practices.min_suggestions_to_auto_best_practices = 10  
auto_best_practices.number_of_days_to_update = 30  
auto_best_practices.max_patterns = 5  
auto_best_practices.minimal_date_to_update = '2025-01-26'  
auto_best_practices.generate_new_best_practices = False  

==================== JIRA ====================
jira.jira_client_id = 'REDACTED'  
jira.jira_app_secret = 'REDACTED'  

==================== LINEAR ====================
linear.linear_client_id = 'REDACTED'  

==================== PR_TO_TICKET ====================
pr_to_ticket.default_base_url = ''  
pr_to_ticket.default_project_key = 'REDACTED'  
pr_to_ticket.fallback_to_git_provider_issues = True  
pr_to_ticket.direct_update_compliance = False  

==================== github_app ====================
github_app.bot_user = 'github-actions[bot]'  
github_app.override_deployment_type = True  
github_app.handle_pr_actions = ['opened', 'reopened', 'ready_for_review']  
github_app.pr_commands = ['/describe --pr_description.final_update_message=false', '/compliance', '/improve']  
github_app.feedback_on_draft_pr = False  
github_app.handle_push_trigger = True  
github_app.push_commands = ['/describe', '/compliance']  
github_app.ignore_pr_title = []  
github_app.ignore_bot_pr = True  

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants