Skip to content

Commit 98741d8

Browse files
committed
Config Instructor for Predict module via constructor
1 parent 358dc13 commit 98741d8

File tree

12 files changed

+123
-59
lines changed

12 files changed

+123
-59
lines changed

examples/02_Advanced/LanguagePrograms2/run.php

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,13 +25,15 @@
2525
```php
2626
<?php
2727

28+
use Cognesy\Instructor\Contracts\CanProvideSchema;
2829
use Cognesy\Instructor\Extras\Module\Addons\Predict\Predict;
30+
use Cognesy\Instructor\Extras\Module\CallData\Contracts\HasInputOutputData;
31+
use Cognesy\Instructor\Extras\Module\CallData\Traits\AutoSignature;
2932
use Cognesy\Instructor\Extras\Module\Core\Module;
3033
use Cognesy\Instructor\Extras\Module\Signature\Attributes\InputField;
3134
use Cognesy\Instructor\Extras\Module\Signature\Attributes\OutputField;
3235
use Cognesy\Instructor\Extras\Module\CallData\SignatureData;
3336
use Cognesy\Instructor\Instructor;
34-
use Cognesy\Instructor\Schema\Attributes\Description;
3537

3638
$loader = require 'vendor/autoload.php';
3739
$loader->add('Cognesy\\Instructor\\', __DIR__ . '../../src/');
@@ -63,7 +65,10 @@ class FixedEmail extends SignatureData {
6365
public string $fixedBody;
6466
}
6567

66-
class EmailTranslation extends SignatureData {
68+
// Alternative way to define the module signature data without extending a class
69+
class EmailTranslation implements HasInputOutputData, CanProvideSchema {
70+
use AutoSignature;
71+
6772
#[InputField('subject of email')]
6873
public string $subject;
6974
#[InputField('body of email')]

src/Extras/Module/Addons/Predict/Predict.php

Lines changed: 26 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44

55
use BackedEnum;
66
use Cognesy\Instructor\Data\Example;
7+
use Cognesy\Instructor\Enums\Mode;
78
use Cognesy\Instructor\Extras\Module\Core\DynamicModule;
89
use Cognesy\Instructor\Extras\Module\Signature\Contracts\HasSignature;
910
use Cognesy\Instructor\Extras\Module\Signature\Signature;
@@ -16,18 +17,30 @@
1617

1718
class Predict extends DynamicModule
1819
{
19-
private Instructor $instructor;
20+
protected Instructor $instructor;
21+
2022
protected string $prompt;
21-
protected string $defaultPrompt = 'Your job is to infer output argument values in input data based on specification: {signature} {description}';
23+
protected $options = [];
24+
protected $model = 'gpt-4o';
25+
protected $mode = Mode::Tools;
26+
protected array $examples = [];
2227
protected int $maxRetries = 3;
2328

29+
protected string $defaultPrompt = 'Your job is to infer output argument values in input data based on specification: {signature} {description}';
30+
2431
protected string|Signature|HasSignature $defaultSignature;
2532

2633
protected ?object $signatureCarrier;
2734

2835
public function __construct(
2936
string|Signature|HasSignature $signature,
3037
Instructor $instructor,
38+
string $model = 'gpt-4o',
39+
int $maxRetries = 3,
40+
array $options = [],
41+
array $examples = [],
42+
string $prompt = '',
43+
Mode $mode = Mode::Tools,
3144
) {
3245
if ($signature instanceof HasSignature) {
3346
$this->signatureCarrier = $signature;
@@ -37,6 +50,12 @@ public function __construct(
3750
default => $signature,
3851
};
3952
$this->instructor = $instructor;
53+
$this->model = $model;
54+
$this->maxRetries = $maxRetries;
55+
$this->options = $options;
56+
$this->examples = $examples;
57+
$this->prompt = $prompt;
58+
$this->mode = $mode;
4059
}
4160

4261
public function signature(): string|Signature {
@@ -75,8 +94,12 @@ public function forward(array $args, object $targetObject): mixed {
7594
$response = $this->instructor->respond(
7695
messages: $this->toMessages($input),
7796
responseModel: $targetObject,
78-
model: 'gpt-4o', // TODO: needs to be configurable
97+
model: $this->model,
7998
maxRetries: $this->maxRetries,
99+
options: $this->options,
100+
examples: $this->examples,
101+
prompt: $this->prompt(),
102+
mode: $this->mode,
80103
);
81104

82105
return $response;
@@ -89,10 +112,6 @@ public function prompt() : string {
89112
return $this->prompt;
90113
}
91114

92-
public function setPrompt(string $prompt) : void {
93-
$this->prompt = $prompt;
94-
}
95-
96115
// INTERNAL ////////////////////////////////////////////////////////////////////////////////////
97116

98117
private function toMessages(string|array|object $input) : array {

src/Extras/Module/CallData/CallData.php

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,28 +1,22 @@
11
<?php
22
namespace Cognesy\Instructor\Extras\Module\CallData;
33

4-
use Cognesy\Instructor\Extras\Module\DataAccess\Contracts\DataAccess;
54
use Cognesy\Instructor\Extras\Module\DataAccess\ObjectDataAccess;
65
use Cognesy\Instructor\Extras\Module\Signature\Signature;
76
use Cognesy\Instructor\Extras\Module\CallData\Contracts\HasInputOutputData;
87

98
class CallData implements HasInputOutputData
109
{
11-
use Traits\CallData\HandlesSignature;
10+
use Traits\CallData\ProvidesSignature;
11+
use Traits\CallData\ProvidesSchema;
1212
use Traits\CallData\HandlesInputOutputData;
1313

14-
protected DataAccess $input;
15-
protected DataAccess $output;
16-
protected Signature $signature;
17-
protected string $description = '';
18-
1914
public function __construct(
2015
object $input,
2116
object $output,
2217
Signature $signature,
2318
) {
2419
$this->signature = $signature;
25-
$this->description = $signature->getDescription();
2620
$this->input = new ObjectDataAccess($input, $signature->toInputSchema()->getPropertyNames());
2721
$this->output = new ObjectDataAccess($output, $signature->toOutputSchema()->getPropertyNames());
2822
}

src/Extras/Module/CallData/SignatureData.php

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,6 @@
22
namespace Cognesy\Instructor\Extras\Module\CallData;
33

44
use Cognesy\Instructor\Contracts\CanProvideSchema;
5-
use Cognesy\Instructor\Extras\Module\DataAccess\Contracts\DataAccess;
6-
use Cognesy\Instructor\Extras\Module\Signature\Signature;
75
use Cognesy\Instructor\Extras\Module\CallData\Contracts\HasInputOutputData;
86

97
/**
@@ -18,10 +16,6 @@
1816
class SignatureData implements HasInputOutputData, CanProvideSchema
1917
{
2018
use Traits\CallDataClass\HandlesInputOutputData;
21-
use Traits\CallDataClass\HandlesSchema;
22-
use Traits\CallDataClass\HandlesSignature;
23-
24-
private Signature $signature;
25-
private DataAccess $input;
26-
private DataAccess $output;
19+
use Traits\CallDataClass\ProvidesSchema;
20+
use Traits\CallDataClass\ProvidesSignature;
2721
}
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
<?php
2+
3+
namespace Cognesy\Instructor\Extras\Module\CallData\Traits;
4+
5+
trait AutoSignature
6+
{
7+
use CallDataClass\HandlesInputOutputData;
8+
use CallDataClass\ProvidesSchema;
9+
use CallDataClass\ProvidesSignature;
10+
}

src/Extras/Module/CallData/Traits/CallData/HandlesInputOutputData.php

Lines changed: 5 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,11 @@
77

88
trait HandlesInputOutputData
99
{
10+
use ProvidesSchema;
11+
12+
protected DataAccess $input;
13+
protected DataAccess $output;
14+
1015
public function withArgs(mixed ...$args): static {
1116
$this->input->setValues(
1217
InputOutputMapper::fromInputs($args, $this->inputNames())
@@ -28,14 +33,4 @@ public function toArray(): array {
2833
$this->output->getValues(),
2934
);
3035
}
31-
32-
// CONVENIENCE METHODS ////////////////////////////////////////////////////////////////
33-
34-
public function inputNames(): array {
35-
return $this->signature->toInputSchema()->getPropertyNames();
36-
}
37-
38-
public function outputNames(): array {
39-
return $this->signature->toOutputSchema()->getPropertyNames();
40-
}
4136
}
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
<?php
2+
3+
namespace Cognesy\Instructor\Extras\Module\CallData\Traits\CallData;
4+
5+
use Cognesy\Instructor\Schema\Data\Schema\Schema;
6+
7+
trait ProvidesSchema
8+
{
9+
use ProvidesSignature;
10+
11+
public function toSchema(): Schema {
12+
return $this->toOutputSchema();
13+
}
14+
15+
public function toInputSchema(): Schema {
16+
return $this->signature()->toInputSchema();
17+
}
18+
19+
public function toOutputSchema(): Schema {
20+
return $this->signature()->toOutputSchema();
21+
}
22+
23+
public function inputNames(): array {
24+
return $this->toInputSchema()->getPropertyNames();
25+
}
26+
27+
public function outputNames(): array {
28+
return $this->toOutputSchema()->getPropertyNames();
29+
}
30+
}

src/Extras/Module/CallData/Traits/CallData/HandlesSignature.php renamed to src/Extras/Module/CallData/Traits/CallData/ProvidesSignature.php

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,10 @@
44

55
use Cognesy\Instructor\Extras\Module\Signature\Signature;
66

7-
trait HandlesSignature
7+
trait ProvidesSignature
88
{
9+
protected Signature $signature;
10+
911
public function signature(): Signature {
1012
return $this->signature;
1113
}

src/Extras/Module/CallData/Traits/CallDataClass/HandlesInputOutputData.php

Lines changed: 5 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,11 @@
88

99
trait HandlesInputOutputData
1010
{
11+
use ProvidesSchema;
12+
13+
private DataAccess $input;
14+
private DataAccess $output;
15+
1116
static public function fromArgs(...$args): static {
1217
$instance = new static();
1318
$instance->withArgs(...$args);
@@ -41,14 +46,4 @@ public function toArray(): array {
4146
$this->output()->getValues(),
4247
);
4348
}
44-
45-
// CONVENIENCE METHODS ////////////////////////////////////////////////////////////////
46-
47-
public function inputNames(): array {
48-
return $this->signature()->toInputSchema()->getPropertyNames();
49-
}
50-
51-
public function outputNames(): array {
52-
return $this->signature()->toOutputSchema()->getPropertyNames();
53-
}
5449
}

src/Extras/Module/CallData/Traits/CallDataClass/HandlesSchema.php

Lines changed: 0 additions & 12 deletions
This file was deleted.

0 commit comments

Comments
 (0)