Biblioteca de queries
Biblioteca de queriesTraducir todas las propiedades de un post usando ChatGPT

Traducir todas las propiedades de un post usando ChatGPT

Esta consulta obtiene las propiedades de un único post, y traduce esas cadenas a cualquier idioma usando ChatGPT.

Para conectarte a la API de OpenAI, debes proporcionar la variable $openAIAPIKey con la clave API.

Puedes sobrescribir la variable $model ("gpt-4o-mini" por defecto) con el modelo de OpenAI que desees usar.

query GetPostProperties($postId: ID!) {
  post(by: { id: $postId }) {
    title
    content
    excerpt
      @export(
        as: "postProperties",
        affectAdditionalFieldsUnderPos: [1, 2]
      )
  }
}
 
query TranslatePostPropertiesWithChatGPT(
  $fromLang: String!
  $toLang: String!
  $openAIAPIKey: String!
  $systemMessage: String! = "You are a language translator"
  $promptTemplate: String! = """
I'm working on internationalizing my application.
 
I've created a JSON with sentences in {$fromLang}. Please translate the sentences to {$toLang}.
 
Keep the object properties identical, translate the values only.
 
If a sentence contains HTML, do not translate inside the HTML tags.
 
This is the JSON:
 
{$encodedPostProperties}
"""
  $model: String! = "gpt-4o-mini"
)
  @depends(on: "GetPostProperties")
{
  postProperties: _echo(value: $postProperties)
  encodedPostProperties: _objectEncodeAsJSONString(object: $postProperties)
  prompt: _strReplaceMultiple(
    search: ["{$fromLang}", "{$toLang}", "{$encodedPostProperties}"],
    replaceWith: [$fromLang, $toLang, $__encodedPostProperties],
    in: $promptTemplate
  )
  openAIResponse: _sendJSONObjectItemHTTPRequest(input: {
    url: "https://api.openai.com/v1/chat/completions",
    method: POST,
    options: {
      auth: {
        password: $openAIAPIKey
      },
      json: {
        model: $model,
        messages: [
          {
            role: "system",
            content: $systemMessage
          },
          {
            role: "user",
            content: $__prompt
          },
        ],
        response_format: {
          type: "json_schema",
          json_schema: {
            name: "translation_response",
            strict: true,
            schema: {
              type: "object",
              properties: {
                translations: {
                  type: "array",
                  items: {
                    type: "object",
                    properties: {
                      property: {
                        type: "string"
                      },
                      translation: {
                        type: "string"
                      }
                    },
                    required: ["property", "translation"],
                    additionalProperties: false
                  }
                }
              },
              required: ["translations"],
              additionalProperties: false
            }
          }
        }
      }
    }
  })
    @underJSONObjectProperty(by: { key: "choices" })
      @underArrayItem(index: 0)
        @underJSONObjectProperty(by: { path: "message.content" })
          @export(as: "jsonEncodedTranslatedPostProperties")
}
 
query ExtractTranslatedPostProperties
  @depends(on: "TranslatePostPropertiesWithChatGPT")
{
  jsonEncodedTranslatedPostProperties: _echo(value: $jsonEncodedTranslatedPostProperties)
    @remove
  decodedTranslatedPostProperties: _strDecodeJSONObject(string: $jsonEncodedTranslatedPostProperties)
    @remove
  translatedPostProperties: _objectProperty(
    object: $__decodedTranslatedPostProperties,
    by: { key: "translations" }
  )
  translatedPostPropertiesAsJSON: _arrayOfJSONObjectsExtractPropertiesAndConvertToObject(
    array: $__translatedPostProperties,
    key: "property",
    value: "translation"
  )
}