Skip to content

Commit 0abddf5

Browse files
authored
Merge branch 'main' into patch-2
2 parents 4ca1bdd + dc5f699 commit 0abddf5

File tree

8 files changed

+126
-71
lines changed

8 files changed

+126
-71
lines changed

Diff for: src/backend/src/modules/puterai/AITestModeService.js

+12
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
const BaseService = require("../../services/BaseService");
2+
3+
class AITestModeService extends BaseService {
4+
async _init () {
5+
const svc_driver = this.services.get('driver');
6+
svc_driver.register_test_service('puter-chat-completion', 'openai-completion');
7+
}
8+
}
9+
10+
module.exports = {
11+
AITestModeService,
12+
};

Diff for: src/backend/src/modules/puterai/AWSPollyService.js

+5
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,11 @@ class AWSPollyService extends BaseService {
1212
}
1313

1414
static IMPLEMENTS = {
15+
['driver-capabilities']: {
16+
supports_test_mode (iface, method_name) {
17+
return iface === 'puter-tts' && method_name === 'synthesize';
18+
}
19+
},
1520
['puter-tts']: {
1621
async list_voices () {
1722
const polly_voices = await this.describe_voices();

Diff for: src/backend/src/modules/puterai/AWSTextractService.js

+5
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,11 @@ class AWSTextractService extends BaseService {
99
}
1010

1111
static IMPLEMENTS = {
12+
['driver-capabilities']: {
13+
supports_test_mode (iface, method_name) {
14+
return iface === 'puter-ocr' && method_name === 'recognize';
15+
}
16+
},
1217
['puter-ocr']: {
1318
async recognize ({ source, test_mode }) {
1419
if ( test_mode ) {

Diff for: src/backend/src/modules/puterai/OpenAICompletionService.js

+6
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,12 @@ class OpenAICompletionService extends BaseService {
2222
}
2323

2424
static IMPLEMENTS = {
25+
['driver-capabilities']: {
26+
supports_test_mode (iface, method_name) {
27+
return iface === 'puter-chat-completion' &&
28+
method_name === 'complete';
29+
}
30+
},
2531
['puter-chat-completion']: {
2632
async list () {
2733
return [

Diff for: src/backend/src/modules/puterai/PuterAIModule.js

+3
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,9 @@ class PuterAIModule extends AdvancedBase {
5656

5757
const { FakeChatService } = require('./FakeChatService');
5858
services.registerService('fake-chat', FakeChatService);
59+
60+
const{ AITestModeService } = require('./AITestModeService');
61+
services.registerService('ai-test-mode', AITestModeService);
5962
}
6063
}
6164

Diff for: src/backend/src/services/auth/PermissionService.js

+4
Original file line numberDiff line numberDiff line change
@@ -226,6 +226,10 @@ class PermissionService extends BaseService {
226226
}
227227

228228
async scan (actor, permission_options, _reserved, state) {
229+
if ( ! state ) this.log.info('scan', {
230+
actor: actor.uid,
231+
permission_options,
232+
});
229233
const reading = [];
230234

231235
if ( ! state ) {

Diff for: src/backend/src/services/drivers/DriverService.js

+25-1
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ class DriverService extends BaseService {
3737
_construct () {
3838
this.drivers = {};
3939
this.interface_to_implementation = {};
40+
this.interface_to_test_service = {};
4041
}
4142

4243
async ['__on_registry.collections'] () {
@@ -77,6 +78,10 @@ class DriverService extends BaseService {
7778
register_driver (interface_name, implementation) {
7879
this.interface_to_implementation[interface_name] = implementation;
7980
}
81+
82+
register_test_service (interface_name, service_name) {
83+
this.interface_to_test_service[interface_name] = service_name;
84+
}
8085

8186
get_interface (interface_name) {
8287
const o = {};
@@ -113,7 +118,8 @@ class DriverService extends BaseService {
113118
async _call ({ driver, iface, method, args }) {
114119
console.log('??', driver, iface, method, args);
115120
const processed_args = await this._process_args(iface, method, args);
116-
if ( Context.get('test_mode') ) {
121+
const test_mode = Context.get('test_mode');
122+
if ( test_mode ) {
117123
processed_args.test_mode = true;
118124
}
119125

@@ -141,18 +147,31 @@ class DriverService extends BaseService {
141147

142148
driver = driver ?? iface_to_driver[iface] ?? iface;
143149

150+
let skip_usage = false;
151+
if ( test_mode && this.interface_to_test_service[iface] ) {
152+
driver = this.interface_to_test_service[iface];
153+
}
154+
144155
const driver_service_exists = (() => {
156+
console.log('CHECKING FOR THIS', driver, iface);
145157
return this.services.has(driver) &&
146158
this.services.get(driver).list_traits()
147159
.includes(iface);
148160
})();
149161
if ( driver_service_exists ) {
150162
const service = this.services.get(driver);
163+
164+
const caps = service.as('driver-capabilities');
165+
if ( test_mode && caps && caps.supports_test_mode(iface, method) ) {
166+
skip_usage = true;
167+
}
168+
151169
return await this.call_new_({
152170
actor,
153171
service,
154172
service_name: driver,
155173
iface, method, args: processed_args,
174+
skip_usage,
156175
});
157176
}
158177

@@ -240,6 +259,7 @@ class DriverService extends BaseService {
240259
service,
241260
service_name,
242261
iface, method, args,
262+
skip_usage,
243263
}) {
244264
const svc_permission = this.services.get('permission');
245265
const reading = await svc_permission.scan(
@@ -324,6 +344,8 @@ class DriverService extends BaseService {
324344
{
325345
name: 'enforce monthly usage limit',
326346
on_call: async args => {
347+
if ( skip_usage ) return args;
348+
327349
// Typo-Tolerance
328350
if ( effective_policy?.['monthy-limit'] ) {
329351
effective_policy['monthly-limit'] = effective_policy['monthy-limit'];
@@ -343,6 +365,8 @@ class DriverService extends BaseService {
343365
return args;
344366
},
345367
on_return: async result => {
368+
if ( skip_usage ) return result;
369+
346370
console.log('monthly usage is returning');
347371
const svc_monthlyUsage = services.get('monthly-usage');
348372
const extra = {

0 commit comments

Comments
 (0)