@@ -35,7 +35,7 @@ import { Hash } from "../util/hash"
3535import { ACPSessionManager } from "./session"
3636import type { ACPConfig } from "./types"
3737import { Provider } from "../provider/provider"
38- import { ProviderID } from "../provider/schema"
38+ import { ModelID , ProviderID } from "../provider/schema"
3939import { Agent as AgentModule } from "../agent/agent"
4040import { Installation } from "@/installation"
4141import { MessageV2 } from "@/session/message-v2"
@@ -56,8 +56,8 @@ export namespace ACP {
5656
5757 async function getContextLimit (
5858 sdk : OpencodeClient ,
59- providerID : string ,
60- modelID : string ,
59+ providerID : ProviderID ,
60+ modelID : ModelID ,
6161 directory : string ,
6262 ) : Promise < number | null > {
6363 const providers = await sdk . config
@@ -97,7 +97,8 @@ export namespace ACP {
9797 if ( ! lastAssistant ) return
9898
9999 const msg = lastAssistant . info
100- const size = await getContextLimit ( sdk , msg . providerID , msg . modelID , directory )
100+ if ( ! msg . providerID || ! msg . modelID ) return
101+ const size = await getContextLimit ( sdk , ProviderID . make ( msg . providerID ) , ModelID . make ( msg . modelID ) , directory )
101102
102103 if ( ! size ) {
103104 // Cannot calculate usage without known context size
@@ -637,8 +638,8 @@ export namespace ACP {
637638 if ( lastUser ?. role === "user" ) {
638639 result . models . currentModelId = `${ lastUser . model . providerID } /${ lastUser . model . modelID } `
639640 this . sessionManager . setModel ( sessionId , {
640- providerID : lastUser . model . providerID ,
641- modelID : lastUser . model . modelID ,
641+ providerID : ProviderID . make ( lastUser . model . providerID ) ,
642+ modelID : ModelID . make ( lastUser . model . modelID ) ,
642643 } )
643644 if ( result . modes ?. availableModes . some ( ( m ) => m . id === lastUser . agent ) ) {
644645 result . modes . currentModeId = lastUser . agent
@@ -1526,7 +1527,7 @@ export namespace ACP {
15261527 }
15271528 }
15281529
1529- async function defaultModel ( config : ACPConfig , cwd ?: string ) {
1530+ async function defaultModel ( config : ACPConfig , cwd ?: string ) : Promise < { providerID : ProviderID ; modelID : ModelID } > {
15301531 const sdk = config . sdk
15311532 const configured = config . defaultModel
15321533 if ( configured ) return configured
@@ -1538,11 +1539,7 @@ export namespace ACP {
15381539 . then ( ( resp ) => {
15391540 const cfg = resp . data
15401541 if ( ! cfg || ! cfg . model ) return undefined
1541- const parsed = Provider . parseModel ( cfg . model )
1542- return {
1543- providerID : parsed . providerID ,
1544- modelID : parsed . modelID ,
1545- }
1542+ return Provider . parseModel ( cfg . model )
15461543 } )
15471544 . catch ( ( error ) => {
15481545 log . error ( "failed to load user config for default model" , { error } )
@@ -1567,13 +1564,13 @@ export namespace ACP {
15671564 const opencodeProvider = providers . find ( ( p ) => p . id === "opencode" )
15681565 if ( opencodeProvider ) {
15691566 if ( opencodeProvider . models [ "big-pickle" ] ) {
1570- return { providerID : " opencode" , modelID : "big-pickle" }
1567+ return { providerID : ProviderID . opencode , modelID : ModelID . make ( "big-pickle" ) }
15711568 }
15721569 const [ best ] = Provider . sort ( Object . values ( opencodeProvider . models ) )
15731570 if ( best ) {
15741571 return {
1575- providerID : best . providerID ,
1576- modelID : best . id ,
1572+ providerID : ProviderID . make ( best . providerID ) ,
1573+ modelID : ModelID . make ( best . id ) ,
15771574 }
15781575 }
15791576 }
@@ -1582,14 +1579,14 @@ export namespace ACP {
15821579 const [ best ] = Provider . sort ( models )
15831580 if ( best ) {
15841581 return {
1585- providerID : best . providerID ,
1586- modelID : best . id ,
1582+ providerID : ProviderID . make ( best . providerID ) ,
1583+ modelID : ModelID . make ( best . id ) ,
15871584 }
15881585 }
15891586
15901587 if ( specified ) return specified
15911588
1592- return { providerID : " opencode" , modelID : "big-pickle" }
1589+ return { providerID : ProviderID . opencode , modelID : ModelID . make ( "big-pickle" ) }
15931590 }
15941591
15951592 function parseUri (
@@ -1652,7 +1649,7 @@ export namespace ACP {
16521649
16531650 function modelVariantsFromProviders (
16541651 providers : Array < { id : string ; models : Record < string , { variants ?: Record < string , any > } > } > ,
1655- model : { providerID : string ; modelID : string } ,
1652+ model : { providerID : ProviderID ; modelID : ModelID } ,
16561653 ) : string [ ] {
16571654 const provider = providers . find ( ( entry ) => entry . id === model . providerID )
16581655 if ( ! provider ) return [ ]
@@ -1688,7 +1685,7 @@ export namespace ACP {
16881685 }
16891686
16901687 function formatModelIdWithVariant (
1691- model : { providerID : string ; modelID : string } ,
1688+ model : { providerID : ProviderID ; modelID : ModelID } ,
16921689 variant : string | undefined ,
16931690 availableVariants : string [ ] ,
16941691 includeVariant : boolean ,
@@ -1699,7 +1696,7 @@ export namespace ACP {
16991696 }
17001697
17011698 function buildVariantMeta ( input : {
1702- model : { providerID : string ; modelID : string }
1699+ model : { providerID : ProviderID ; modelID : ModelID }
17031700 variant ?: string
17041701 availableVariants : string [ ]
17051702 } ) {
@@ -1715,7 +1712,7 @@ export namespace ACP {
17151712 function parseModelSelection (
17161713 modelId : string ,
17171714 providers : Array < { id : string ; models : Record < string , { variants ?: Record < string , any > } > } > ,
1718- ) : { model : { providerID : string ; modelID : string } ; variant ?: string } {
1715+ ) : { model : { providerID : ProviderID ; modelID : ModelID } ; variant ?: string } {
17191716 const parsed = Provider . parseModel ( modelId )
17201717 const provider = providers . find ( ( p ) => p . id === parsed . providerID )
17211718 if ( ! provider ) {
@@ -1735,7 +1732,7 @@ export namespace ACP {
17351732 const baseModelInfo = provider . models [ baseModelId ]
17361733 if ( baseModelInfo ?. variants && candidateVariant in baseModelInfo . variants ) {
17371734 return {
1738- model : { providerID : parsed . providerID , modelID : baseModelId } ,
1735+ model : { providerID : parsed . providerID , modelID : ModelID . make ( baseModelId ) } ,
17391736 variant : candidateVariant ,
17401737 }
17411738 }
0 commit comments