MCPcopy Create free account
hub / github.com/tiann/hapi / useOpencodeModels

Function useOpencodeModels

web/src/hooks/queries/useOpencodeModels.ts:30–78  ·  view source on GitHub ↗
(args: {
    api: ApiClient | null
    sessionId?: string | null
    enabled?: boolean
})

Source from the content-addressed store, hash-verified

28}
29
30export function useOpencodeModels(args: {
31 api: ApiClient | null
32 sessionId?: string | null
33 enabled?: boolean
34}): {
35 availableModels: OpencodeModelSummary[]
36 currentModelId: string | null
37 isLoading: boolean
38 error: string | null
39} {
40 const { api, sessionId } = args
41 const enabled = Boolean(args.enabled && api && sessionId)
42
43 const query = useQuery({
44 queryKey: sessionId
45 ? queryKeys.sessionOpencodeModels(sessionId)
46 : ['session-opencode-models', 'unknown'] as const,
47 queryFn: async () => {
48 if (!api) {
49 throw new Error('API unavailable')
50 }
51 if (!sessionId) {
52 throw new Error('OpenCode models target unavailable')
53 }
54 return await api.getSessionOpencodeModels(sessionId)
55 },
56 enabled,
57 staleTime: 30_000,
58 retry: (failureCount) => shouldRetryOpencodeModelsQuery(failureCount),
59 refetchInterval: (query) => getOpencodeModelsRefetchInterval(
60 enabled,
61 query.state.data as OpencodeModelsResponse | undefined,
62 query.state.dataUpdateCount + query.state.errorUpdateCount
63 ),
64 })
65
66 return {
67 availableModels: query.data?.availableModels ?? [],
68 currentModelId: query.data?.currentModelId ?? null,
69 isLoading: query.isLoading,
70 error: query.data?.success === false
71 ? (query.data.error ?? 'Failed to load OpenCode models')
72 : query.error instanceof Error
73 ? query.error.message
74 : query.error
75 ? 'Failed to load OpenCode models'
76 : null,
77 }
78}

Callers 1

SessionChatInnerFunction · 0.90

Tested by

no test coverage detected