Skip to content

Commit

Permalink
Fix multiturn conversation error Groq
Browse files Browse the repository at this point in the history
* Groq assistant turns can only have `content: <str>`, no arrays or multimodal
* Groq cannot handle response_format argument the way that its passed, I'm working on a separate commit for that.
  • Loading branch information
Reece Holmdahl committed Oct 15, 2024
1 parent 0161dee commit 3562d14
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 3562d14

Please sign in to comment.