Skip to content

Commit

Permalink
Merge pull request #312 from reecelikesramen/fix/289-groq-provider-ap…
Browse files Browse the repository at this point in the history
…i-error
  • Loading branch information
MadcowD authored Oct 29, 2024
2 parents 05da58c + 3562d14 commit a80e0b1
Showing 1 changed file with 21 additions and 0 deletions.
21 changes: 21 additions & 0 deletions src/ell/providers/groq.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,8 @@ class GroqProvider(OpenAIProvider):
def translate_to_provider(self, *args, **kwargs):
params = super().translate_to_provider(*args, **kwargs)
params.pop('stream_options', None)
assert 'response_format' not in params, 'Groq does not support response_format.'
params['messages'] = messages_to_groq_message_format(params['messages'])
return params

def translate_from_provider(self, *args, **kwargs):
Expand All @@ -24,3 +26,22 @@ def translate_from_provider(self, *args, **kwargs):
except ImportError:
pass

def messages_to_groq_message_format(messages):
"""Assistant messages to Groq must take the format: {'role': 'assistant', 'content': <string>}"""
# XXX: Issue #289: groq.BadRequestError: Error code: 400 - {'error': {'message': "'messages.1' : for 'role:assistant' the following must be satisfied[('messages.1.content' : value must be a string)]", 'type': 'invalid_request_error'}}
new_messages = []
for message in messages:
if message['role'] == 'assistant':
# Assistant messages must be strings
# If content is a list, only one string element is allowed
if isinstance(message['content'], str):
new_messages.append({'role': 'assistant', 'content': message['content']})
elif isinstance(message['content'], list) and len(message['content']) == 1 and message['content'][0]['type'] == 'text':
new_messages.append({'role': 'assistant', 'content': message['content'][0]['text']})
else:
raise ValueError('Groq assistant messages must contain exactly one string content.')
else:
new_messages.append(message)

return new_messages

0 comments on commit a80e0b1

Please sign in to comment.