11import { Anthropic } from "@anthropic-ai/sdk"
22import axios from "axios"
33import OpenAI from "openai"
4- import { ApiHandler , SingleCompletionHandler } from "../"
4+
55import { ApiHandlerOptions , ModelInfo , glamaDefaultModelId , glamaDefaultModelInfo } from "../../shared/api"
6+ import { parseApiPrice } from "../../utils/cost"
67import { convertToOpenAiMessages } from "../transform/openai-format"
78import { ApiStream } from "../transform/stream"
9+ import { ApiHandler , SingleCompletionHandler } from "../"
810
911const GLAMA_DEFAULT_TEMPERATURE = 0
1012
@@ -69,7 +71,7 @@ export class GlamaHandler implements ApiHandler, SingleCompletionHandler {
6971 let maxTokens : number | undefined
7072
7173 if ( this . getModel ( ) . id . startsWith ( "anthropic/" ) ) {
72- maxTokens = 8_192
74+ maxTokens = this . getModel ( ) . info . maxTokens
7375 }
7476
7577 const requestOptions : OpenAI . Chat . ChatCompletionCreateParams = {
@@ -177,7 +179,7 @@ export class GlamaHandler implements ApiHandler, SingleCompletionHandler {
177179 }
178180
179181 if ( this . getModel ( ) . id . startsWith ( "anthropic/" ) ) {
180- requestOptions . max_tokens = 8192
182+ requestOptions . max_tokens = this . getModel ( ) . info . maxTokens
181183 }
182184
183185 const response = await this . client . chat . completions . create ( requestOptions )
@@ -190,3 +192,44 @@ export class GlamaHandler implements ApiHandler, SingleCompletionHandler {
190192 }
191193 }
192194}
195+
196+ export async function getGlamaModels ( ) {
197+ const models : Record < string , ModelInfo > = { }
198+
199+ try {
200+ const response = await axios . get ( "https://glama.ai/api/gateway/v1/models" )
201+ const rawModels = response . data
202+
203+ for ( const rawModel of rawModels ) {
204+ const modelInfo : ModelInfo = {
205+ maxTokens : rawModel . maxTokensOutput ,
206+ contextWindow : rawModel . maxTokensInput ,
207+ supportsImages : rawModel . capabilities ?. includes ( "input:image" ) ,
208+ supportsComputerUse : rawModel . capabilities ?. includes ( "computer_use" ) ,
209+ supportsPromptCache : rawModel . capabilities ?. includes ( "caching" ) ,
210+ inputPrice : parseApiPrice ( rawModel . pricePerToken ?. input ) ,
211+ outputPrice : parseApiPrice ( rawModel . pricePerToken ?. output ) ,
212+ description : undefined ,
213+ cacheWritesPrice : parseApiPrice ( rawModel . pricePerToken ?. cacheWrite ) ,
214+ cacheReadsPrice : parseApiPrice ( rawModel . pricePerToken ?. cacheRead ) ,
215+ }
216+
217+ switch ( rawModel . id ) {
218+ case rawModel . id . startsWith ( "anthropic/claude-3-7-sonnet" ) :
219+ modelInfo . maxTokens = 16384
220+ break
221+ case rawModel . id . startsWith ( "anthropic/" ) :
222+ modelInfo . maxTokens = 8192
223+ break
224+ default :
225+ break
226+ }
227+
228+ models [ rawModel . id ] = modelInfo
229+ }
230+ } catch ( error ) {
231+ console . error ( `Error fetching Glama models: ${ JSON . stringify ( error , Object . getOwnPropertyNames ( error ) , 2 ) } ` )
232+ }
233+
234+ return models
235+ }
0 commit comments