@@ -47,20 +47,31 @@ public function __construct(
47
47
*/
48
48
public function call (MessageBag $ messages , array $ options = []): ResponseInterface
49
49
{
50
- $ input = new Input ($ this ->llm , $ messages , $ options );
50
+ $ llm = $ this ->llm ;
51
+
52
+ if (array_key_exists ('llm ' , $ options )) {
53
+ if (!$ options ['llm ' ] instanceof LanguageModel) {
54
+ throw new InvalidArgumentException (sprintf ('Option "llm" must be an instance of %s. ' , LanguageModel::class));
55
+ }
56
+
57
+ $ llm = $ options ['llm ' ];
58
+ unset($ options ['llm ' ]);
59
+ }
60
+
61
+ $ input = new Input ($ llm , $ messages , $ options );
51
62
array_map (fn (InputProcessor $ processor ) => $ processor ->processInput ($ input ), $ this ->inputProcessor );
52
63
53
- if ($ messages ->containsImage () && !$ this -> llm ->supportsImageInput ()) {
54
- throw MissingModelSupport::forImageInput ($ this -> llm ::class);
64
+ if ($ messages ->containsImage () && !$ llm ->supportsImageInput ()) {
65
+ throw MissingModelSupport::forImageInput ($ llm ::class);
55
66
}
56
67
57
- $ response = $ this ->platform ->request ($ this -> llm , $ messages , $ options = $ input ->getOptions ());
68
+ $ response = $ this ->platform ->request ($ llm , $ messages , $ options = $ input ->getOptions ());
58
69
59
70
if ($ response instanceof AsyncResponse) {
60
71
$ response = $ response ->unwrap ();
61
72
}
62
73
63
- $ output = new Output ($ this -> llm , $ response , $ messages , $ options );
74
+ $ output = new Output ($ llm , $ response , $ messages , $ options );
64
75
array_map (fn (OutputProcessor $ processor ) => $ processor ->processOutput ($ output ), $ this ->outputProcessor );
65
76
66
77
return $ output ->response ;
0 commit comments