picocode-core 0.9.153 → 0.9.154
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +1 -1
- package/src/controller.js +42 -10
package/package.json
CHANGED
package/src/controller.js
CHANGED
|
@@ -241,13 +241,19 @@ export function createController({ boot }) {
|
|
|
241
241
|
rounds = options.rounds
|
|
242
242
|
const existingIds = deliberationsFromEvents(state.events).map((item) => Number(item.deliberationId)).filter(Number.isFinite)
|
|
243
243
|
const id = String(Math.max(0, ...existingIds) + 1)
|
|
244
|
-
const
|
|
245
|
-
const
|
|
246
|
-
|
|
247
|
-
const
|
|
244
|
+
const roleModel = (role) => (role === 'proposer' ? boot.proposerModel : role === 'reviewer' ? boot.reviewerModel : null) || boot.deliberationModel || boot.proposerModel || boot.reviewerModel
|
|
245
|
+
const roleWorkers = {}
|
|
246
|
+
const roleAuths = {}
|
|
247
|
+
for (const part of ['proposer', 'reviewer', 'synthesizer']) {
|
|
248
|
+
const name = roleModel(part)
|
|
249
|
+
const found = boot.models.find((m) => m.name === name)
|
|
250
|
+
if (!found || found.available === false) throw new Error(`deliberation model unavailable: ${name}`)
|
|
251
|
+
roleWorkers[part] = found
|
|
252
|
+
roleAuths[part] = found.provider === 'codex' ? await openaiCredentials() : null
|
|
253
|
+
}
|
|
248
254
|
const sessionId = state.session?.id
|
|
249
255
|
if (!sessionId) throw new Error('deliberation requires an active session')
|
|
250
|
-
persist(makeEvent('deliberation_start', { deliberationId: id, brief, rounds, model:
|
|
256
|
+
persist(makeEvent('deliberation_start', { deliberationId: id, brief, rounds, model: roleModel('synthesizer'), models: { proposer: roleModel('proposer'), reviewer: roleModel('reviewer') } }))
|
|
251
257
|
bumpActivity()
|
|
252
258
|
const live = { role: null, round: null, text: '' }
|
|
253
259
|
liveDeliberations.set(id, live)
|
|
@@ -285,9 +291,9 @@ export function createController({ boot }) {
|
|
|
285
291
|
history,
|
|
286
292
|
tools: toolset.tools,
|
|
287
293
|
recorder: toolset.recorder,
|
|
288
|
-
modelName,
|
|
289
|
-
effort:
|
|
290
|
-
auth,
|
|
294
|
+
modelName: roleWorkers[role].name,
|
|
295
|
+
effort: roleWorkers[role].effort ? 'low' : null,
|
|
296
|
+
auth: roleAuths[role],
|
|
291
297
|
system: participantSystemPrompt(scratchpad),
|
|
292
298
|
signal,
|
|
293
299
|
onStream,
|
|
@@ -602,7 +608,7 @@ export function createController({ boot }) {
|
|
|
602
608
|
wakeups: boot.wakeups,
|
|
603
609
|
memory: boot.memory,
|
|
604
610
|
agents: boot.researchModel ? agents : null,
|
|
605
|
-
deliberations: boot.deliberationModel ? deliberations : null,
|
|
611
|
+
deliberations: boot.deliberationModel || (boot.proposerModel && boot.reviewerModel) ? deliberations : null,
|
|
606
612
|
onAgentsCollected: discardCollectedAgentNotes,
|
|
607
613
|
askUser,
|
|
608
614
|
dredge: boot.dredge,
|
|
@@ -1029,7 +1035,8 @@ export function createController({ boot }) {
|
|
|
1029
1035
|
flash('usage: /deliberate <decision>')
|
|
1030
1036
|
return true
|
|
1031
1037
|
}
|
|
1032
|
-
if (!modelAvailable(boot.deliberationModel)) return false
|
|
1038
|
+
if (!modelAvailable(boot.proposerModel || boot.deliberationModel)) return false
|
|
1039
|
+
if (!modelAvailable(boot.reviewerModel || boot.deliberationModel)) return false
|
|
1033
1040
|
const n = Number(rounds)
|
|
1034
1041
|
send(deliberatePrompt(decision, Number.isInteger(n) && n >= 1 && n <= MAX_DELIBERATION_ROUNDS ? n : null))
|
|
1035
1042
|
return true
|
|
@@ -1065,6 +1072,28 @@ export function createController({ boot }) {
|
|
|
1065
1072
|
changed()
|
|
1066
1073
|
}
|
|
1067
1074
|
|
|
1075
|
+
async function setProposerModel(name) {
|
|
1076
|
+
if (name && !modelAvailable(name)) return flash(`${name} is not available`)
|
|
1077
|
+
boot.proposerModel = name || null
|
|
1078
|
+
await writeConfig({ models: { proposer: name || null } })
|
|
1079
|
+
changed()
|
|
1080
|
+
}
|
|
1081
|
+
|
|
1082
|
+
async function setReviewerModel(name) {
|
|
1083
|
+
if (name && !modelAvailable(name)) return flash(`${name} is not available`)
|
|
1084
|
+
boot.reviewerModel = name || null
|
|
1085
|
+
await writeConfig({ models: { reviewer: name || null } })
|
|
1086
|
+
changed()
|
|
1087
|
+
}
|
|
1088
|
+
|
|
1089
|
+
async function setDefaultModel(name) {
|
|
1090
|
+
const pick = boot.models.find((m) => m.name === name)
|
|
1091
|
+
if (!pick || pick.available === false) return flash(`${name || 'model'} is not available`)
|
|
1092
|
+
state.defaultModel = pick
|
|
1093
|
+
await writeConfig({ defaultModel: pick.name })
|
|
1094
|
+
changed()
|
|
1095
|
+
}
|
|
1096
|
+
|
|
1068
1097
|
function sendInit(args) {
|
|
1069
1098
|
send(initPrompt(args))
|
|
1070
1099
|
}
|
|
@@ -1332,6 +1361,9 @@ export function createController({ boot }) {
|
|
|
1332
1361
|
sendInit,
|
|
1333
1362
|
setResearchModel,
|
|
1334
1363
|
setDeliberationModel,
|
|
1364
|
+
setProposerModel,
|
|
1365
|
+
setReviewerModel,
|
|
1366
|
+
setDefaultModel,
|
|
1335
1367
|
previewSteer,
|
|
1336
1368
|
applySteer,
|
|
1337
1369
|
rewind,
|