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
/**
@@ -135,13 +149,17 @@ export class ChromeAdapter {
135
149
private static isOnDeviceRequest ( request : GenerateContentRequest ) : boolean {
136
150
// Returns false if the prompt is empty.
137
151
if ( request . contents . length === 0 ) {
152
+ logger . debug ( 'Empty prompt rejected for on-device inference.' ) ;
138
153
return false ;
139
154
}
140
155
141
156
for ( const content of request . contents ) {
142
157
// Returns false if the request contains multiple roles, eg a chat history.
143
158
// TODO: remove this guard once LanguageModelMessage is supported.
144
159
if ( content . role !== 'user' ) {
160
+ logger . debug (
161
+ `Non-user role "${ content . role } " rejected for on-device inference.`
162
+ ) ;
145
163
return false ;
146
164
}
147
165
@@ -153,6 +171,9 @@ export class ChromeAdapter {
153
171
part . inlineData . mimeType
154
172
) === - 1
155
173
) {
174
+ logger . debug (
175
+ `Unsupported mime type "${ part . inlineData . mimeType } " rejected for on-device inference.`
176
+ ) ;
156
177
return false ;
157
178
}
158
179
}
0 commit comments