TheR1D / shell_gpt

A command-line productivity tool powered by AI large language models like GPT-4, will help you accomplish your tasks faster and more efficiently.
MIT License
9.76k stars 769 forks source link

Adopt to tool_calls format of oai doc fixing function call bugs and Support for parallel function call #613

Open whi497 opened 3 months ago

whi497 commented 3 months ago

I'm using deepseek api(which is oai compatible), which i found the code fail to return the function call result: e.g. image

UnprocessableEntityError: Failed to deserialize the JSON body into the target type: messages[3].role: unknown variant function, expected one of system, user, assistant, tool at line 1 column 666

which i think is relate to this part of code: https://github.com/TheR1D/shell_gpt/blob/ab6b475c9da1d4b28c16e5fd963fc434fdfd3356/sgpt/handlers/handler.py#L64C1-L82C79

I make some changes to adopt to oai function doc:

`# Create a message containing the result of the function call
function_call_result_message = {
    "role": "tool",
    "content": json.dumps({
        "order_id": order_id,
        "delivery_date": delivery_date.strftime('%Y-%m-%d %H:%M:%S')
    }),
    "tool_call_id": response['choices'][0]['message']['tool_calls'][0]['id']
}`

which indecate that the role should be tool and tool_call_id is needed

after the modification the code work fine and i have run the lint and test

whi497 commented 2 months ago

@zjuwyz I change the code to handle the parallel functions in handel_function_call, maybe you could have a look

zjuwyz commented 2 months ago

Great. This also fixes a bug that tokens are not streaming to shell after function call results.

whi497 commented 2 months ago

@TheR1D kindly ping for a review on this pr.