freeedcom / ai-codereviewer

AI Code Reviewer: Enhance your GitHub workflow with AI-powered code review! Get intelligent feedback and suggestions on pull requests using OpenAI's GPT-4 API, improving code quality and saving developers time.
MIT License
580 stars 559 forks source link

Forced JSON mode on all models that support it. #57

Open lukehollenback opened 6 months ago

lukehollenback commented 6 months ago

This is a fix for Issue #56, ultimately caused by invalid JSON output being produced by the model, by forcing JSON mode on all supported models.

Was previously only forced on gpt-4-1106-preview, but OpenAI supports JSON mode on the latest GPT-3 and GPT-4 turbo models. See https://platform.openai.com/docs/guides/text-generation/json-mode.

Put gpt-4-turbo-preview, gpt-4-turbo, and gpt-3.5-turbo first in the conditional for efficiency. Put gpt-4-turbo - a model that does not exist yet - in the conditional to future-proof once GPT-4 Turbo goes out of preview.

simonvea commented 4 months ago

Could you add gpt-4o to the list as well? It supports JSON mode as per the documentation.

rairulyle commented 4 months ago

Would be better to have something like this so that it is much easier to maintain in the future:

const SUPPORTS_JSON_FORMAT = [
  "gpt-4o",
  "gpt-4-turbo-preview",
  "gpt-4-turbo",
  "gpt-3.5-turbo",
  "gpt-4-0125-preview",
  "gpt-4-1106-preview",
  "gpt-3.5-turbo-0125",
  "gpt-3.5-turbo-1106",
];

// .......ommited

const response = await openai.chat.completions.create({
      ...queryConfig,
      // return JSON if the model supports it:
      ...(SUPPORTS_JSON_FORMAT.includes(OPENAI_API_MODEL)
        ? { response_format: { type: "json_object" } }
        : {}),
      messages: [
        {
          role: "system",
          content: prompt,
        },
      ],
    });