{"version":3,"file":"mock-sdk.mjs","names":[],"sources":["../../../../../../../ai/src/mock/mock-sdk.ts"],"sourcesContent":["import type { ImageModelConfig } from \"../contracts/image-model.contract\";\nimport type {\n  ModelConfig,\n  SDKAdapterContract,\n} from \"../contracts/sdk-adapter.contract\";\nimport type { SpeechModelConfig } from \"../contracts/speech-model.contract\";\nimport type { TranscriptionModelConfig } from \"../contracts/transcription-model.contract\";\nimport { approximateTokenCount } from \"../utils/token-count\";\nimport type { MockSDKConfig } from \"./mock-config.type\";\nimport { MockImageModel } from \"./mock-image-model\";\nimport { MockModel } from \"./mock-model\";\nimport { MockSpeechModel } from \"./mock-speech-model\";\nimport { MockTranscriptionModel } from \"./mock-transcription-model\";\n\n/**\n * Creates a mock SDK adapter for testing — no HTTP calls, fully configurable.\n *\n * @example\n * const mock = MockSDK({\n *   responses: [\n *     { content: \"Hello from mock!\" },\n *     { content: \"Second response\" },\n *   ],\n * });\n * const model = mock.model({ name: \"gpt-4o\" });\n * const result = await model.complete([{ role: \"user\", content: \"Hi\" }]);\n * console.log(result.content); // \"Hello from mock!\"\n */\nexport function MockSDK(config: MockSDKConfig = {}): Omit<SDKAdapterContract, \"model\"> & {\n  /**\n   * Narrower than `SDKAdapterContract.model()` on purpose — the\n   * instance really is a `MockModel`, so tests can reach `.calls` /\n   * `.reset()` straight off the returned model instead of digging it\n   * back out of `models`. Still satisfies the adapter contract:\n   * `MockModel` implements `ModelContract`.\n   */\n  model(modelConfig: ModelConfig): MockModel;\n  /** All model instances created by this SDK — for inspecting calls in tests */\n  models: MockModel[];\n  /** All image-model instances created by this SDK — for inspecting calls in tests */\n  imageModels: MockImageModel[];\n  /** All speech-model instances created by this SDK — for inspecting calls in tests */\n  speechModels: MockSpeechModel[];\n  /** All transcription-model instances created by this SDK — for inspecting calls in tests */\n  transcriptionModels: MockTranscriptionModel[];\n} {\n  const models: MockModel[] = [];\n  const imageModels: MockImageModel[] = [];\n  const speechModels: MockSpeechModel[] = [];\n  const transcriptionModels: MockTranscriptionModel[] = [];\n  const responses = config.responses ?? [{ content: \"Mock response\" }];\n  const imageResponses = config.imageResponses ?? [{}];\n  const speechResponses = config.speechResponses ?? [{}];\n  const transcriptionResponses = config.transcriptionResponses ?? [{}];\n\n  return {\n    models,\n    imageModels,\n    speechModels,\n    transcriptionModels,\n    model(modelConfig: ModelConfig) {\n      const model = new MockModel(\n        modelConfig.name ?? config.defaultModelName ?? \"mock-model\",\n        responses,\n        config.capabilities,\n      );\n      models.push(model);\n      return model;\n    },\n    image(imageConfig: ImageModelConfig) {\n      const model = new MockImageModel(\n        imageConfig.name ?? config.defaultModelName ?? \"mock-image-model\",\n        imageResponses,\n        imageConfig.pricing ?? config.imagePricing,\n      );\n      imageModels.push(model);\n      return model;\n    },\n    speech(speechConfig: SpeechModelConfig) {\n      const model = new MockSpeechModel(\n        speechConfig.name ?? config.defaultModelName ?? \"mock-speech-model\",\n        speechResponses,\n        speechConfig.pricing ?? config.speechPricing,\n      );\n      speechModels.push(model);\n      return model;\n    },\n    transcribe(transcribeConfig: TranscriptionModelConfig) {\n      const model = new MockTranscriptionModel(\n        transcribeConfig.name ?? config.defaultModelName ?? \"mock-transcription-model\",\n        transcriptionResponses,\n        transcribeConfig.pricing ?? config.transcriptionPricing,\n      );\n      transcriptionModels.push(model);\n      return model;\n    },\n    async count(text: string, _model?: string): Promise<number> {\n      return approximateTokenCount(text);\n    },\n  };\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;AA4BA,SAAgB,QAAQ,SAAwB,CAAC,GAiB/C;CACA,MAAM,SAAsB,CAAC;CAC7B,MAAM,cAAgC,CAAC;CACvC,MAAM,eAAkC,CAAC;CACzC,MAAM,sBAAgD,CAAC;CACvD,MAAM,YAAY,OAAO,aAAa,CAAC,EAAE,SAAS,gBAAgB,CAAC;CACnE,MAAM,iBAAiB,OAAO,kBAAkB,CAAC,CAAC,CAAC;CACnD,MAAM,kBAAkB,OAAO,mBAAmB,CAAC,CAAC,CAAC;CACrD,MAAM,yBAAyB,OAAO,0BAA0B,CAAC,CAAC,CAAC;CAEnE,OAAO;EACL;EACA;EACA;EACA;EACA,MAAM,aAA0B;GAC9B,MAAM,QAAQ,IAAI,UAChB,YAAY,QAAQ,OAAO,oBAAoB,cAC/C,WACA,OAAO,YACT;GACA,OAAO,KAAK,KAAK;GACjB,OAAO;EACT;EACA,MAAM,aAA+B;GACnC,MAAM,QAAQ,IAAI,eAChB,YAAY,QAAQ,OAAO,oBAAoB,oBAC/C,gBACA,YAAY,WAAW,OAAO,YAChC;GACA,YAAY,KAAK,KAAK;GACtB,OAAO;EACT;EACA,OAAO,cAAiC;GACtC,MAAM,QAAQ,IAAI,gBAChB,aAAa,QAAQ,OAAO,oBAAoB,qBAChD,iBACA,aAAa,WAAW,OAAO,aACjC;GACA,aAAa,KAAK,KAAK;GACvB,OAAO;EACT;EACA,WAAW,kBAA4C;GACrD,MAAM,QAAQ,IAAI,uBAChB,iBAAiB,QAAQ,OAAO,oBAAoB,4BACpD,wBACA,iBAAiB,WAAW,OAAO,oBACrC;GACA,oBAAoB,KAAK,KAAK;GAC9B,OAAO;EACT;EACA,MAAM,MAAM,MAAc,QAAkC;GAC1D,OAAO,sBAAsB,IAAI;EACnC;CACF;AACF"}