{"version":3,"file":"writer.cjs","names":["LLM","WriterClient"],"sources":["../../src/llms/writer.ts"],"sourcesContent":["import { Writer as WriterClient } from \"@writerai/writer-sdk\";\n\nimport { type BaseLLMParams, LLM } from \"@langchain/core/language_models/llms\";\nimport { getEnvironmentVariable } from \"@langchain/core/utils/env\";\n\n/**\n * Interface for the input parameters specific to the Writer model.\n */\nexport interface WriterInput extends BaseLLMParams {\n  /** Writer API key */\n  apiKey?: string;\n\n  /** Writer organization ID */\n  orgId?: string | number;\n\n  /** Model to use */\n  model?: string;\n\n  /** Sampling temperature to use */\n  temperature?: number;\n\n  /** Minimum number of tokens to generate. */\n  minTokens?: number;\n\n  /** Maximum number of tokens to generate in the completion. */\n  maxTokens?: number;\n\n  /** Generates this many completions server-side and returns the \"best\".\" */\n  bestOf?: number;\n\n  /** Penalizes repeated tokens according to frequency. */\n  frequencyPenalty?: number;\n\n  /** Whether to return log probabilities. */\n  logprobs?: number;\n\n  /** Number of completions to generate. */\n  n?: number;\n\n  /** Penalizes repeated tokens regardless of frequency. */\n  presencePenalty?: number;\n\n  /** Total probability mass of tokens to consider at each step. */\n  topP?: number;\n}\n\n/**\n * Class representing a Writer Large Language Model (LLM). It interacts\n * with the Writer API to generate text completions.\n */\nexport class Writer extends LLM implements WriterInput {\n  static lc_name() {\n    return \"Writer\";\n  }\n\n  get lc_secrets(): { [key: string]: string } | undefined {\n    return {\n      apiKey: \"WRITER_API_KEY\",\n      orgId: \"WRITER_ORG_ID\",\n    };\n  }\n\n  get lc_aliases(): { [key: string]: string } | undefined {\n    return {\n      apiKey: \"writer_api_key\",\n      orgId: \"writer_org_id\",\n    };\n  }\n\n  lc_serializable = true;\n\n  apiKey: string;\n\n  orgId: number;\n\n  model = \"palmyra-instruct\";\n\n  temperature?: number;\n\n  minTokens?: number;\n\n  maxTokens?: number;\n\n  bestOf?: number;\n\n  frequencyPenalty?: number;\n\n  logprobs?: number;\n\n  n?: number;\n\n  presencePenalty?: number;\n\n  topP?: number;\n\n  constructor(fields?: WriterInput) {\n    super(fields ?? {});\n\n    const apiKey = fields?.apiKey ?? getEnvironmentVariable(\"WRITER_API_KEY\");\n    const orgId = fields?.orgId ?? getEnvironmentVariable(\"WRITER_ORG_ID\");\n\n    if (!apiKey) {\n      throw new Error(\n        \"Please set the WRITER_API_KEY environment variable or pass it to the constructor as the apiKey field.\"\n      );\n    }\n\n    if (!orgId) {\n      throw new Error(\n        \"Please set the WRITER_ORG_ID environment variable or pass it to the constructor as the orgId field.\"\n      );\n    }\n\n    this.apiKey = apiKey;\n    this.orgId = typeof orgId === \"string\" ? parseInt(orgId, 10) : orgId;\n    this.model = fields?.model ?? this.model;\n    this.temperature = fields?.temperature ?? this.temperature;\n    this.minTokens = fields?.minTokens ?? this.minTokens;\n    this.maxTokens = fields?.maxTokens ?? this.maxTokens;\n    this.bestOf = fields?.bestOf ?? this.bestOf;\n    this.frequencyPenalty = fields?.frequencyPenalty ?? this.frequencyPenalty;\n    this.logprobs = fields?.logprobs ?? this.logprobs;\n    this.n = fields?.n ?? this.n;\n    this.presencePenalty = fields?.presencePenalty ?? this.presencePenalty;\n    this.topP = fields?.topP ?? this.topP;\n  }\n\n  _llmType() {\n    return \"writer\";\n  }\n\n  /** @ignore */\n  async _call(\n    prompt: string,\n    options: this[\"ParsedCallOptions\"]\n  ): Promise<string> {\n    const sdk = new WriterClient({\n      security: {\n        apiKey: this.apiKey,\n      },\n      organizationId: this.orgId,\n    });\n\n    return this.caller.callWithOptions({ signal: options.signal }, async () => {\n      try {\n        const res = await sdk.completions.create({\n          completionRequest: {\n            prompt,\n            stop: options.stop,\n            temperature: this.temperature,\n            minTokens: this.minTokens,\n            maxTokens: this.maxTokens,\n            bestOf: this.bestOf,\n            n: this.n,\n            frequencyPenalty: this.frequencyPenalty,\n            logprobs: this.logprobs,\n            presencePenalty: this.presencePenalty,\n            topP: this.topP,\n          },\n          modelId: this.model,\n        });\n        return (\n          res.completionResponse?.choices?.[0].text ?? \"No completion found.\"\n        );\n      } catch (e) {\n        // oxlint-disable-next-line typescript/no-explicit-any\n        (e as any).response = (e as any).rawResponse;\n        throw e;\n      }\n    });\n  }\n}\n"],"mappings":";;;;;;;;;;;AAkDA,IAAa,SAAb,cAA4BA,qCAAAA,IAA2B;CACrD,OAAO,UAAU;AACf,SAAO;;CAGT,IAAI,aAAoD;AACtD,SAAO;GACL,QAAQ;GACR,OAAO;GACR;;CAGH,IAAI,aAAoD;AACtD,SAAO;GACL,QAAQ;GACR,OAAO;GACR;;CAGH,kBAAkB;CAElB;CAEA;CAEA,QAAQ;CAER;CAEA;CAEA;CAEA;CAEA;CAEA;CAEA;CAEA;CAEA;CAEA,YAAY,QAAsB;AAChC,QAAM,UAAU,EAAE,CAAC;EAEnB,MAAM,SAAS,QAAQ,WAAA,GAAA,0BAAA,wBAAiC,iBAAiB;EACzE,MAAM,QAAQ,QAAQ,UAAA,GAAA,0BAAA,wBAAgC,gBAAgB;AAEtE,MAAI,CAAC,OACH,OAAM,IAAI,MACR,wGACD;AAGH,MAAI,CAAC,MACH,OAAM,IAAI,MACR,sGACD;AAGH,OAAK,SAAS;AACd,OAAK,QAAQ,OAAO,UAAU,WAAW,SAAS,OAAO,GAAG,GAAG;AAC/D,OAAK,QAAQ,QAAQ,SAAS,KAAK;AACnC,OAAK,cAAc,QAAQ,eAAe,KAAK;AAC/C,OAAK,YAAY,QAAQ,aAAa,KAAK;AAC3C,OAAK,YAAY,QAAQ,aAAa,KAAK;AAC3C,OAAK,SAAS,QAAQ,UAAU,KAAK;AACrC,OAAK,mBAAmB,QAAQ,oBAAoB,KAAK;AACzD,OAAK,WAAW,QAAQ,YAAY,KAAK;AACzC,OAAK,IAAI,QAAQ,KAAK,KAAK;AAC3B,OAAK,kBAAkB,QAAQ,mBAAmB,KAAK;AACvD,OAAK,OAAO,QAAQ,QAAQ,KAAK;;CAGnC,WAAW;AACT,SAAO;;;CAIT,MAAM,MACJ,QACA,SACiB;EACjB,MAAM,MAAM,IAAIC,qBAAAA,OAAa;GAC3B,UAAU,EACR,QAAQ,KAAK,QACd;GACD,gBAAgB,KAAK;GACtB,CAAC;AAEF,SAAO,KAAK,OAAO,gBAAgB,EAAE,QAAQ,QAAQ,QAAQ,EAAE,YAAY;AACzE,OAAI;AAiBF,YAhBY,MAAM,IAAI,YAAY,OAAO;KACvC,mBAAmB;MACjB;MACA,MAAM,QAAQ;MACd,aAAa,KAAK;MAClB,WAAW,KAAK;MAChB,WAAW,KAAK;MAChB,QAAQ,KAAK;MACb,GAAG,KAAK;MACR,kBAAkB,KAAK;MACvB,UAAU,KAAK;MACf,iBAAiB,KAAK;MACtB,MAAM,KAAK;MACZ;KACD,SAAS,KAAK;KACf,CAAC,EAEI,oBAAoB,UAAU,GAAG,QAAQ;YAExC,GAAG;AAET,MAAU,WAAY,EAAU;AACjC,UAAM;;IAER"}