maritaca-ai / maritalk-api

Code and documentation for the MariTalk API
https://docs.maritaca.ai
MIT License
244 stars 12 forks source link

Incompatibilidades OpenAI identificadas #97

Closed rrg92 closed 2 weeks ago

rrg92 commented 1 month ago

Olá pessoal. Conforme sugerido na issue #88, identifiquei algumas coisas que ainda não são 100% compatíveis com a OpenAI, enquanto estava fazendo alguns testes.

A ideia dessa issue é:

Obs: entendo que muitas dessas incompatibilidades poderiam ser corrigidas do lado client. Mas, a ideia de listar aqui é apenas para manter um local central fácil de encontrar, para que quem for usar decida se vai esperar uma correção da Maritaca (se acharem que deve ser feito) ou se vai seguir tentando contornar mesmo. Isso ajuda a poupar tempo na hora de debugar algum problema.

Para facilitar encontrar os comentários que documentam essas incompatibilidades, sugiro colocar uma hashtag #incopenai, e deixar um comentário para cada situação encontrada.

rrg92 commented 1 month ago

incopenai

Resumo: Encerramento da resposta com stream=True é diferente. String [DONE] não é incluída.

Exemplo OpenAI

O seguinte exemplo foi feito no postman, usando esses parâmetros:

{
    "messages": [
         {"role": "user", "content": "Oi, tudo bem?"}
    ]
    ,"model": "gpt-4o-mini"
    ,"max_tokens": 200
    ,"temperature": 0.5
    ,"stream": true
}

Resultado: image

Ao usar o stream, a API da OpenAI devolve um série de eventos (via SSE), o último evento é um string [DONE].

Exemplo Maritaca

{
    "messages": [
        {"role": "user", "content": "Oi, tudo bem?"}

    ]
    ,"model": "sabia-3"
    ,"max_tokens": 200
    ,"temperature": 0.5
    ,"stream": true
}

Na API da Maritaca, não há o retorno do [DONE]

image

Além disso, há algumas pequenas diferenças no JSON resultante:

Result open ai:

{
    "id": "chatcmpl-9vRooMjSHkd6VQSjIUlJJMBtseAgv",
    "object": "chat.completion.chunk",
    "created": 1723478658,
    "model": "gpt-4o-mini-2024-07-18",
    "system_fingerprint": "fp_48196bc67a",
    "choices": [
        {
            "index": 0,
            "delta": {
                "content": "?"
            },
            "logprobs": null,
            "finish_reason": null
        }
    ]
}

Result Maritaca:

{
    "id": "450a4ba9-b9aa-4f14-a67f-564ea3d9a8dd",
    "object": "chat.completion.chunk",
    "choices": [
        {
            "index": 0,
            "delta": {
                "role": "assistant",
                "content": " hoje?"
            },
            "logprobs": null,
            "finish_reason": "stop"
        }
    ],
    "created": 1723478700,
    "model": "sabia-3",
    "service_tier": null,
    "system_fingerprint": "40d846e3cba8f8b8",
    "usage": null
}

Creio que esta diferenças no JSON retornado não sejam tão críticas, quanto ao uso do [DONE], pois parece que a Maritaca retorna mais campos que a OpenAI, então, creio que isso não seria um problema considerável, visto que o resto permanece igual.

O maior potencial que vejo ai seria o [DONE], que pode ser usado em alguma implementação para encerrar a comunicação SSE.

rrg92 commented 1 month ago

incopenai

Resumo: stream_options.include_usage não suportado

Exemplo OpenAI

A API da OpenAI permite especificar o include_usage, que faz com que uma última mensagem contendo informaçoes de consumo seja gerada:

image

Exemplo Maritaca

image

A API não suporta a opção e eu também, nas respostas retornadas, não encontrei nenhum campo que viessa essa informação. Acredito que ela pode ser útil em diversas implementações que usem o stream

ZanezZephyrs commented 4 weeks ago

oi @rrg92. Obrigado por levantar essas questões. Ambos os pontos que você levantou ja devem estar corrigidos. Caso você encontre alguma outra incompatibilidade ou problema so avisar.

rodrigo-f-nogueira commented 2 weeks ago

Fechando essa issue, mas é só reabrir caso descubra alguma outra. Obrigado!