11import { Credentials } from "../common/authentication" ;
22import { OctokitResponse } from "@octokit/types" ;
3+ import fetch from "node-fetch" ;
4+ import { ModelConfigListener } from "../config" ;
35
46export enum AutomodelMode {
57 Unspecified = "AUTOMODEL_MODE_UNSPECIFIED" ,
@@ -20,15 +22,44 @@ export interface ModelResponse {
2022export async function autoModel (
2123 credentials : Credentials ,
2224 request : ModelRequest ,
25+ modelingConfig : ModelConfigListener ,
2326) : Promise < ModelResponse > {
24- const octokit = await credentials . getOctokit ( ) ;
27+ const devEndpoint = modelingConfig . llmGenerationDevEndpoint ;
28+ if ( devEndpoint ) {
29+ return callAutoModelDevEndpoint ( devEndpoint , request ) ;
30+ } else {
31+ const octokit = await credentials . getOctokit ( ) ;
2532
26- const response : OctokitResponse < ModelResponse > = await octokit . request (
27- "POST /repos/github/codeql/code-scanning/codeql/auto-model" ,
28- {
29- data : request ,
33+ const response : OctokitResponse < ModelResponse > = await octokit . request (
34+ "POST /repos/github/codeql/code-scanning/codeql/auto-model" ,
35+ {
36+ data : request ,
37+ } ,
38+ ) ;
39+
40+ return response . data ;
41+ }
42+ }
43+
44+ async function callAutoModelDevEndpoint (
45+ endpoint : string ,
46+ request : ModelRequest ,
47+ ) : Promise < ModelResponse > {
48+ const json = JSON . stringify ( request ) ;
49+ const response = await fetch ( endpoint , {
50+ method : "POST" ,
51+ headers : {
52+ "Content-Type" : "application/json" ,
3053 } ,
31- ) ;
54+ body : json ,
55+ } ) ;
56+
57+ if ( ! response . ok ) {
58+ throw new Error (
59+ `Error calling auto-model API: ${ response . status } ${ response . statusText } ` ,
60+ ) ;
61+ }
3262
33- return response . data ;
63+ const data = await response . json ( ) ;
64+ return data as ModelResponse ;
3465}
0 commit comments