(messages)
| 150 | } |
| 151 | |
| 152 | async createCompletion(messages) { |
| 153 | if (!this.isEnabled) return '' |
| 154 | |
| 155 | try { |
| 156 | this.checkModel() |
| 157 | debug('Request', messages) |
| 158 | |
| 159 | this.response = null |
| 160 | |
| 161 | const startTime = process.hrtime() |
| 162 | const result = await generateText({ |
| 163 | model: this.config.model, |
| 164 | messages, |
| 165 | }) |
| 166 | const endTime = process.hrtime(startTime) |
| 167 | const executionTimeInSeconds = endTime[0] + endTime[1] / 1e9 |
| 168 | |
| 169 | this.response = result.text |
| 170 | this.numTokens += result.usage.totalTokens |
| 171 | |
| 172 | this.totalTime += Math.round(executionTimeInSeconds) |
| 173 | debug('AI response time', executionTimeInSeconds) |
| 174 | debug('Response', this.response) |
| 175 | debug('Usage', result.usage) |
| 176 | this.stopWhenReachingTokensLimit() |
| 177 | return this.response |
| 178 | } catch (err) { |
| 179 | debug(err) |
| 180 | output.print('') |
| 181 | output.error(`AI service error: ${err.message}`) |
| 182 | this.stopWhenReachingTokensLimit() |
| 183 | return '' |
| 184 | } |
| 185 | } |
| 186 | |
| 187 | async healFailedStep(failureContext) { |
| 188 | if (!this.isEnabled) return [] |
no test coverage detected