{"version":3,"file":"writer.cjs","names":["LLM","fields?: WriterInput","prompt: string","options: this[\"ParsedCallOptions\"]","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        // eslint-disable-next-line @typescript-eslint/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,0CAA2B;CACrD,OAAO,UAAU;AACf,SAAO;CACR;CAED,IAAI,aAAoD;AACtD,SAAO;GACL,QAAQ;GACR,OAAO;EACR;CACF;CAED,IAAI,aAAoD;AACtD,SAAO;GACL,QAAQ;GACR,OAAO;EACR;CACF;CAED,kBAAkB;CAElB;CAEA;CAEA,QAAQ;CAER;CAEA;CAEA;CAEA;CAEA;CAEA;CAEA;CAEA;CAEA;CAEA,YAAYC,QAAsB;EAChC,MAAM,UAAU,CAAE,EAAC;EAEnB,MAAM,SAAS,QAAQ,iEAAiC,iBAAiB;EACzE,MAAM,QAAQ,QAAQ,gEAAgC,gBAAgB;AAEtE,MAAI,CAAC,OACH,OAAM,IAAI,MACR;AAIJ,MAAI,CAAC,MACH,OAAM,IAAI,MACR;EAIJ,KAAK,SAAS;EACd,KAAK,QAAQ,OAAO,UAAU,WAAW,SAAS,OAAO,GAAG,GAAG;EAC/D,KAAK,QAAQ,QAAQ,SAAS,KAAK;EACnC,KAAK,cAAc,QAAQ,eAAe,KAAK;EAC/C,KAAK,YAAY,QAAQ,aAAa,KAAK;EAC3C,KAAK,YAAY,QAAQ,aAAa,KAAK;EAC3C,KAAK,SAAS,QAAQ,UAAU,KAAK;EACrC,KAAK,mBAAmB,QAAQ,oBAAoB,KAAK;EACzD,KAAK,WAAW,QAAQ,YAAY,KAAK;EACzC,KAAK,IAAI,QAAQ,KAAK,KAAK;EAC3B,KAAK,kBAAkB,QAAQ,mBAAmB,KAAK;EACvD,KAAK,OAAO,QAAQ,QAAQ,KAAK;CAClC;CAED,WAAW;AACT,SAAO;CACR;;CAGD,MAAM,MACJC,QACAC,SACiB;EACjB,MAAM,MAAM,IAAIC,6BAAa;GAC3B,UAAU,EACR,QAAQ,KAAK,OACd;GACD,gBAAgB,KAAK;EACtB;AAED,SAAO,KAAK,OAAO,gBAAgB,EAAE,QAAQ,QAAQ,OAAQ,GAAE,YAAY;AACzE,OAAI;IACF,MAAM,MAAM,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;KACZ;KACD,SAAS,KAAK;IACf,EAAC;AACF,WACE,IAAI,oBAAoB,UAAU,GAAG,QAAQ;GAEhD,SAAQ,GAAG;IAET,EAAU,WAAY,EAAU;AACjC,UAAM;GACP;EACF,EAAC;CACH;AACF"}