Asynchronous Call
Si no desea esperar la respuesta del OpenAPI al hacer una petición a su API, debe utilizar un código asíncrono.
Para efectuar llamadas asíncronas, debe proporcionar una 4D.Function(Formula) de retrollamda en el parámetro objeto OpenAIParameters para recibir el resultado.
La función de retrollamada recibirá el mismo tipo de objeto de resultado (una de las clases hijas de OpenAIResult) que devolvería la función en un código síncrono. Ver ejemplos más abajo.
Consideraciones sobre el proceso
El método asíncrono se basa en 4D.HTTPRequest, por lo que la respuesta se recibirá dentro del proceso actual.
⚠️ Si su proceso termina al final del método actual (p. ej. usando New process o el editor de métodos), la fórmula de callback podría no llamarse de forma asíncrona. En estos casos, considere la posibilidad de utilizar
CALL WORKERoCALL FORM.
Ejemplos de uso
lista de modelos
$client.models.list({formula: Formula(MyReceiveMethod($1))})
$1 será una instancia de OpenAIModelListResult, por lo que el método MyReceiveMethod podría ser:
#DECLARE($result: cs.AIKit.OpenAIModelListResult)
If($result.success)
Form.models:=$result.models
Else
Alert($result.errors.formula(Formula(JSON Stringify($1))).join("\n"))
End if
finalización del chat
var $messages:=[{role: "system"; content: "You are a helpful assistant."}]
$messages.push({role: "user"; content: "Could you explain me why 42 is a special number"})
$client.chat.completions.create($messages; { onResponse: Formula(MyChatCompletionsReceiveMethod($1))})
$1 será una instancia de OpenAIChatCompletionsResult, así que el método MyChatCompletionsReceiveMethod podría ser:
#DECLARE($result: cs.AIKit.OpenAIChatCompletionsResult)
ASSERT($result.success) // Usamos onResponse aquí, la retrollamada recibe sólo en caso de éxito
Form.assistantMessage:=$result.choices[0].text