File size: 2,703 Bytes
c2ea5ed
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
"""
fix_litellm_stop_param.py

This script fixes issues with unsupported parameters when using LiteLLM:
1. Fixes the "Unsupported parameter: 'stop' is not supported with this model" error
   when using certain models like o1-preview or Perplexity models.
2. Handles models that require 'max_completion_tokens' instead of 'max_tokens'.
3. Fixes the "'Message' object has no attribute 'audio'" error in Message initialization.

Import this module before any other imports that use LiteLLM.
"""

import litellm
from litellm.types.utils import Message

# Store the original completion function
original_completion = litellm.completion

# Store the original Message.__init__ method
original_message_init = Message.__init__

# Patch the Message.__init__ method to handle missing 'audio' attribute
def patched_message_init(self, *args, **kwargs):
    """
    Patched version of Message.__init__ that safely handles the 'audio' attribute
    """
    try:
        # Try to call the original __init__ method
        original_message_init(self, *args, **kwargs)
    except AttributeError as e:
        if "'Message' object has no attribute 'audio'" in str(e):
            # If the error is about the audio attribute, initialize manually
            # Set default values for Message attributes
            self.content = kwargs.get('content', '')
            self.role = kwargs.get('role', 'user')
            self.name = kwargs.get('name', None)
            self.tool_calls = kwargs.get('tool_calls', None)
            self.tool_call_id = kwargs.get('tool_call_id', None)
            # Don't set audio attribute at all
        else:
            # Re-raise other AttributeErrors
            raise

# Apply the patch to Message.__init__
Message.__init__ = patched_message_init

def patched_completion(*args, **kwargs):
    """
    Patched version of litellm.completion that handles unsupported parameters:
    - Removes 'stop' parameter if it exists in the kwargs
    - Converts 'max_tokens' to 'max_completion_tokens' if necessary
    """
    if 'stop' in kwargs:
        # Silently remove the stop parameter 
        kwargs.pop('stop')
        
    # Handle max_tokens parameter for models that require max_completion_tokens instead
    if 'max_tokens' in kwargs:
        # Create a new parameter with the right name
        kwargs['max_completion_tokens'] = kwargs.pop('max_tokens')
        
    return original_completion(*args, **kwargs)

# Replace the original completion function with our patched version
# Note: This replacement happens automatically when this module is imported
litellm.completion = patched_completion

print("LiteLLM has been patched to fix 'stop' parameter and 'audio' attribute issues")