16
16
*/
17
17
18
18
import { AIError } from '../errors' ;
19
+ import { logger } from '../logger' ;
19
20
import {
20
21
CountTokensRequest ,
21
22
GenerateContentRequest ,
@@ -65,6 +66,9 @@ export class ChromeAdapter {
65
66
*/
66
67
async isAvailable ( request : GenerateContentRequest ) : Promise < boolean > {
67
68
if ( this . mode === 'only_in_cloud' ) {
69
+ logger . debug (
70
+ `On-device inference unavailable because mode is "only_in_cloud".`
71
+ ) ;
68
72
return false ;
69
73
}
70
74
@@ -76,10 +80,20 @@ export class ChromeAdapter {
76
80
}
77
81
78
82
// Applies prefer_on_device logic.
79
- return (
80
- availability === Availability . available &&
81
- ChromeAdapter . isOnDeviceRequest ( request )
82
- ) ;
83
+ if ( availability !== Availability . available ) {
84
+ logger . debug (
85
+ `On-device inference unavailable because availability is "${ availability } ".`
86
+ ) ;
87
+ return false ;
88
+ }
89
+ if ( ! ChromeAdapter . isOnDeviceRequest ( request ) ) {
90
+ logger . debug (
91
+ `On-device inference unavailable because request is incompatible.`
92
+ ) ;
93
+ return false ;
94
+ }
95
+
96
+ return true ;
83
97
}
84
98
85
99
/**
@@ -141,13 +155,17 @@ export class ChromeAdapter {
141
155
private static isOnDeviceRequest ( request : GenerateContentRequest ) : boolean {
142
156
// Returns false if the prompt is empty.
143
157
if ( request . contents . length === 0 ) {
158
+ logger . debug ( 'Empty prompt rejected for on-device inference.' ) ;
144
159
return false ;
145
160
}
146
161
147
162
for ( const content of request . contents ) {
148
163
// Returns false if the request contains multiple roles, eg a chat history.
149
164
// TODO: remove this guard once LanguageModelMessage is supported.
150
165
if ( content . role !== 'user' ) {
166
+ logger . debug (
167
+ `Non-user role "${ content . role } " rejected for on-device inference.`
168
+ ) ;
151
169
return false ;
152
170
}
153
171
@@ -159,6 +177,9 @@ export class ChromeAdapter {
159
177
part . inlineData . mimeType
160
178
) === - 1
161
179
) {
180
+ logger . debug (
181
+ `Unsupported mime type "${ part . inlineData . mimeType } " rejected for on-device inference.`
182
+ ) ;
162
183
return false ;
163
184
}
164
185
}
0 commit comments