Extracting Scalar Values

Sometimes we just want to get quick results without defining a class for the response model, especially if we’re trying to get a straight, simple answer in a form of string, integer, boolean or float. Instructor provides a simplified API for such cases.

<?php

use Cognesy\Instructor\Instructor;



$value = (new Instructor)->respond(

    messages: "His name is Jason, he is 28 years old.",

    responseModel: Scalar::integer('age'),

);



var_dump($value);

// int(28)

In this example, we’re extracting a single integer value from the text. You can also use Scalar::string(), Scalar::boolean() and Scalar::float() to extract other types of values.

Additionally, you can use Scalar adapter to extract enums via Scalar::enum().

Examples

String result

<?php

$value = (new Instructor)->respond(

    messages: "His name is Jason, he is 28 years old.",

    responseModel: Scalar::string(name: 'firstName'),

);

// expect($value)->toBeString();

// expect($value)->toBe("Jason");

Integer result

<?php

$value = (new Instructor)->respond(

    messages: "His name is Jason, he is 28 years old.",

    responseModel: Scalar::integer('age'),

);

// expect($value)->toBeInt();

// expect($value)->toBe(28);

Boolean result

<?php

$value = (new Instructor)->respond(

    messages: "His name is Jason, he is 28 years old.",

    responseModel: Scalar::boolean(name: 'isAdult'),

);

// expect($value)->toBeBool();

// expect($value)->toBe(true);

Float result

<?php

$value = (new Instructor)->respond(

    messages: "His name is Jason, he is 28 years old and his 100m sprint record is 11.6 seconds.",

    responseModel: Scalar::float(name: 'recordTime'),

);

// expect($value)->toBeFloat();

// expect($value)->toBe(11.6);

Enum result / select one of the options

<?php

$text = "His name is Jason, he is 28 years old and he lives in Germany.";

$value = (new Instructor)->respond(

    messages: [

        ['role' => 'system', 'content' => $text],

        ['role' => 'user', 'content' => 'What is Jason\'s citizenship?'],

    ],

    responseModel: Scalar::enum(CitizenshipGroup::class, name: 'citizenshipGroup'),

);

// expect($value)->toBeString();

// expect($value)->toBe('other');