UNPKG

@langchain/core

Version:
1 lines 4.1 kB
{"version":3,"file":"utils.cjs","names":[],"sources":["../../src/structured_query/utils.ts"],"sourcesContent":["/**\n * Checks if the provided argument is an object and not an array.\n */\n// oxlint-disable-next-line @typescript-eslint/no-explicit-any\nexport function isObject(obj: any): obj is object {\n return obj && typeof obj === \"object\" && !Array.isArray(obj);\n}\n\n/**\n * Checks if a provided filter is empty. The filter can be a function, an\n * object, a string, or undefined.\n */\nexport function isFilterEmpty(\n // oxlint-disable-next-line @typescript-eslint/no-explicit-any\n filter: ((q: any) => any) | object | string | undefined\n): filter is undefined {\n if (!filter) return true;\n // for Milvus\n if (typeof filter === \"string\" && filter.length > 0) {\n return false;\n }\n if (typeof filter === \"function\") {\n return false;\n }\n return isObject(filter) && Object.keys(filter).length === 0;\n}\n\n/**\n * Checks if the provided value is an integer.\n */\nexport function isInt(value: unknown): boolean {\n if (typeof value === \"number\") {\n return value % 1 === 0;\n } else if (typeof value === \"string\") {\n const numberValue = parseInt(value, 10);\n return (\n !Number.isNaN(numberValue) &&\n numberValue % 1 === 0 &&\n numberValue.toString() === value\n );\n }\n\n return false;\n}\n\n/**\n * Checks if the provided value is a floating-point number.\n */\nexport function isFloat(value: unknown): boolean {\n if (typeof value === \"number\") {\n return value % 1 !== 0;\n } else if (typeof value === \"string\") {\n const numberValue = parseFloat(value);\n return (\n !Number.isNaN(numberValue) &&\n numberValue % 1 !== 0 &&\n numberValue.toString() === value\n );\n }\n\n return false;\n}\n\n/**\n * Checks if the provided value is a string that cannot be parsed into a\n * number.\n */\nexport function isString(value: unknown): boolean {\n return (\n typeof value === \"string\" &&\n (Number.isNaN(parseFloat(value)) || parseFloat(value).toString() !== value)\n );\n}\n\n/**\n * Checks if the provided value is a boolean.\n */\nexport function isBoolean(value: unknown): boolean {\n return typeof value === \"boolean\";\n}\n\n/**\n * Casts a value that might be string or number to actual string or number.\n * Since LLM might return back an integer/float as a string, we need to cast\n * it back to a number, as many vector databases can't handle number as string\n * values as a comparator.\n */\nexport function castValue(input: unknown): string | number | boolean {\n let value;\n if (isString(input)) {\n value = input as string;\n } else if (isInt(input)) {\n value = parseInt(input as string, 10);\n } else if (isFloat(input)) {\n value = parseFloat(input as string);\n } else if (isBoolean(input)) {\n value = Boolean(input);\n } else {\n throw new Error(\"Unsupported value type\");\n }\n\n return value;\n}\n"],"mappings":";;;;AAIA,SAAgB,SAAS,KAAyB;CAChD,OAAO,OAAO,OAAO,QAAQ,YAAY,CAAC,MAAM,QAAQ,GAAG;AAC7D;;;;;AAMA,SAAgB,cAEd,QACqB;CACrB,IAAI,CAAC,QAAQ,OAAO;CAEpB,IAAI,OAAO,WAAW,YAAY,OAAO,SAAS,GAChD,OAAO;CAET,IAAI,OAAO,WAAW,YACpB,OAAO;CAET,OAAO,SAAS,MAAM,KAAK,OAAO,KAAK,MAAM,CAAC,CAAC,WAAW;AAC5D;;;;AAKA,SAAgB,MAAM,OAAyB;CAC7C,IAAI,OAAO,UAAU,UACnB,OAAO,QAAQ,MAAM;MAChB,IAAI,OAAO,UAAU,UAAU;EACpC,MAAM,cAAc,SAAS,OAAO,EAAE;EACtC,OACE,CAAC,OAAO,MAAM,WAAW,KACzB,cAAc,MAAM,KACpB,YAAY,SAAS,MAAM;CAE/B;CAEA,OAAO;AACT;;;;AAKA,SAAgB,QAAQ,OAAyB;CAC/C,IAAI,OAAO,UAAU,UACnB,OAAO,QAAQ,MAAM;MAChB,IAAI,OAAO,UAAU,UAAU;EACpC,MAAM,cAAc,WAAW,KAAK;EACpC,OACE,CAAC,OAAO,MAAM,WAAW,KACzB,cAAc,MAAM,KACpB,YAAY,SAAS,MAAM;CAE/B;CAEA,OAAO;AACT;;;;;AAMA,SAAgB,SAAS,OAAyB;CAChD,OACE,OAAO,UAAU,aAChB,OAAO,MAAM,WAAW,KAAK,CAAC,KAAK,WAAW,KAAK,CAAC,CAAC,SAAS,MAAM;AAEzE;;;;AAKA,SAAgB,UAAU,OAAyB;CACjD,OAAO,OAAO,UAAU;AAC1B;;;;;;;AAQA,SAAgB,UAAU,OAA2C;CACnE,IAAI;CACJ,IAAI,SAAS,KAAK,GAChB,QAAQ;MACH,IAAI,MAAM,KAAK,GACpB,QAAQ,SAAS,OAAiB,EAAE;MAC/B,IAAI,QAAQ,KAAK,GACtB,QAAQ,WAAW,KAAe;MAC7B,IAAI,UAAU,KAAK,GACxB,QAAQ,QAAQ,KAAK;MAErB,MAAM,IAAI,MAAM,wBAAwB;CAG1C,OAAO;AACT"}