{"version":3,"sources":["../../../src/modelgarden/v2/llama.ts"],"sourcesContent":["/**\n * Copyright 2025 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { ActionMetadata, GenkitError, z, type ModelReference } from 'genkit';\nimport {\n  ModelInfo,\n  modelRef,\n  type GenerateRequest,\n  type ModelAction,\n} from 'genkit/model';\nimport type { GoogleAuth } from 'google-auth-library';\nimport OpenAI from 'openai';\nimport { getGenkitClientHeader } from '../../common/index.js';\nimport {\n  OpenAIConfigSchema,\n  defineOpenaiCompatibleModel,\n} from './openai_compatibility.js';\nimport { PluginOptions } from './types.js';\nimport { checkModelName } from './utils.js';\n\nexport const LlamaConfigSchema = OpenAIConfigSchema.extend({\n  location: z.string().optional(),\n}).passthrough();\nexport type LlamaConfigSchemaType = typeof LlamaConfigSchema;\nexport type LlamaConfig = z.infer<LlamaConfigSchemaType>;\n\ntype ConfigSchemaType = LlamaConfigSchemaType;\n\nfunction commonRef(\n  name: string,\n  info?: ModelInfo,\n  configSchema: ConfigSchemaType = LlamaConfigSchema\n): ModelReference<ConfigSchemaType> {\n  return modelRef({\n    name: `vertex-model-garden/${name}`,\n    configSchema,\n    info: info ?? {\n      supports: {\n        multiturn: true,\n        tools: true,\n        media: true,\n        systemRole: true,\n        output: ['text', 'json'],\n      },\n    },\n  });\n}\n\nexport const GENERIC_MODEL = commonRef('llama');\n\nexport const KNOWN_MODELS = {\n  'meta/llama-4-maverick-17b-128e-instruct-maas': commonRef(\n    'meta/llama-4-maverick-17b-128e-instruct-maas'\n  ),\n  'meta/llama-4-scout-17b-16e-instruct-maas': commonRef(\n    'meta/llama-4-scout-17b-16e-instruct-maas'\n  ),\n  'meta/llama-3.3-70b-instruct-maas': commonRef(\n    'meta/llama-3.3-70b-instruct-maas'\n  ),\n};\nexport type KnownModels = keyof typeof KNOWN_MODELS;\nexport type LlamaModelName = `meta/llama-${string}`;\nexport function isLlamaModelName(value?: string): value is LlamaModelName {\n  return !!value?.startsWith('meta/llama-');\n}\n\nexport function model(\n  version: string,\n  options: LlamaConfig = {}\n): ModelReference<LlamaConfigSchemaType> {\n  const name = checkModelName(version);\n\n  return modelRef({\n    name: `vertex-model-garden/${name}`,\n    config: options,\n    configSchema: LlamaConfigSchema,\n    info: {\n      ...GENERIC_MODEL.info,\n    },\n  });\n}\n\nexport interface ClientOptions {\n  location: string; // e.g. 'us-central1' or 'us-east5'\n  projectId: string;\n  authClient: GoogleAuth;\n  baseUrlTemplate?: string;\n}\n\nexport function listActions(clientOptions: ClientOptions): ActionMetadata[] {\n  // TODO: figure out where to get the list of models.\n  return [];\n}\n\nexport function listKnownModels(\n  clientOptions: ClientOptions,\n  pluginOptions?: PluginOptions\n) {\n  return Object.keys(KNOWN_MODELS).map((name) =>\n    defineModel(name, clientOptions, pluginOptions)\n  );\n}\n\nexport function defineModel(\n  name: string,\n  clientOptions: ClientOptions,\n  pluginOptions?: PluginOptions\n): ModelAction<LlamaConfigSchemaType> {\n  const ref = model(name);\n  const clientFactory = async (\n    request: GenerateRequest<LlamaConfigSchemaType>\n  ): Promise<OpenAI> => {\n    const options = await resolveOptions(clientOptions, request.config);\n    return new OpenAI(options);\n  };\n  return defineOpenaiCompatibleModel(ref, clientFactory);\n}\n\nasync function resolveOptions(\n  clientOptions: ClientOptions,\n  requestConfig?: LlamaConfig\n) {\n  const baseUrlTemplate =\n    clientOptions.baseUrlTemplate ??\n    'https://{location}-aiplatform.googleapis.com/v1/projects/{projectId}/locations/{location}/endpoints/openapi';\n  const location = requestConfig?.location || clientOptions.location;\n  const baseURL = baseUrlTemplate\n    .replace(/{location}/g, location)\n    .replace(/{projectId}/g, clientOptions.projectId);\n  const apiKey = await clientOptions.authClient.getAccessToken();\n  if (!apiKey) {\n    throw new GenkitError({\n      status: 'PERMISSION_DENIED',\n      message: 'Unable to get accessToken',\n    });\n  }\n  const defaultHeaders = {\n    'X-Goog-Api-Client': getGenkitClientHeader(),\n  };\n  return { baseURL, apiKey, defaultHeaders };\n}\n"],"mappings":"AAgBA,SAAyB,aAAa,SAA8B;AACpE;AAAA,EAEE;AAAA,OAGK;AAEP,OAAO,YAAY;AACnB,SAAS,6BAA6B;AACtC;AAAA,EACE;AAAA,EACA;AAAA,OACK;AAEP,SAAS,sBAAsB;AAExB,MAAM,oBAAoB,mBAAmB,OAAO;AAAA,EACzD,UAAU,EAAE,OAAO,EAAE,SAAS;AAChC,CAAC,EAAE,YAAY;AAMf,SAAS,UACP,MACA,MACA,eAAiC,mBACC;AAClC,SAAO,SAAS;AAAA,IACd,MAAM,uBAAuB,IAAI;AAAA,IACjC;AAAA,IACA,MAAM,QAAQ;AAAA,MACZ,UAAU;AAAA,QACR,WAAW;AAAA,QACX,OAAO;AAAA,QACP,OAAO;AAAA,QACP,YAAY;AAAA,QACZ,QAAQ,CAAC,QAAQ,MAAM;AAAA,MACzB;AAAA,IACF;AAAA,EACF,CAAC;AACH;AAEO,MAAM,gBAAgB,UAAU,OAAO;AAEvC,MAAM,eAAe;AAAA,EAC1B,gDAAgD;AAAA,IAC9C;AAAA,EACF;AAAA,EACA,4CAA4C;AAAA,IAC1C;AAAA,EACF;AAAA,EACA,oCAAoC;AAAA,IAClC;AAAA,EACF;AACF;AAGO,SAAS,iBAAiB,OAAyC;AACxE,SAAO,CAAC,CAAC,OAAO,WAAW,aAAa;AAC1C;AAEO,SAAS,MACd,SACA,UAAuB,CAAC,GACe;AACvC,QAAM,OAAO,eAAe,OAAO;AAEnC,SAAO,SAAS;AAAA,IACd,MAAM,uBAAuB,IAAI;AAAA,IACjC,QAAQ;AAAA,IACR,cAAc;AAAA,IACd,MAAM;AAAA,MACJ,GAAG,cAAc;AAAA,IACnB;AAAA,EACF,CAAC;AACH;AASO,SAAS,YAAY,eAAgD;AAE1E,SAAO,CAAC;AACV;AAEO,SAAS,gBACd,eACA,eACA;AACA,SAAO,OAAO,KAAK,YAAY,EAAE;AAAA,IAAI,CAAC,SACpC,YAAY,MAAM,eAAe,aAAa;AAAA,EAChD;AACF;AAEO,SAAS,YACd,MACA,eACA,eACoC;AACpC,QAAM,MAAM,MAAM,IAAI;AACtB,QAAM,gBAAgB,OACpB,YACoB;AACpB,UAAM,UAAU,MAAM,eAAe,eAAe,QAAQ,MAAM;AAClE,WAAO,IAAI,OAAO,OAAO;AAAA,EAC3B;AACA,SAAO,4BAA4B,KAAK,aAAa;AACvD;AAEA,eAAe,eACb,eACA,eACA;AACA,QAAM,kBACJ,cAAc,mBACd;AACF,QAAM,WAAW,eAAe,YAAY,cAAc;AAC1D,QAAM,UAAU,gBACb,QAAQ,eAAe,QAAQ,EAC/B,QAAQ,gBAAgB,cAAc,SAAS;AAClD,QAAM,SAAS,MAAM,cAAc,WAAW,eAAe;AAC7D,MAAI,CAAC,QAAQ;AACX,UAAM,IAAI,YAAY;AAAA,MACpB,QAAQ;AAAA,MACR,SAAS;AAAA,IACX,CAAC;AAAA,EACH;AACA,QAAM,iBAAiB;AAAA,IACrB,qBAAqB,sBAAsB;AAAA,EAC7C;AACA,SAAO,EAAE,SAAS,QAAQ,eAAe;AAC3C;","names":[]}