Skip to content

Commit 45aa069

Browse files
authored
Merge pull request #501 from punkpeye/add-polling
feat: poll usage
2 parents 40c0457 + 576c92f commit 45aa069

File tree

1 file changed

+29
-17
lines changed

1 file changed

+29
-17
lines changed

src/api/providers/glama.ts

Lines changed: 29 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -110,26 +110,38 @@ export class GlamaHandler implements ApiHandler, SingleCompletionHandler {
110110
}
111111

112112
try {
113-
const response = await axios.get(
114-
`https://glama.ai/api/gateway/v1/completion-requests/${completionRequestId}`,
115-
{
116-
headers: {
117-
Authorization: `Bearer ${this.options.glamaApiKey}`,
118-
},
119-
},
120-
)
113+
let attempt = 0
121114

122-
const completionRequest = response.data
115+
const delay = (ms: number) => new Promise((resolve) => setTimeout(resolve, ms))
123116

124-
if (completionRequest.tokenUsage) {
125-
yield {
126-
type: "usage",
127-
cacheWriteTokens: completionRequest.tokenUsage.cacheCreationInputTokens,
128-
cacheReadTokens: completionRequest.tokenUsage.cacheReadInputTokens,
129-
inputTokens: completionRequest.tokenUsage.promptTokens,
130-
outputTokens: completionRequest.tokenUsage.completionTokens,
131-
totalCost: parseFloat(completionRequest.totalCostUsd),
117+
while (attempt++ < 10) {
118+
// In case of an interrupted request, we need to wait for the upstream API to finish processing the request
119+
// before we can fetch information about the token usage and cost.
120+
const response = await axios.get(
121+
`https://glama.ai/api/gateway/v1/completion-requests/${completionRequestId}`,
122+
{
123+
headers: {
124+
Authorization: `Bearer ${this.options.glamaApiKey}`,
125+
},
126+
},
127+
)
128+
129+
const completionRequest = response.data
130+
131+
if (completionRequest.tokenUsage && completionRequest.totalCostUsd) {
132+
yield {
133+
type: "usage",
134+
cacheWriteTokens: completionRequest.tokenUsage.cacheCreationInputTokens,
135+
cacheReadTokens: completionRequest.tokenUsage.cacheReadInputTokens,
136+
inputTokens: completionRequest.tokenUsage.promptTokens,
137+
outputTokens: completionRequest.tokenUsage.completionTokens,
138+
totalCost: parseFloat(completionRequest.totalCostUsd),
139+
}
140+
141+
break
132142
}
143+
144+
await delay(200)
133145
}
134146
} catch (error) {
135147
console.error("Error fetching Glama completion details", error)

0 commit comments

Comments
 (0)