typia 9.7.1 → 10.0.0-dev.20251107

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (424) hide show
  1. package/LICENSE +21 -21
  2. package/README.md +153 -153
  3. package/lib/AssertionGuard.d.mts +27 -25
  4. package/lib/AssertionGuard.d.ts +27 -25
  5. package/lib/CamelCase.d.mts +1 -1
  6. package/lib/CamelCase.d.ts +1 -1
  7. package/lib/IRandomGenerator.d.mts +44 -42
  8. package/lib/IRandomGenerator.d.ts +44 -42
  9. package/lib/IReadableURLSearchParams.d.mts +2 -2
  10. package/lib/IReadableURLSearchParams.d.ts +2 -2
  11. package/lib/PascalCase.d.mts +1 -1
  12. package/lib/PascalCase.d.ts +1 -1
  13. package/lib/Primitive.d.mts +20 -22
  14. package/lib/Primitive.d.ts +20 -22
  15. package/lib/Resolved.d.mts +16 -18
  16. package/lib/Resolved.d.ts +16 -18
  17. package/lib/SnakeCase.d.mts +3 -2
  18. package/lib/SnakeCase.d.ts +3 -2
  19. package/lib/TypeGuardError.d.mts +88 -61
  20. package/lib/TypeGuardError.d.ts +88 -61
  21. package/lib/TypeGuardError.js +40 -29
  22. package/lib/TypeGuardError.js.map +1 -1
  23. package/lib/TypeGuardError.mjs +70 -48
  24. package/lib/factories/MetadataCollection.js +4 -12
  25. package/lib/factories/MetadataCollection.js.map +1 -1
  26. package/lib/factories/MetadataCollection.mjs +4 -12
  27. package/lib/factories/MetadataCommentTagFactory.js +5 -15
  28. package/lib/factories/MetadataCommentTagFactory.js.map +1 -1
  29. package/lib/factories/MetadataCommentTagFactory.mjs +5 -15
  30. package/lib/factories/MetadataFactory.js +1 -3
  31. package/lib/factories/MetadataFactory.js.map +1 -1
  32. package/lib/factories/MetadataFactory.mjs +1 -3
  33. package/lib/factories/ProtobufFactory.js +2 -4
  34. package/lib/factories/ProtobufFactory.js.map +1 -1
  35. package/lib/factories/ProtobufFactory.mjs +2 -4
  36. package/lib/functional.d.mts +196 -195
  37. package/lib/functional.d.ts +196 -195
  38. package/lib/functional.js +18 -54
  39. package/lib/functional.js.map +1 -1
  40. package/lib/functional.mjs +18 -54
  41. package/lib/http.d.mts +303 -319
  42. package/lib/http.d.ts +303 -319
  43. package/lib/http.js +26 -78
  44. package/lib/http.js.map +1 -1
  45. package/lib/http.mjs +26 -78
  46. package/lib/internal/_ProtobufReader.d.mts +3 -9
  47. package/lib/internal/_ProtobufReader.d.ts +3 -9
  48. package/lib/internal/_ProtobufReader.js.map +1 -1
  49. package/lib/internal/_ProtobufReader.mjs +3 -9
  50. package/lib/internal/_ProtobufSizer.d.mts +4 -12
  51. package/lib/internal/_ProtobufSizer.d.ts +4 -12
  52. package/lib/internal/_ProtobufSizer.js.map +1 -1
  53. package/lib/internal/_ProtobufSizer.mjs +4 -12
  54. package/lib/internal/_ProtobufWriter.d.mts +5 -15
  55. package/lib/internal/_ProtobufWriter.d.ts +5 -15
  56. package/lib/internal/_ProtobufWriter.js.map +1 -1
  57. package/lib/internal/_ProtobufWriter.mjs +5 -15
  58. package/lib/internal/_jsonStringifyString.d.mts +4 -4
  59. package/lib/internal/_jsonStringifyString.d.ts +4 -4
  60. package/lib/internal/_jsonStringifyString.js +4 -4
  61. package/lib/internal/_jsonStringifyString.mjs +4 -4
  62. package/lib/json.d.mts +174 -195
  63. package/lib/json.d.ts +174 -195
  64. package/lib/json.js +16 -48
  65. package/lib/json.js.map +1 -1
  66. package/lib/json.mjs +16 -48
  67. package/lib/llm.d.mts +275 -192
  68. package/lib/llm.d.ts +275 -192
  69. package/lib/llm.js +4 -12
  70. package/lib/llm.js.map +1 -1
  71. package/lib/llm.mjs +4 -12
  72. package/lib/misc.d.mts +149 -172
  73. package/lib/misc.d.ts +149 -172
  74. package/lib/misc.js +17 -51
  75. package/lib/misc.js.map +1 -1
  76. package/lib/misc.mjs +17 -51
  77. package/lib/module.d.mts +263 -275
  78. package/lib/module.d.ts +263 -275
  79. package/lib/module.js +18 -54
  80. package/lib/module.js.map +1 -1
  81. package/lib/module.mjs +18 -54
  82. package/lib/notations.d.mts +153 -174
  83. package/lib/notations.d.ts +153 -174
  84. package/lib/notations.js +24 -72
  85. package/lib/notations.js.map +1 -1
  86. package/lib/notations.mjs +24 -72
  87. package/lib/programmers/FeatureProgrammer.d.mts +19 -41
  88. package/lib/programmers/FeatureProgrammer.d.ts +19 -41
  89. package/lib/programmers/FeatureProgrammer.js.map +1 -1
  90. package/lib/programmers/ImportProgrammer.js +3 -9
  91. package/lib/programmers/ImportProgrammer.js.map +1 -1
  92. package/lib/programmers/ImportProgrammer.mjs +3 -9
  93. package/lib/programmers/RandomProgrammer.js +6 -0
  94. package/lib/programmers/RandomProgrammer.js.map +1 -1
  95. package/lib/programmers/RandomProgrammer.mjs +6 -0
  96. package/lib/programmers/helpers/ProtobufWire.d.mts +13 -13
  97. package/lib/programmers/helpers/ProtobufWire.d.ts +13 -13
  98. package/lib/programmers/internal/check_array_length.js +2 -6
  99. package/lib/programmers/internal/check_array_length.js.map +1 -1
  100. package/lib/programmers/internal/check_array_length.mjs +2 -6
  101. package/lib/programmers/internal/check_bigint.js +2 -6
  102. package/lib/programmers/internal/check_bigint.js.map +1 -1
  103. package/lib/programmers/internal/check_bigint.mjs +2 -6
  104. package/lib/programmers/internal/check_dynamic_key.js +2 -6
  105. package/lib/programmers/internal/check_dynamic_key.js.map +1 -1
  106. package/lib/programmers/internal/check_dynamic_key.mjs +2 -6
  107. package/lib/programmers/internal/check_dynamic_properties.js +3 -9
  108. package/lib/programmers/internal/check_dynamic_properties.js.map +1 -1
  109. package/lib/programmers/internal/check_dynamic_properties.mjs +3 -9
  110. package/lib/programmers/internal/check_everything.js +1 -3
  111. package/lib/programmers/internal/check_everything.js.map +1 -1
  112. package/lib/programmers/internal/check_everything.mjs +1 -3
  113. package/lib/programmers/internal/check_native.js +2 -6
  114. package/lib/programmers/internal/check_native.js.map +1 -1
  115. package/lib/programmers/internal/check_native.mjs +2 -6
  116. package/lib/programmers/internal/check_number.js +2 -6
  117. package/lib/programmers/internal/check_number.js.map +1 -1
  118. package/lib/programmers/internal/check_number.mjs +2 -6
  119. package/lib/programmers/internal/check_object.js +2 -6
  120. package/lib/programmers/internal/check_object.js.map +1 -1
  121. package/lib/programmers/internal/check_object.mjs +2 -6
  122. package/lib/programmers/internal/check_string.js +2 -6
  123. package/lib/programmers/internal/check_string.js.map +1 -1
  124. package/lib/programmers/internal/check_string.mjs +2 -6
  125. package/lib/programmers/internal/check_template.js +1 -3
  126. package/lib/programmers/internal/check_template.js.map +1 -1
  127. package/lib/programmers/internal/check_template.mjs +1 -3
  128. package/lib/programmers/internal/check_union_array_like.js +1 -3
  129. package/lib/programmers/internal/check_union_array_like.js.map +1 -1
  130. package/lib/programmers/internal/check_union_array_like.mjs +1 -3
  131. package/lib/programmers/internal/decode_union_object.js +2 -6
  132. package/lib/programmers/internal/decode_union_object.js.map +1 -1
  133. package/lib/programmers/internal/decode_union_object.mjs +2 -6
  134. package/lib/programmers/internal/feature_object_entries.js +1 -3
  135. package/lib/programmers/internal/feature_object_entries.js.map +1 -1
  136. package/lib/programmers/internal/feature_object_entries.mjs +1 -3
  137. package/lib/programmers/internal/json_schema_escaped.js +2 -6
  138. package/lib/programmers/internal/json_schema_escaped.js.map +1 -1
  139. package/lib/programmers/internal/json_schema_escaped.mjs +2 -6
  140. package/lib/programmers/internal/json_schema_object.js +3 -9
  141. package/lib/programmers/internal/json_schema_object.js.map +1 -1
  142. package/lib/programmers/internal/json_schema_object.mjs +3 -9
  143. package/lib/programmers/internal/json_schema_station.d.mts +2 -2
  144. package/lib/programmers/internal/json_schema_station.d.ts +2 -2
  145. package/lib/programmers/internal/metadata_to_pattern.js +1 -3
  146. package/lib/programmers/internal/metadata_to_pattern.js.map +1 -1
  147. package/lib/programmers/internal/metadata_to_pattern.mjs +1 -3
  148. package/lib/programmers/internal/postfix_of_tuple.js +1 -3
  149. package/lib/programmers/internal/postfix_of_tuple.js.map +1 -1
  150. package/lib/programmers/internal/postfix_of_tuple.mjs +1 -3
  151. package/lib/programmers/internal/prune_object_properties.js +1 -3
  152. package/lib/programmers/internal/prune_object_properties.js.map +1 -1
  153. package/lib/programmers/internal/prune_object_properties.mjs +1 -3
  154. package/lib/programmers/internal/stringify_dynamic_properties.js +2 -6
  155. package/lib/programmers/internal/stringify_dynamic_properties.js.map +1 -1
  156. package/lib/programmers/internal/stringify_dynamic_properties.mjs +2 -6
  157. package/lib/programmers/internal/stringify_native.js +1 -3
  158. package/lib/programmers/internal/stringify_native.js.map +1 -1
  159. package/lib/programmers/internal/stringify_native.mjs +1 -3
  160. package/lib/programmers/internal/stringify_regular_properties.js +2 -6
  161. package/lib/programmers/internal/stringify_regular_properties.js.map +1 -1
  162. package/lib/programmers/internal/stringify_regular_properties.mjs +2 -6
  163. package/lib/programmers/internal/template_to_pattern.js +1 -3
  164. package/lib/programmers/internal/template_to_pattern.js.map +1 -1
  165. package/lib/programmers/internal/template_to_pattern.mjs +1 -3
  166. package/lib/programmers/internal/wrap_metadata_rest_tuple.js +1 -3
  167. package/lib/programmers/internal/wrap_metadata_rest_tuple.js.map +1 -1
  168. package/lib/programmers/internal/wrap_metadata_rest_tuple.mjs +1 -3
  169. package/lib/programmers/json/JsonStringifyProgrammer.js +2 -2
  170. package/lib/programmers/json/JsonStringifyProgrammer.js.map +1 -1
  171. package/lib/programmers/json/JsonStringifyProgrammer.mjs +2 -2
  172. package/lib/programmers/llm/LlmApplicationProgrammer.js +5 -1
  173. package/lib/programmers/llm/LlmApplicationProgrammer.js.map +1 -1
  174. package/lib/programmers/llm/LlmApplicationProgrammer.mjs +5 -1
  175. package/lib/programmers/llm/LlmSchemaProgrammer.js +1 -4
  176. package/lib/programmers/llm/LlmSchemaProgrammer.js.map +1 -1
  177. package/lib/programmers/llm/LlmSchemaProgrammer.mjs +1 -35
  178. package/lib/protobuf.d.mts +290 -297
  179. package/lib/protobuf.d.ts +290 -297
  180. package/lib/protobuf.js +17 -51
  181. package/lib/protobuf.js.map +1 -1
  182. package/lib/protobuf.mjs +17 -51
  183. package/lib/reflect.d.mts +2 -4
  184. package/lib/reflect.d.ts +2 -4
  185. package/lib/reflect.js +1 -3
  186. package/lib/reflect.js.map +1 -1
  187. package/lib/reflect.mjs +1 -3
  188. package/lib/schemas/json/IJsonApplication.d.mts +4 -4
  189. package/lib/schemas/json/IJsonApplication.d.ts +4 -4
  190. package/lib/schemas/json/IJsonSchemaCollection.d.mts +73 -56
  191. package/lib/schemas/json/IJsonSchemaCollection.d.ts +73 -56
  192. package/lib/schemas/json/IJsonSchemaUnit.d.mts +83 -70
  193. package/lib/schemas/json/IJsonSchemaUnit.d.ts +83 -70
  194. package/lib/schemas/metadata/Metadata.d.mts +1 -3
  195. package/lib/schemas/metadata/Metadata.d.ts +1 -3
  196. package/lib/schemas/metadata/Metadata.js +9 -27
  197. package/lib/schemas/metadata/Metadata.js.map +1 -1
  198. package/lib/schemas/metadata/Metadata.mjs +9 -27
  199. package/lib/schemas/metadata/MetadataAliasType.d.mts +1 -3
  200. package/lib/schemas/metadata/MetadataAliasType.d.ts +1 -3
  201. package/lib/schemas/metadata/MetadataAliasType.js +3 -9
  202. package/lib/schemas/metadata/MetadataAliasType.js.map +1 -1
  203. package/lib/schemas/metadata/MetadataAliasType.mjs +3 -9
  204. package/lib/schemas/metadata/MetadataApplication.d.mts +1 -3
  205. package/lib/schemas/metadata/MetadataApplication.d.ts +1 -3
  206. package/lib/schemas/metadata/MetadataApplication.js +2 -6
  207. package/lib/schemas/metadata/MetadataApplication.js.map +1 -1
  208. package/lib/schemas/metadata/MetadataApplication.mjs +2 -6
  209. package/lib/schemas/metadata/MetadataArray.d.mts +1 -3
  210. package/lib/schemas/metadata/MetadataArray.d.ts +1 -3
  211. package/lib/schemas/metadata/MetadataArray.js +1 -3
  212. package/lib/schemas/metadata/MetadataArray.js.map +1 -1
  213. package/lib/schemas/metadata/MetadataArray.mjs +1 -3
  214. package/lib/schemas/metadata/MetadataArrayType.d.mts +1 -3
  215. package/lib/schemas/metadata/MetadataArrayType.d.ts +1 -3
  216. package/lib/schemas/metadata/MetadataArrayType.js +3 -9
  217. package/lib/schemas/metadata/MetadataArrayType.js.map +1 -1
  218. package/lib/schemas/metadata/MetadataArrayType.mjs +3 -9
  219. package/lib/schemas/metadata/MetadataAtomic.js +1 -3
  220. package/lib/schemas/metadata/MetadataAtomic.js.map +1 -1
  221. package/lib/schemas/metadata/MetadataAtomic.mjs +1 -3
  222. package/lib/schemas/metadata/MetadataEscaped.d.mts +1 -3
  223. package/lib/schemas/metadata/MetadataEscaped.d.ts +1 -3
  224. package/lib/schemas/metadata/MetadataEscaped.js +3 -9
  225. package/lib/schemas/metadata/MetadataEscaped.js.map +1 -1
  226. package/lib/schemas/metadata/MetadataEscaped.mjs +3 -9
  227. package/lib/schemas/metadata/MetadataFunction.d.mts +1 -3
  228. package/lib/schemas/metadata/MetadataFunction.d.ts +1 -3
  229. package/lib/schemas/metadata/MetadataFunction.js +2 -6
  230. package/lib/schemas/metadata/MetadataFunction.js.map +1 -1
  231. package/lib/schemas/metadata/MetadataFunction.mjs +2 -6
  232. package/lib/schemas/metadata/MetadataObject.d.mts +1 -3
  233. package/lib/schemas/metadata/MetadataObject.d.ts +1 -3
  234. package/lib/schemas/metadata/MetadataObject.js +1 -3
  235. package/lib/schemas/metadata/MetadataObject.js.map +1 -1
  236. package/lib/schemas/metadata/MetadataObject.mjs +1 -3
  237. package/lib/schemas/metadata/MetadataObjectType.d.mts +1 -3
  238. package/lib/schemas/metadata/MetadataObjectType.d.ts +1 -3
  239. package/lib/schemas/metadata/MetadataObjectType.js +5 -15
  240. package/lib/schemas/metadata/MetadataObjectType.js.map +1 -1
  241. package/lib/schemas/metadata/MetadataObjectType.mjs +6 -18
  242. package/lib/schemas/metadata/MetadataParameter.js +1 -3
  243. package/lib/schemas/metadata/MetadataParameter.js.map +1 -1
  244. package/lib/schemas/metadata/MetadataParameter.mjs +1 -3
  245. package/lib/schemas/metadata/MetadataProperty.d.mts +1 -3
  246. package/lib/schemas/metadata/MetadataProperty.d.ts +1 -3
  247. package/lib/schemas/metadata/MetadataProperty.js +3 -9
  248. package/lib/schemas/metadata/MetadataProperty.js.map +1 -1
  249. package/lib/schemas/metadata/MetadataProperty.mjs +3 -9
  250. package/lib/schemas/metadata/MetadataTemplate.js +1 -3
  251. package/lib/schemas/metadata/MetadataTemplate.js.map +1 -1
  252. package/lib/schemas/metadata/MetadataTemplate.mjs +1 -3
  253. package/lib/schemas/metadata/MetadataTuple.d.mts +1 -3
  254. package/lib/schemas/metadata/MetadataTuple.d.ts +1 -3
  255. package/lib/schemas/metadata/MetadataTuple.js +2 -6
  256. package/lib/schemas/metadata/MetadataTuple.js.map +1 -1
  257. package/lib/schemas/metadata/MetadataTuple.mjs +2 -6
  258. package/lib/schemas/metadata/MetadataTupleType.js +2 -6
  259. package/lib/schemas/metadata/MetadataTupleType.js.map +1 -1
  260. package/lib/schemas/metadata/MetadataTupleType.mjs +3 -9
  261. package/lib/tags/Constant.d.mts +16 -16
  262. package/lib/tags/Constant.d.ts +16 -16
  263. package/lib/tags/ContentMediaType.d.mts +7 -7
  264. package/lib/tags/ContentMediaType.d.ts +7 -7
  265. package/lib/tags/Default.d.mts +19 -19
  266. package/lib/tags/Default.d.ts +19 -19
  267. package/lib/tags/Example.d.mts +18 -18
  268. package/lib/tags/Example.d.ts +18 -18
  269. package/lib/tags/Examples.d.mts +23 -23
  270. package/lib/tags/Examples.d.ts +23 -23
  271. package/lib/tags/ExclusiveMaximum.d.mts +8 -5
  272. package/lib/tags/ExclusiveMaximum.d.ts +8 -5
  273. package/lib/tags/ExclusiveMinimum.d.mts +8 -5
  274. package/lib/tags/ExclusiveMinimum.d.ts +8 -5
  275. package/lib/tags/Format.d.mts +12 -8
  276. package/lib/tags/Format.d.ts +12 -8
  277. package/lib/tags/JsonSchemaPlugin.d.mts +20 -18
  278. package/lib/tags/JsonSchemaPlugin.d.ts +20 -18
  279. package/lib/tags/MaxItems.d.mts +9 -9
  280. package/lib/tags/MaxItems.d.ts +9 -9
  281. package/lib/tags/MaxLength.d.mts +6 -5
  282. package/lib/tags/MaxLength.d.ts +6 -5
  283. package/lib/tags/Maximum.d.mts +9 -7
  284. package/lib/tags/Maximum.d.ts +9 -7
  285. package/lib/tags/MinItems.d.mts +9 -9
  286. package/lib/tags/MinItems.d.ts +9 -9
  287. package/lib/tags/MinLength.d.mts +6 -5
  288. package/lib/tags/MinLength.d.ts +6 -5
  289. package/lib/tags/Minimum.d.mts +9 -7
  290. package/lib/tags/Minimum.d.ts +9 -7
  291. package/lib/tags/MultipleOf.d.mts +10 -7
  292. package/lib/tags/MultipleOf.d.ts +10 -7
  293. package/lib/tags/Pattern.d.mts +7 -4
  294. package/lib/tags/Pattern.d.ts +7 -4
  295. package/lib/tags/Sequence.d.mts +19 -17
  296. package/lib/tags/Sequence.d.ts +19 -17
  297. package/lib/tags/TagBase.d.mts +21 -28
  298. package/lib/tags/TagBase.d.ts +21 -28
  299. package/lib/tags/Type.d.mts +12 -11
  300. package/lib/tags/Type.d.ts +12 -11
  301. package/lib/tags/UniqueItems.d.mts +10 -9
  302. package/lib/tags/UniqueItems.d.ts +10 -9
  303. package/lib/tags/internal/FormatCheatSheet.d.mts +1 -3
  304. package/lib/tags/internal/FormatCheatSheet.d.ts +1 -3
  305. package/lib/tags/internal/FormatCheatSheet.js +1 -3
  306. package/lib/tags/internal/FormatCheatSheet.js.map +1 -1
  307. package/lib/tags/internal/FormatCheatSheet.mjs +1 -3
  308. package/lib/transformers/ITransformOptions.d.mts +27 -19
  309. package/lib/transformers/ITransformOptions.d.ts +27 -19
  310. package/lib/transformers/ImportTransformer.js +5 -10
  311. package/lib/transformers/ImportTransformer.js.map +1 -1
  312. package/lib/transformers/ImportTransformer.mjs +5 -10
  313. package/lib/transformers/NoTransformConfigurationError.js +1 -3
  314. package/lib/transformers/NoTransformConfigurationError.js.map +1 -1
  315. package/lib/transformers/NoTransformConfigurationError.mjs +1 -3
  316. package/lib/transformers/features/llm/LlmApplicationTransformer.js +1 -3
  317. package/lib/transformers/features/llm/LlmApplicationTransformer.js.map +1 -1
  318. package/lib/transformers/features/llm/LlmApplicationTransformer.mjs +1 -3
  319. package/lib/typings/Equal.d.mts +6 -6
  320. package/lib/typings/Equal.d.ts +6 -6
  321. package/package.json +121 -120
  322. package/src/AssertionGuard.ts +41 -39
  323. package/src/CamelCase.ts +75 -75
  324. package/src/IRandomGenerator.ts +337 -335
  325. package/src/IReadableURLSearchParams.ts +9 -9
  326. package/src/PascalCase.ts +71 -71
  327. package/src/Primitive.ts +90 -92
  328. package/src/Resolved.ts +72 -74
  329. package/src/SnakeCase.ts +127 -126
  330. package/src/TypeGuardError.ts +216 -179
  331. package/src/factories/MetadataCollection.ts +270 -278
  332. package/src/factories/MetadataCommentTagFactory.ts +632 -648
  333. package/src/factories/MetadataFactory.ts +402 -404
  334. package/src/factories/ProtobufFactory.ts +873 -875
  335. package/src/functional.ts +705 -740
  336. package/src/http.ts +972 -1040
  337. package/src/internal/_ProtobufReader.ts +188 -194
  338. package/src/internal/_ProtobufSizer.ts +137 -145
  339. package/src/internal/_ProtobufWriter.ts +135 -145
  340. package/src/internal/_jsonStringifyString.ts +42 -42
  341. package/src/json.ts +643 -696
  342. package/src/llm.ts +615 -540
  343. package/src/misc.ts +594 -651
  344. package/src/module.ts +889 -937
  345. package/src/notations.ts +751 -820
  346. package/src/programmers/FeatureProgrammer.ts +605 -627
  347. package/src/programmers/ImportProgrammer.ts +179 -185
  348. package/src/programmers/RandomProgrammer.ts +1195 -1190
  349. package/src/programmers/helpers/ProtobufWire.ts +34 -34
  350. package/src/programmers/internal/check_array_length.ts +43 -47
  351. package/src/programmers/internal/check_bigint.ts +46 -50
  352. package/src/programmers/internal/check_dynamic_key.ts +197 -201
  353. package/src/programmers/internal/check_dynamic_properties.ts +231 -237
  354. package/src/programmers/internal/check_everything.ts +21 -23
  355. package/src/programmers/internal/check_native.ts +23 -27
  356. package/src/programmers/internal/check_number.ts +108 -112
  357. package/src/programmers/internal/check_object.ts +72 -78
  358. package/src/programmers/internal/check_string.ts +46 -50
  359. package/src/programmers/internal/check_template.ts +46 -48
  360. package/src/programmers/internal/check_union_array_like.ts +331 -335
  361. package/src/programmers/internal/decode_union_object.ts +110 -116
  362. package/src/programmers/internal/feature_object_entries.ts +59 -61
  363. package/src/programmers/internal/json_schema_escaped.ts +78 -82
  364. package/src/programmers/internal/json_schema_object.ts +150 -158
  365. package/src/programmers/internal/json_schema_station.ts +2 -2
  366. package/src/programmers/internal/metadata_to_pattern.ts +40 -42
  367. package/src/programmers/internal/postfix_of_tuple.ts +3 -5
  368. package/src/programmers/internal/prune_object_properties.ts +69 -71
  369. package/src/programmers/internal/stringify_dynamic_properties.ts +158 -162
  370. package/src/programmers/internal/stringify_native.ts +5 -7
  371. package/src/programmers/internal/stringify_regular_properties.ts +77 -81
  372. package/src/programmers/internal/template_to_pattern.ts +21 -23
  373. package/src/programmers/internal/wrap_metadata_rest_tuple.ts +21 -23
  374. package/src/programmers/json/JsonStringifyProgrammer.ts +1124 -1124
  375. package/src/programmers/llm/LlmApplicationProgrammer.ts +10 -1
  376. package/src/programmers/llm/LlmSchemaProgrammer.ts +2 -7
  377. package/src/protobuf.ts +820 -861
  378. package/src/reflect.ts +46 -50
  379. package/src/schemas/json/IJsonApplication.ts +77 -77
  380. package/src/schemas/json/IJsonSchemaCollection.ts +212 -195
  381. package/src/schemas/json/IJsonSchemaUnit.ts +263 -250
  382. package/src/schemas/metadata/IMetadataTypeTag.ts +14 -16
  383. package/src/schemas/metadata/Metadata.ts +669 -687
  384. package/src/schemas/metadata/MetadataAliasType.ts +57 -63
  385. package/src/schemas/metadata/MetadataApplication.ts +40 -44
  386. package/src/schemas/metadata/MetadataArray.ts +47 -49
  387. package/src/schemas/metadata/MetadataArrayType.ts +51 -57
  388. package/src/schemas/metadata/MetadataAtomic.ts +85 -87
  389. package/src/schemas/metadata/MetadataEscaped.ts +45 -51
  390. package/src/schemas/metadata/MetadataFunction.ts +45 -49
  391. package/src/schemas/metadata/MetadataObject.ts +46 -48
  392. package/src/schemas/metadata/MetadataObjectType.ts +137 -149
  393. package/src/schemas/metadata/MetadataParameter.ts +52 -54
  394. package/src/schemas/metadata/MetadataProperty.ts +53 -59
  395. package/src/schemas/metadata/MetadataTemplate.ts +78 -80
  396. package/src/schemas/metadata/MetadataTuple.ts +28 -32
  397. package/src/schemas/metadata/MetadataTupleType.ts +61 -67
  398. package/src/tags/Constant.ts +47 -47
  399. package/src/tags/ContentMediaType.ts +27 -27
  400. package/src/tags/Default.ts +52 -52
  401. package/src/tags/Example.ts +56 -56
  402. package/src/tags/Examples.ts +56 -56
  403. package/src/tags/ExclusiveMaximum.ts +44 -41
  404. package/src/tags/ExclusiveMinimum.ts +44 -41
  405. package/src/tags/Format.ts +78 -74
  406. package/src/tags/JsonSchemaPlugin.ts +36 -34
  407. package/src/tags/MaxItems.ts +31 -31
  408. package/src/tags/MaxLength.ts +25 -24
  409. package/src/tags/Maximum.ts +39 -37
  410. package/src/tags/MinItems.ts +31 -31
  411. package/src/tags/MinLength.ts +25 -24
  412. package/src/tags/Minimum.ts +39 -37
  413. package/src/tags/MultipleOf.ts +42 -39
  414. package/src/tags/Pattern.ts +49 -46
  415. package/src/tags/Sequence.ts +37 -35
  416. package/src/tags/TagBase.ts +102 -109
  417. package/src/tags/Type.ts +64 -63
  418. package/src/tags/UniqueItems.ts +34 -33
  419. package/src/tags/internal/FormatCheatSheet.ts +71 -73
  420. package/src/transformers/ITransformOptions.ts +70 -62
  421. package/src/transformers/ImportTransformer.ts +253 -258
  422. package/src/transformers/NoTransformConfigurationError.ts +16 -18
  423. package/src/transformers/features/llm/LlmApplicationTransformer.ts +224 -226
  424. package/src/typings/Equal.ts +18 -18
package/src/llm.ts CHANGED
@@ -1,540 +1,615 @@
1
- import { ILlmApplication, ILlmController, ILlmSchema } from "@samchon/openapi";
2
-
3
- import { NoTransformConfigurationError } from "./transformers/NoTransformConfigurationError";
4
-
5
- /**
6
- * > You must configure the generic argument `Class`.
7
- *
8
- * TypeScript functions to LLM function calling controller.
9
- *
10
- * Creates a controller of LLM (Large Language Model) function calling
11
- * from a TypeScript class or interface type containing the target functions to be
12
- * called by the LLM function calling feature. The returned controller contains
13
- * not only the {@link application} of {@link ILlmFunction function calling schemas},
14
- * but also the {@link ILlmController.execute executor} of the functions.
15
- *
16
- * If you put the returned {@link ILlmController} to the LLM provider like
17
- * [OpenAI (ChatGPT)](https://openai.com/), the LLM will automatically select the
18
- * proper function and fill its arguments from the conversation (maybe chatting text)
19
- * with user (human). And you can actually call the function by using
20
- * {@link ILlmController.execute} property. This is the concept of the LLM function
21
- * calling.
22
- *
23
- * Here is an example of using `typia.llm.controller()` function for AI agent
24
- * development of performing such AI function calling to mobile API classes
25
- * through this `typia` and external `@agentica` libraries.
26
- *
27
- * ```typescript
28
- * import { Agentica } from "@agentica/core";
29
- * import typia from "typia";
30
- *
31
- * const agentica = new Agentica({
32
- * model: "chatgpt",
33
- * vendor: {
34
- * api: new OpenAI({ apiKey: "********" }),
35
- * model: "gpt-4o-mini",
36
- * },
37
- * controllers: [
38
- * typia.llm.controller<ReactNativeFileSystem, "chatgpt">(
39
- * "filesystem",
40
- * new ReactNativeFileSystem(),
41
- * ),
42
- * typia.llm.controller<ReactNativeGallery, "chatgpt">(
43
- * "gallery",
44
- * new ReactNativeGallery(),
45
- * ),
46
- * ],
47
- * });
48
- * await agentica.conversate(
49
- * "Organize photo collection and sort them into appropriate folders.",
50
- * );
51
- * ```
52
- *
53
- * Here is the list of available `Model` types with their corresponding LLM schema.
54
- * Reading the following list, and determine the `Model` type considering the
55
- * characteristics of the target LLM provider.
56
- *
57
- * - LLM provider schemas
58
- * - `chatgpt`: [`IChatGptSchema`](https://samchon.github.io/openapi/api/types/IChatGptSchema-1.html)
59
- * - `claude`: [`IClaudeSchema`](https://samchon.github.io/openapi/api/types/IClaudeSchema-1.html)
60
- * - `deepseek`: [`IDeepSeekSchema`](https://samchon.github.io/openapi/api/types/IClaudeSchema-1.html)
61
- * - `gemini`: [`IGeminiSchema`](https://samchon.github.io/openapi/api/types/IGeminiSchema-1.html)
62
- * - `llama`: [`ILlamaSchema`](https://samchon.github.io/openapi/api/types/ILlamaSchema-1.html)
63
- * - Middle layer schemas
64
- * - `3.0`: [`ILlmSchemaV3`](https://samchon.github.io/openapi/api/types/ILlmSchemaV3-1.html)
65
- * - `3.1`: [`ILlmSchemaV3_1`](https://samchon.github.io/openapi/api/types/ILlmSchemaV3_1-1.html)
66
- *
67
- * @template Class Target class or interface type collecting the functions to call
68
- * @template Model LLM schema model
69
- * @template Config Configuration of LLM schema composition
70
- * @param name Identifier name of the controller
71
- * @param execute Executor instance
72
- * @param options Options for the LLM application construction
73
- * @returns Controller of LLM function calling
74
- * @reference https://wrtnlabs.io/agentica/docs/core/controller/typescript/
75
- * @author Jeongho Nam - https://github.com/samchon
76
- */
77
- export function controller(
78
- name: string,
79
- execute: object,
80
- options?: Partial<
81
- Pick<ILlmApplication.IOptions<any, any>, "separate" | "validate">
82
- >,
83
- ): never;
84
-
85
- /**
86
- * TypeScript functions to LLM function calling controller.
87
- *
88
- * Creates a controller of LLM (Large Language Model) function calling
89
- * from a TypeScript class or interface type containing the target functions to be
90
- * called by the LLM function calling feature. The returned controller contains
91
- * not only the {@link application} of {@link ILlmFunction function calling schemas},
92
- * but also the {@link ILlmController.execute executor} of the functions.
93
- *
94
- * If you put the returned {@link ILlmController} to the LLM provider like
95
- * [OpenAI (ChatGPT)](https://openai.com/), the LLM will automatically select the
96
- * proper function and fill its arguments from the conversation (maybe chatting text)
97
- * with user (human). And you can actually call the function by using
98
- * {@link ILlmController.execute} property. This is the concept of the LLM function
99
- * calling.
100
- *
101
- * Here is an example of using `typia.llm.controller()` function for AI agent
102
- * development of performing such AI function calling to mobile API classes
103
- * through this `typia` and external `@agentica` libraries.
104
- *
105
- * ```typescript
106
- * import { Agentica } from "@agentica/core";
107
- * import typia from "typia";
108
- *
109
- * const agentica = new Agentica({
110
- * model: "chatgpt",
111
- * vendor: {
112
- * api: new OpenAI({ apiKey: "********" }),
113
- * model: "gpt-4o-mini",
114
- * },
115
- * controllers: [
116
- * typia.llm.controller<ReactNativeFileSystem, "chatgpt">(
117
- * "filesystem",
118
- * new ReactNativeFileSystem(),
119
- * ),
120
- * typia.llm.controller<ReactNativeGallery, "chatgpt">(
121
- * "gallery",
122
- * new ReactNativeGallery(),
123
- * ),
124
- * ],
125
- * });
126
- * await agentica.conversate(
127
- * "Organize photo collection and sort them into appropriate folders.",
128
- * );
129
- * ```
130
- *
131
- * Here is the list of available `Model` types with their corresponding LLM schema.
132
- * Reading the following list, and determine the `Model` type considering the
133
- * characteristics of the target LLM provider.
134
- *
135
- * - LLM provider schemas
136
- * - `chatgpt`: [`IChatGptSchema`](https://samchon.github.io/openapi/api/types/IChatGptSchema-1.html)
137
- * - `claude`: [`IClaudeSchema`](https://samchon.github.io/openapi/api/types/IClaudeSchema-1.html)
138
- * - `deepseek`: [`IDeepSeekSchema`](https://samchon.github.io/openapi/api/types/IClaudeSchema-1.html)
139
- * - `gemini`: [`IGeminiSchema`](https://samchon.github.io/openapi/api/types/IGeminiSchema-1.html)
140
- * - `llama`: [`ILlamaSchema`](https://samchon.github.io/openapi/api/types/ILlamaSchema-1.html)
141
- * - Middle layer schemas
142
- * - `3.0`: [`ILlmSchemaV3`](https://samchon.github.io/openapi/api/types/ILlmSchemaV3-1.html)
143
- * - `3.1`: [`ILlmSchemaV3_1`](https://samchon.github.io/openapi/api/types/ILlmSchemaV3_1-1.html)
144
- *
145
- * @template Class Target class or interface type collecting the functions to call
146
- * @template Model LLM schema model
147
- * @template Config Configuration of LLM schema composition
148
- * @param name Identifier name of the controller
149
- * @param execute Executor instance
150
- * @param options Options for the LLM application construction
151
- * @returns Controller of LLM function calling
152
- * @reference https://wrtnlabs.io/agentica/docs/core/controller/typescript/
153
- * @author Jeongho Nam - https://github.com/samchon
154
- */
155
- export function controller<
156
- Class extends Record<string, any>,
157
- Model extends ILlmSchema.Model,
158
- Config extends Partial<
159
- ILlmSchema.ModelConfig[Model] & {
160
- /**
161
- * Whether to disallow superfluous properties or not.
162
- *
163
- * If configure as `true`, {@link validateEquals} function would be
164
- * used for validation feedback, which is more strict than
165
- * {@link validate} function.
166
- *
167
- * @default false
168
- */
169
- equals: boolean;
170
- }
171
- > = {},
172
- >(
173
- name: string,
174
- execute: Class,
175
- options?: Partial<
176
- Pick<ILlmApplication.IOptions<Model, Class>, "separate" | "validate">
177
- >,
178
- ): ILlmController<Model>;
179
-
180
- /**
181
- * @internal
182
- */
183
- export function controller(..._args: any[]): never {
184
- NoTransformConfigurationError("llm.controller");
185
- }
186
-
187
- /**
188
- * > You must configure the generic argument `Class`.
189
- *
190
- * TypeScript functions to LLM function calling application.
191
- *
192
- * Creates an application of LLM (Large Language Model) function calling application
193
- * from a TypeScript class or interface type containing the target functions to be
194
- * called by the LLM function calling feature.
195
- *
196
- * If you put the returned {@link ILlmApplication.functions} objects to the LLM provider
197
- * like [OpenAI (ChatGPT)](https://openai.com/), the LLM will automatically select the
198
- * proper function and fill its arguments from the conversation (maybe chatting text)
199
- * with user (human). This is the concept of the LLM function calling.
200
- *
201
- * By the way, there can be some parameters (or their nested properties) which must be
202
- * composed by human, not by LLM. File uploading feature or some sensitive information
203
- * like security keys (password) are the examples. In that case, you can separate the
204
- * function parameters to both LLM and human sides by configuring the
205
- * {@link ILlmApplication.IOptions.separate} property. The separated parameters are
206
- * assigned to the {@link ILlmFunction.separated} property.
207
- *
208
- * For reference, the actual function call execution is not by LLM, but by you.
209
- * When the LLM selects the proper function and fills the arguments, you just call
210
- * the function with the LLM prepared arguments. And then informs the return value to
211
- * the LLM by system prompt. The LLM will continue the next conversation based on
212
- * the return value.
213
- *
214
- * Additionally, if you've configured {@link ILlmApplication.IOptions.separate},
215
- * so that the parameters are separated to human and LLM sides, you can merge these
216
- * human and LLM sides' parameters into one through {@link HttpLlm.mergeParameters}
217
- * before the actual LLM function call execution.
218
- *
219
- * Here is the list of available `Model` types with their corresponding LLM schema.
220
- * Reading the following list, and determine the `Model` type considering the
221
- * characteristics of the target LLM provider.
222
- *
223
- * - LLM provider schemas
224
- * - `chatgpt`: [`IChatGptSchema`](https://github.com/samchon/openapi/blob/master/src/structures/IChatGptSchema.ts)
225
- * - `claude`: [`IClaudeSchema`](https://samchon.github.io/openapi/api/types/IClaudeSchema-1.html)
226
- * - `deepseek`: [`IDeepSeekSchema`](https://samchon.github.io/openapi/api/types/IClaudeSchema-1.html)
227
- * - `gemini`: [`IGeminiSchema`](https://samchon.github.io/openapi/api/types/IGeminiSchema-1.html)
228
- * - `llama`: [`ILlamaSchema`](https://samchon.github.io/openapi/api/types/ILlamaSchema-1.html)
229
- * - Middle layer schemas
230
- * - `3.0`: [`ILlmSchemaV3`](https://samchon.github.io/openapi/api/types/ILlmSchemaV3-1.html)
231
- * - `3.1`: [`ILlmSchemaV3_1`](https://samchon.github.io/openapi/api/types/ILlmSchemaV3_1-1.html)
232
- *
233
- * @template Class Target class or interface type collecting the functions to call
234
- * @template Model LLM schema model
235
- * @template Config Configuration of LLM schema composition
236
- * @param options Options for the LLM application construction
237
- * @returns Application of LLM function calling schemas
238
- * @reference https://platform.openai.com/docs/guides/function-calling
239
- * @author Jeongho Nam - https://github.com/samchon
240
- */
241
- export function application(
242
- options?: Partial<
243
- Pick<ILlmApplication.IOptions<any, any>, "separate" | "validate">
244
- >,
245
- ): never;
246
-
247
- /**
248
- * TypeScript functions to LLM function calling application.
249
- *
250
- * Creates an application of LLM (Large Language Model) function calling application
251
- * from a TypeScript class or interface type containing the target functions to be
252
- * called by the LLM function calling feature.
253
- *
254
- * If you put the returned {@link ILlmApplication.functions} objects to the LLM provider
255
- * like [OpenAI (ChatGPT)](https://openai.com/), the LLM will automatically select the
256
- * proper function and fill its arguments from the conversation (maybe chatting text)
257
- * with user (human). This is the concept of the LLM function calling.
258
- *
259
- * By the way, there can be some parameters (or their nested properties) which must be
260
- * composed by human, not by LLM. File uploading feature or some sensitive information
261
- * like security keys (password) are the examples. In that case, you can separate the
262
- * function parameters to both LLM and human sides by configuring the
263
- * {@link ILlmApplication.IOptions.separate} property. The separated parameters are
264
- * assigned to the {@link ILlmFunction.separated} property.
265
- *
266
- * For reference, the actual function call execution is not by LLM, but by you.
267
- * When the LLM selects the proper function and fills the arguments, you just call
268
- * the function with the LLM prepared arguments. And then informs the return value to
269
- * the LLM by system prompt. The LLM will continue the next conversation based on
270
- * the return value.
271
- *
272
- * Additionally, if you've configured {@link ILlmApplication.IOptions.separate},
273
- * so that the parameters are separated to human and LLM sides, you can merge these
274
- * human and LLM sides' parameters into one through {@link HttpLlm.mergeParameters}
275
- * before the actual LLM function call execution.
276
- *
277
- * Here is the list of available `Model` types with their corresponding LLM schema.
278
- * Reading the following list, and determine the `Model` type considering the
279
- * characteristics of the target LLM provider.
280
- *
281
- * - LLM provider schemas
282
- * - `chatgpt`: [`IChatGptSchema`](https://github.com/samchon/openapi/blob/master/src/structures/IChatGptSchema.ts)
283
- * - `claude`: [`IClaudeSchema`](https://samchon.github.io/openapi/api/types/IClaudeSchema-1.html)
284
- * - `deepseek`: [`IDeepSeekSchema`](https://samchon.github.io/openapi/api/types/IClaudeSchema-1.html)
285
- * - `gemini`: [`IGeminiSchema`](https://samchon.github.io/openapi/api/types/IGeminiSchema-1.html)
286
- * - `llama`: [`ILlamaSchema`](https://samchon.github.io/openapi/api/types/ILlamaSchema-1.html)
287
- * - Middle layer schemas
288
- * - `3.0`: [`ILlmSchemaV3`](https://samchon.github.io/openapi/api/types/ILlmSchemaV3-1.html)
289
- * - `3.1`: [`ILlmSchemaV3_1`](https://samchon.github.io/openapi/api/types/ILlmSchemaV3_1-1.html)
290
- *
291
- * @template Class Target class or interface type collecting the functions to call
292
- * @template Model LLM schema model
293
- * @template Config Configuration of LLM schema composition
294
- * @param options Options for the LLM application construction
295
- * @returns Application of LLM function calling schemas
296
- * @reference https://platform.openai.com/docs/guides/function-calling
297
- * @author Jeongho Nam - https://github.com/samchon
298
- */
299
- export function application<
300
- Class extends Record<string, any>,
301
- Model extends ILlmSchema.Model,
302
- Config extends Partial<
303
- {
304
- /**
305
- * Whether to disallow superfluous properties or not.
306
- *
307
- * If configure as `true`, {@link validateEquals} function would be
308
- * used for validation feedback, which is more strict than
309
- * {@link validate} function.
310
- *
311
- * @default false
312
- */
313
- equals: boolean;
314
- } & ILlmSchema.ModelConfig[Model]
315
- > = {},
316
- >(
317
- options?: Partial<
318
- Pick<ILlmApplication.IOptions<Model, Class>, "separate" | "validate">
319
- >,
320
- ): ILlmApplication<Model, Class>;
321
-
322
- /**
323
- * @internal
324
- */
325
- export function application(): never {
326
- NoTransformConfigurationError("llm.application");
327
- }
328
-
329
- /**
330
- * > You must configure the generic argument `Parameters`.
331
- *
332
- * TypeScript parameters to LLM parameters schema.
333
- *
334
- * Creates an LLM (Large Language Model) parameters schema, a type metadata that is used in the
335
- * [LLM function calling](https://platform.openai.com/docs/guides/function-calling)
336
- * and [LLM structured outputs](https://platform.openai.com/docs/guides/structured-outputs),
337
- * from a TypeScript parameters type.
338
- *
339
- * For references, LLM identifies only keyworded arguments, not positional arguments.
340
- * Therefore, the TypeScript parameters type must be an object type, and its properties
341
- * must be static. If dynamic properties are, it will be compilation error.
342
- *
343
- * Also, such parameters type can be utilized not only for the LLM function calling,
344
- * but also for the LLM structured outputs. The LLM structured outputs is a feature
345
- * that LLM (Large Language Model) can generate a structured output, not only a plain
346
- * text, by filling the parameters from the conversation (maybe chatting text) with user
347
- * (human).
348
- *
349
- * Here is the list of available `Model` types with their corresponding LLM schema.
350
- * Reading the following list, and determine the `Model` type considering the
351
- * characteristics of the target LLM provider.
352
- *
353
- * - LLM provider schemas
354
- * - `chatgpt`: [`IChatGptSchema`](https://github.com/samchon/openapi/blob/master/src/structures/IChatGptSchema.ts)
355
- * - `claude`: [`IClaudeSchema`](https://samchon.github.io/openapi/api/types/IClaudeSchema-1.html)
356
- * - `deepseek`: [`IDeepSeekSchema`](https://samchon.github.io/openapi/api/types/IClaudeSchema-1.html)
357
- * - `gemini`: [`IGeminiSchema`](https://samchon.github.io/openapi/api/types/IGeminiSchema-1.html)
358
- * - `llama`: [`ILlamaSchema`](https://samchon.github.io/openapi/api/types/ILlamaSchema-1.html)
359
- * - Middle layer schemas
360
- * - `3.0`: [`ILlmSchemaV3`](https://samchon.github.io/openapi/api/types/ILlmSchemaV3-1.html)
361
- * - `3.1`: [`ILlmSchemaV3_1`](https://samchon.github.io/openapi/api/types/ILlmSchemaV3_1-1.html)
362
- *
363
- * @template Parameters Target parameters type
364
- * @template Model LLM schema model
365
- * @template Config Configuration of LLM schema composition
366
- * @returns LLM parameters schema
367
- * @reference https://platform.openai.com/docs/guides/function-calling
368
- * @reference https://platform.openai.com/docs/guides/structured-outputs
369
- */
370
- export function parameters(): never;
371
-
372
- /**
373
- * TypeScript parameters to LLM parameters schema.
374
- *
375
- * Creates an LLM (Large Language Model) parameters schema, a type metadata that is used in the
376
- * [LLM function calling](https://platform.openai.com/docs/guides/function-calling)
377
- * and [LLM structured outputs](https://platform.openai.com/docs/guides/structured-outputs),
378
- * from a TypeScript parameters type.
379
- *
380
- * For references, LLM identifies only keyworded arguments, not positional arguments.
381
- * Therefore, the TypeScript parameters type must be an object type, and its properties
382
- * must be static. If dynamic properties are, it will be compilation error.
383
- *
384
- * Also, such parameters type can be utilized not only for the LLM function calling,
385
- * but also for the LLM structured outputs. The LLM structured outputs is a feature
386
- * that LLM (Large Language Model) can generate a structured output, not only a plain
387
- * text, by filling the parameters from the conversation (maybe chatting text) with user
388
- * (human).
389
- *
390
- * Here is the list of available `Model` types with their corresponding LLM schema.
391
- * Reading the following list, and determine the `Model` type considering the
392
- * characteristics of the target LLM provider.
393
- *
394
- * - LLM provider schemas
395
- * - `chatgpt`: [`IChatGptSchema`](https://github.com/samchon/openapi/blob/master/src/structures/IChatGptSchema.ts)
396
- * - `claude`: [`IClaudeSchema`](https://samchon.github.io/openapi/api/types/IClaudeSchema-1.html)
397
- * - `deepseek`: [`IDeepSeekSchema`](https://samchon.github.io/openapi/api/types/IClaudeSchema-1.html)
398
- * - `gemini`: [`IGeminiSchema`](https://samchon.github.io/openapi/api/types/IGeminiSchema-1.html)
399
- * - `llama`: [`ILlamaSchema`](https://samchon.github.io/openapi/api/types/ILlamaSchema-1.html)
400
- * - Middle layer schemas
401
- * - `3.0`: [`ILlmSchemaV3`](https://samchon.github.io/openapi/api/types/ILlmSchemaV3-1.html)
402
- * - `3.1`: [`ILlmSchemaV3_1`](https://samchon.github.io/openapi/api/types/ILlmSchemaV3_1-1.html)
403
- *
404
- * @template Parameters Target parameters type
405
- * @template Model LLM schema model
406
- * @template Config Configuration of LLM schema composition
407
- * @returns LLM parameters schema
408
- * @reference https://platform.openai.com/docs/guides/function-calling
409
- * @reference https://platform.openai.com/docs/guides/structured-outputs
410
- */
411
- export function parameters<
412
- Parameters extends Record<string, any>,
413
- Model extends ILlmSchema.Model,
414
- Config extends Partial<ILlmSchema.ModelConfig[Model]> = {},
415
- >(): ILlmSchema.ModelParameters[Model];
416
-
417
- /**
418
- * @internal
419
- */
420
- export function parameters(): never {
421
- NoTransformConfigurationError("llm.parameters");
422
- }
423
-
424
- /**
425
- * > You must configure the generic argument `T`.
426
- *
427
- * TypeScript type to LLM type schema.
428
- *
429
- * Creates an LLM (Large Language Model) type schema, a type metadata that is used in the
430
- * [LLM function calling](@reference https://platform.openai.com/docs/guides/function-calling),
431
- * from a TypeScript type.
432
- *
433
- * The returned {@link ILlmSchema} type will be specified by the `Model` argument,
434
- * and here is the list of available `Model` types with their corresponding LLM schema.
435
- * Reading the following list, and determine the `Model` type considering the
436
- * characteristics of the target LLM provider.
437
- *
438
- * - LLM provider schemas
439
- * - `chatgpt`: [`IChatGptSchema`](https://github.com/samchon/openapi/blob/master/src/structures/IChatGptSchema.ts)
440
- * - `claude`: [`IClaudeSchema`](https://samchon.github.io/openapi/api/types/IClaudeSchema-1.html)
441
- * - `deepseek`: [`IDeepSeekSchema`](https://samchon.github.io/openapi/api/types/IClaudeSchema-1.html)
442
- * - `gemini`: [`IGeminiSchema`](https://samchon.github.io/openapi/api/types/IGeminiSchema-1.html)
443
- * - `llama`: [`ILlamaSchema`](https://samchon.github.io/openapi/api/types/ILlamaSchema-1.html)
444
- * - Middle layer schemas
445
- * - `3.0`: [`ILlmSchemaV3`](https://samchon.github.io/openapi/api/types/ILlmSchemaV3-1.html)
446
- * - `3.1`: [`ILlmSchemaV3_1`](https://samchon.github.io/openapi/api/types/ILlmSchemaV3_1-1.html)
447
- *
448
- * If you actually want to perform the LLM function calling with TypeScript functions,
449
- * you can do it with the {@link application} function. Otherwise you hope to perform the
450
- * structured output, {@link parameters} function is better. Let's enjoy the LLM function calling
451
- * and structured output with the native TypeScript functions and types.
452
- *
453
- * > **What LLM function calling is?
454
- * >
455
- * > LLM (Large Language Model) selects property function and fill the arguments,
456
- * > but actual function call execution is not by LLM, but by you.
457
- * >
458
- * > In nowadays, most LLM (Large Language Model) like OpenAI are supporting
459
- * > "function calling" feature. The "function calling" means that LLM automatically selects
460
- * > a proper function and compose parameter values from the user's chatting text.
461
- * >
462
- * > When LLM selects the proper function and its arguments, you just call the function
463
- * > with the arguments. And then informs the return value to the LLM by system prompt,
464
- * > LLM will continue the next conversation based on the return value.
465
- *
466
- * @template T Target type
467
- * @template Model LLM schema model
468
- * @template Config Configuration of LLM schema composition
469
- * @returns LLM schema
470
- * @reference https://platform.openai.com/docs/guides/function-calling
471
- * @reference https://platform.openai.com/docs/guides/structured-outputs
472
- * @author Jeongho Nam - https://github.com/samchon
473
- */
474
- export function schema(): never;
475
-
476
- /**
477
- * TypeScript type to LLM type schema.
478
- *
479
- * Creates an LLM (Large Language Model) type schema, a type metadata that is used in the
480
- * [LLM function calling](@reference https://platform.openai.com/docs/guides/function-calling),
481
- * from a TypeScript type.
482
- *
483
- * The returned {@link ILlmSchema} type will be specified by the `Model` argument,
484
- * and here is the list of available `Model` types with their corresponding LLM schema:
485
- *
486
- * - LLM provider schemas
487
- * - `chatgpt`: [`IChatGptSchema`](https://github.com/samchon/openapi/blob/master/src/structures/IChatGptSchema.ts)
488
- * - `claude`: [`IClaudeSchema`](https://samchon.github.io/openapi/api/types/IClaudeSchema-1.html)
489
- * - `deepseek`: [`IDeepSeekSchema`](https://samchon.github.io/openapi/api/types/IClaudeSchema-1.html)
490
- * - `gemini`: [`IGeminiSchema`](https://samchon.github.io/openapi/api/types/IGeminiSchema-1.html)
491
- * - `llama`: [`ILlamaSchema`](https://samchon.github.io/openapi/api/types/ILlamaSchema-1.html)
492
- * - Middle layer schemas
493
- * - `3.0`: [`ILlmSchemaV3`](https://samchon.github.io/openapi/api/types/ILlmSchemaV3-1.html)
494
- * - `3.1`: [`ILlmSchemaV3_1`](https://samchon.github.io/openapi/api/types/ILlmSchemaV3_1-1.html)
495
- *
496
- * If you actually want to perform the LLM function calling with TypeScript functions,
497
- * you can do it with the {@link application} function. Otherwise you hope to perform the
498
- * structured output, {@link parameters} function is better. Let's enjoy the LLM function calling
499
- * and structured output with the native TypeScript functions and types.
500
- *
501
- * > **What LLM function calling is?
502
- * >
503
- * > LLM (Large Language Model) selects property function and fill the arguments,
504
- * > but actual function call execution is not by LLM, but by you.
505
- * >
506
- * > In nowadays, most LLM (Large Language Model) like OpenAI are supporting
507
- * > "function calling" feature. The "function calling" means that LLM automatically selects
508
- * > a proper function and compose parameter values from the user's chatting text.
509
- * >
510
- * > When LLM selects the proper function and its arguments, you just call the function
511
- * > with the arguments. And then informs the return value to the LLM by system prompt,
512
- * > LLM will continue the next conversation based on the return value.
513
- *
514
- * @template T Target type
515
- * @template Model LLM schema model
516
- * @template Config Configuration of LLM schema composition
517
- * @returns LLM schema
518
- * @reference https://platform.openai.com/docs/guides/function-calling
519
- * @reference https://platform.openai.com/docs/guides/structured-outputs
520
- * @author Jeongho Nam - https://github.com/samchon
521
- */
522
- export function schema<
523
- T,
524
- Model extends ILlmSchema.Model,
525
- Config extends Partial<ILlmSchema.ModelConfig[Model]> = {},
526
- >(
527
- ...$defs: Extract<
528
- ILlmSchema.ModelSchema[Model],
529
- { $ref: string }
530
- > extends never
531
- ? []
532
- : [Record<string, ILlmSchema.ModelSchema[Model]>]
533
- ): ILlmSchema.ModelSchema[Model];
534
-
535
- /**
536
- * @internal
537
- */
538
- export function schema(): never {
539
- NoTransformConfigurationError("llm.schema");
540
- }
1
+ import { ILlmApplication, ILlmController, ILlmSchema } from "@samchon/openapi";
2
+
3
+ import { NoTransformConfigurationError } from "./transformers/NoTransformConfigurationError";
4
+
5
+ /**
6
+ * > You must configure the generic argument `Class`.
7
+ *
8
+ * TypeScript functions to LLM function calling controller.
9
+ *
10
+ * Creates a controller of LLM (Large Language Model) function calling from a
11
+ * TypeScript class or interface type containing the target functions to be
12
+ * called by the LLM function calling feature. The returned controller contains
13
+ * not only the {@link application} of
14
+ * {@link ILlmFunction function calling schemas}, but also the
15
+ * {@link ILlmController.execute executor} of the functions.
16
+ *
17
+ * If you put the returned {@link ILlmController} to the LLM provider like
18
+ * [OpenAI (ChatGPT)](https://openai.com/), the LLM will automatically select
19
+ * the proper function and fill its arguments from the conversation (maybe
20
+ * chatting text) with user (human). And you can actually call the function by
21
+ * using {@link ILlmController.execute} property. This is the concept of the LLM
22
+ * function calling.
23
+ *
24
+ * Here is an example of using `typia.llm.controller()` function for AI agent
25
+ * development of performing such AI function calling to mobile API classes
26
+ * through this `typia` and external `@agentica` libraries.
27
+ *
28
+ * ```typescript
29
+ * import { Agentica } from "@agentica/core";
30
+ * import typia from "typia";
31
+ *
32
+ * const agentica = new Agentica({
33
+ * model: "chatgpt",
34
+ * vendor: {
35
+ * api: new OpenAI({ apiKey: "********" }),
36
+ * model: "gpt-4o-mini",
37
+ * },
38
+ * controllers: [
39
+ * typia.llm.controller<ReactNativeFileSystem, "chatgpt">(
40
+ * "filesystem",
41
+ * new ReactNativeFileSystem(),
42
+ * ),
43
+ * typia.llm.controller<ReactNativeGallery, "chatgpt">(
44
+ * "gallery",
45
+ * new ReactNativeGallery(),
46
+ * ),
47
+ * ],
48
+ * });
49
+ * await agentica.conversate(
50
+ * "Organize photo collection and sort them into appropriate folders.",
51
+ * );
52
+ * ```
53
+ *
54
+ * Here is the list of available `Model` types with their corresponding LLM
55
+ * schema. Reading the following list, and determine the `Model` type
56
+ * considering the characteristics of the target LLM provider.
57
+ *
58
+ * - LLM provider schemas
59
+ *
60
+ * - `chatgpt`:
61
+ * [`IChatGptSchema`](https://samchon.github.io/openapi/api/types/IChatGptSchema-1.html)
62
+ * - `claude`:
63
+ * [`IClaudeSchema`](https://samchon.github.io/openapi/api/types/IClaudeSchema-1.html)
64
+ * - `deepseek`:
65
+ * [`IDeepSeekSchema`](https://samchon.github.io/openapi/api/types/IClaudeSchema-1.html)
66
+ * - `gemini`:
67
+ * [`IGeminiSchema`](https://samchon.github.io/openapi/api/types/IGeminiSchema-1.html)
68
+ * - `llama`:
69
+ * [`ILlamaSchema`](https://samchon.github.io/openapi/api/types/ILlamaSchema-1.html)
70
+ * - Middle layer schemas
71
+ *
72
+ * - `3.0`: [`ILlmSchemaV3`](https://samchon.github.io/openapi/api/types/ILlmSchemaV3-1.html)
73
+ * - `3.1`: [`ILlmSchemaV3_1`](https://samchon.github.io/openapi/api/types/ILlmSchemaV3_1-1.html)
74
+ *
75
+ * @author Jeongho Nam - https://github.com/samchon
76
+ * @template Class Target class or interface type collecting the functions to
77
+ * call
78
+ * @template Model LLM schema model
79
+ * @template Config Configuration of LLM schema composition
80
+ * @param name Identifier name of the controller
81
+ * @param execute Executor instance
82
+ * @param options Options for the LLM application construction
83
+ * @returns Controller of LLM function calling
84
+ * @reference https://wrtnlabs.io/agentica/docs/core/controller/typescript/
85
+ */
86
+ export function controller(
87
+ name: string,
88
+ execute: object,
89
+ options?: Partial<
90
+ Pick<ILlmApplication.IOptions<any, any>, "separate" | "validate">
91
+ >,
92
+ ): never;
93
+
94
+ /**
95
+ * TypeScript functions to LLM function calling controller.
96
+ *
97
+ * Creates a controller of LLM (Large Language Model) function calling from a
98
+ * TypeScript class or interface type containing the target functions to be
99
+ * called by the LLM function calling feature. The returned controller contains
100
+ * not only the {@link application} of
101
+ * {@link ILlmFunction function calling schemas}, but also the
102
+ * {@link ILlmController.execute executor} of the functions.
103
+ *
104
+ * If you put the returned {@link ILlmController} to the LLM provider like
105
+ * [OpenAI (ChatGPT)](https://openai.com/), the LLM will automatically select
106
+ * the proper function and fill its arguments from the conversation (maybe
107
+ * chatting text) with user (human). And you can actually call the function by
108
+ * using {@link ILlmController.execute} property. This is the concept of the LLM
109
+ * function calling.
110
+ *
111
+ * Here is an example of using `typia.llm.controller()` function for AI agent
112
+ * development of performing such AI function calling to mobile API classes
113
+ * through this `typia` and external `@agentica` libraries.
114
+ *
115
+ * ```typescript
116
+ * import { Agentica } from "@agentica/core";
117
+ * import typia from "typia";
118
+ *
119
+ * const agentica = new Agentica({
120
+ * model: "chatgpt",
121
+ * vendor: {
122
+ * api: new OpenAI({ apiKey: "********" }),
123
+ * model: "gpt-4o-mini",
124
+ * },
125
+ * controllers: [
126
+ * typia.llm.controller<ReactNativeFileSystem, "chatgpt">(
127
+ * "filesystem",
128
+ * new ReactNativeFileSystem(),
129
+ * ),
130
+ * typia.llm.controller<ReactNativeGallery, "chatgpt">(
131
+ * "gallery",
132
+ * new ReactNativeGallery(),
133
+ * ),
134
+ * ],
135
+ * });
136
+ * await agentica.conversate(
137
+ * "Organize photo collection and sort them into appropriate folders.",
138
+ * );
139
+ * ```
140
+ *
141
+ * Here is the list of available `Model` types with their corresponding LLM
142
+ * schema. Reading the following list, and determine the `Model` type
143
+ * considering the characteristics of the target LLM provider.
144
+ *
145
+ * - LLM provider schemas
146
+ *
147
+ * - `chatgpt`:
148
+ * [`IChatGptSchema`](https://samchon.github.io/openapi/api/types/IChatGptSchema-1.html)
149
+ * - `claude`:
150
+ * [`IClaudeSchema`](https://samchon.github.io/openapi/api/types/IClaudeSchema-1.html)
151
+ * - `deepseek`:
152
+ * [`IDeepSeekSchema`](https://samchon.github.io/openapi/api/types/IClaudeSchema-1.html)
153
+ * - `gemini`:
154
+ * [`IGeminiSchema`](https://samchon.github.io/openapi/api/types/IGeminiSchema-1.html)
155
+ * - `llama`:
156
+ * [`ILlamaSchema`](https://samchon.github.io/openapi/api/types/ILlamaSchema-1.html)
157
+ * - Middle layer schemas
158
+ *
159
+ * - `3.0`: [`ILlmSchemaV3`](https://samchon.github.io/openapi/api/types/ILlmSchemaV3-1.html)
160
+ * - `3.1`: [`ILlmSchemaV3_1`](https://samchon.github.io/openapi/api/types/ILlmSchemaV3_1-1.html)
161
+ *
162
+ * @author Jeongho Nam - https://github.com/samchon
163
+ * @template Class Target class or interface type collecting the functions to
164
+ * call
165
+ * @template Model LLM schema model
166
+ * @template Config Configuration of LLM schema composition
167
+ * @param name Identifier name of the controller
168
+ * @param execute Executor instance
169
+ * @param options Options for the LLM application construction
170
+ * @returns Controller of LLM function calling
171
+ * @reference https://wrtnlabs.io/agentica/docs/core/controller/typescript/
172
+ */
173
+ export function controller<
174
+ Class extends Record<string, any>,
175
+ Model extends ILlmSchema.Model,
176
+ Config extends Partial<
177
+ ILlmSchema.ModelConfig[Model] & {
178
+ /**
179
+ * Whether to disallow superfluous properties or not.
180
+ *
181
+ * If configure as `true`, {@link validateEquals} function would be used
182
+ * for validation feedback, which is more strict than {@link validate}
183
+ * function.
184
+ *
185
+ * @default false
186
+ */
187
+ equals: boolean;
188
+ }
189
+ > = {},
190
+ >(
191
+ name: string,
192
+ execute: Class,
193
+ options?: Partial<
194
+ Pick<ILlmApplication.IOptions<Model, Class>, "separate" | "validate">
195
+ >,
196
+ ): ILlmController<Model>;
197
+
198
+ /** @internal */
199
+ export function controller(..._args: any[]): never {
200
+ NoTransformConfigurationError("llm.controller");
201
+ }
202
+
203
+ /**
204
+ * > You must configure the generic argument `Class`.
205
+ *
206
+ * TypeScript functions to LLM function calling application.
207
+ *
208
+ * Creates an application of LLM (Large Language Model) function calling
209
+ * application from a TypeScript class or interface type containing the target
210
+ * functions to be called by the LLM function calling feature.
211
+ *
212
+ * If you put the returned {@link ILlmApplication.functions} objects to the LLM
213
+ * provider like [OpenAI (ChatGPT)](https://openai.com/), the LLM will
214
+ * automatically select the proper function and fill its arguments from the
215
+ * conversation (maybe chatting text) with user (human). This is the concept of
216
+ * the LLM function calling.
217
+ *
218
+ * By the way, there can be some parameters (or their nested properties) which
219
+ * must be composed by human, not by LLM. File uploading feature or some
220
+ * sensitive information like security keys (password) are the examples. In that
221
+ * case, you can separate the function parameters to both LLM and human sides by
222
+ * configuring the {@link ILlmApplication.IOptions.separate} property. The
223
+ * separated parameters are assigned to the {@link ILlmFunction.separated}
224
+ * property.
225
+ *
226
+ * For reference, the actual function call execution is not by LLM, but by you.
227
+ * When the LLM selects the proper function and fills the arguments, you just
228
+ * call the function with the LLM prepared arguments. And then informs the
229
+ * return value to the LLM by system prompt. The LLM will continue the next
230
+ * conversation based on the return value.
231
+ *
232
+ * Additionally, if you've configured {@link ILlmApplication.IOptions.separate},
233
+ * so that the parameters are separated to human and LLM sides, you can merge
234
+ * these human and LLM sides' parameters into one through
235
+ * {@link HttpLlm.mergeParameters} before the actual LLM function call
236
+ * execution.
237
+ *
238
+ * Here is the list of available `Model` types with their corresponding LLM
239
+ * schema. Reading the following list, and determine the `Model` type
240
+ * considering the characteristics of the target LLM provider.
241
+ *
242
+ * - LLM provider schemas
243
+ *
244
+ * - `chatgpt`:
245
+ * [`IChatGptSchema`](https://github.com/samchon/openapi/blob/master/src/structures/IChatGptSchema.ts)
246
+ * - `claude`:
247
+ * [`IClaudeSchema`](https://samchon.github.io/openapi/api/types/IClaudeSchema-1.html)
248
+ * - `deepseek`:
249
+ * [`IDeepSeekSchema`](https://samchon.github.io/openapi/api/types/IClaudeSchema-1.html)
250
+ * - `gemini`:
251
+ * [`IGeminiSchema`](https://samchon.github.io/openapi/api/types/IGeminiSchema-1.html)
252
+ * - `llama`:
253
+ * [`ILlamaSchema`](https://samchon.github.io/openapi/api/types/ILlamaSchema-1.html)
254
+ * - Middle layer schemas
255
+ *
256
+ * - `3.0`: [`ILlmSchemaV3`](https://samchon.github.io/openapi/api/types/ILlmSchemaV3-1.html)
257
+ * - `3.1`: [`ILlmSchemaV3_1`](https://samchon.github.io/openapi/api/types/ILlmSchemaV3_1-1.html)
258
+ *
259
+ * @author Jeongho Nam - https://github.com/samchon
260
+ * @template Class Target class or interface type collecting the functions to
261
+ * call
262
+ * @template Model LLM schema model
263
+ * @template Config Configuration of LLM schema composition
264
+ * @param options Options for the LLM application construction
265
+ * @returns Application of LLM function calling schemas
266
+ * @reference https://platform.openai.com/docs/guides/function-calling
267
+ */
268
+ export function application(
269
+ options?: Partial<
270
+ Pick<ILlmApplication.IOptions<any, any>, "separate" | "validate">
271
+ >,
272
+ ): never;
273
+
274
+ /**
275
+ * TypeScript functions to LLM function calling application.
276
+ *
277
+ * Creates an application of LLM (Large Language Model) function calling
278
+ * application from a TypeScript class or interface type containing the target
279
+ * functions to be called by the LLM function calling feature.
280
+ *
281
+ * If you put the returned {@link ILlmApplication.functions} objects to the LLM
282
+ * provider like [OpenAI (ChatGPT)](https://openai.com/), the LLM will
283
+ * automatically select the proper function and fill its arguments from the
284
+ * conversation (maybe chatting text) with user (human). This is the concept of
285
+ * the LLM function calling.
286
+ *
287
+ * By the way, there can be some parameters (or their nested properties) which
288
+ * must be composed by human, not by LLM. File uploading feature or some
289
+ * sensitive information like security keys (password) are the examples. In that
290
+ * case, you can separate the function parameters to both LLM and human sides by
291
+ * configuring the {@link ILlmApplication.IOptions.separate} property. The
292
+ * separated parameters are assigned to the {@link ILlmFunction.separated}
293
+ * property.
294
+ *
295
+ * For reference, the actual function call execution is not by LLM, but by you.
296
+ * When the LLM selects the proper function and fills the arguments, you just
297
+ * call the function with the LLM prepared arguments. And then informs the
298
+ * return value to the LLM by system prompt. The LLM will continue the next
299
+ * conversation based on the return value.
300
+ *
301
+ * Additionally, if you've configured {@link ILlmApplication.IOptions.separate},
302
+ * so that the parameters are separated to human and LLM sides, you can merge
303
+ * these human and LLM sides' parameters into one through
304
+ * {@link HttpLlm.mergeParameters} before the actual LLM function call
305
+ * execution.
306
+ *
307
+ * Here is the list of available `Model` types with their corresponding LLM
308
+ * schema. Reading the following list, and determine the `Model` type
309
+ * considering the characteristics of the target LLM provider.
310
+ *
311
+ * - LLM provider schemas
312
+ *
313
+ * - `chatgpt`:
314
+ * [`IChatGptSchema`](https://github.com/samchon/openapi/blob/master/src/structures/IChatGptSchema.ts)
315
+ * - `claude`:
316
+ * [`IClaudeSchema`](https://samchon.github.io/openapi/api/types/IClaudeSchema-1.html)
317
+ * - `deepseek`:
318
+ * [`IDeepSeekSchema`](https://samchon.github.io/openapi/api/types/IClaudeSchema-1.html)
319
+ * - `gemini`:
320
+ * [`IGeminiSchema`](https://samchon.github.io/openapi/api/types/IGeminiSchema-1.html)
321
+ * - `llama`:
322
+ * [`ILlamaSchema`](https://samchon.github.io/openapi/api/types/ILlamaSchema-1.html)
323
+ * - Middle layer schemas
324
+ *
325
+ * - `3.0`: [`ILlmSchemaV3`](https://samchon.github.io/openapi/api/types/ILlmSchemaV3-1.html)
326
+ * - `3.1`: [`ILlmSchemaV3_1`](https://samchon.github.io/openapi/api/types/ILlmSchemaV3_1-1.html)
327
+ *
328
+ * @author Jeongho Nam - https://github.com/samchon
329
+ * @template Class Target class or interface type collecting the functions to
330
+ * call
331
+ * @template Model LLM schema model
332
+ * @template Config Configuration of LLM schema composition
333
+ * @param options Options for the LLM application construction
334
+ * @returns Application of LLM function calling schemas
335
+ * @reference https://platform.openai.com/docs/guides/function-calling
336
+ */
337
+ export function application<
338
+ Class extends Record<string, any>,
339
+ Model extends ILlmSchema.Model,
340
+ Config extends Partial<
341
+ {
342
+ /**
343
+ * Whether to disallow superfluous properties or not.
344
+ *
345
+ * If configure as `true`, {@link validateEquals} function would be used
346
+ * for validation feedback, which is more strict than {@link validate}
347
+ * function.
348
+ *
349
+ * @default false
350
+ */
351
+ equals: boolean;
352
+ } & ILlmSchema.ModelConfig[Model]
353
+ > = {},
354
+ >(
355
+ options?: Partial<
356
+ Pick<ILlmApplication.IOptions<Model, Class>, "separate" | "validate">
357
+ >,
358
+ ): ILlmApplication<Model, Class>;
359
+
360
+ /** @internal */
361
+ export function application(): never {
362
+ NoTransformConfigurationError("llm.application");
363
+ }
364
+
365
+ /**
366
+ * > You must configure the generic argument `Parameters`.
367
+ *
368
+ * TypeScript parameters to LLM parameters schema.
369
+ *
370
+ * Creates an LLM (Large Language Model) parameters schema, a type metadata that
371
+ * is used in the [LLM function
372
+ * calling](https://platform.openai.com/docs/guides/function-calling) and [LLM
373
+ * structured
374
+ * outputs](https://platform.openai.com/docs/guides/structured-outputs), from a
375
+ * TypeScript parameters type.
376
+ *
377
+ * For references, LLM identifies only keyworded arguments, not positional
378
+ * arguments. Therefore, the TypeScript parameters type must be an object type,
379
+ * and its properties must be static. If dynamic properties are, it will be
380
+ * compilation error.
381
+ *
382
+ * Also, such parameters type can be utilized not only for the LLM function
383
+ * calling, but also for the LLM structured outputs. The LLM structured outputs
384
+ * is a feature that LLM (Large Language Model) can generate a structured
385
+ * output, not only a plain text, by filling the parameters from the
386
+ * conversation (maybe chatting text) with user (human).
387
+ *
388
+ * Here is the list of available `Model` types with their corresponding LLM
389
+ * schema. Reading the following list, and determine the `Model` type
390
+ * considering the characteristics of the target LLM provider.
391
+ *
392
+ * - LLM provider schemas
393
+ *
394
+ * - `chatgpt`:
395
+ * [`IChatGptSchema`](https://github.com/samchon/openapi/blob/master/src/structures/IChatGptSchema.ts)
396
+ * - `claude`:
397
+ * [`IClaudeSchema`](https://samchon.github.io/openapi/api/types/IClaudeSchema-1.html)
398
+ * - `deepseek`:
399
+ * [`IDeepSeekSchema`](https://samchon.github.io/openapi/api/types/IClaudeSchema-1.html)
400
+ * - `gemini`:
401
+ * [`IGeminiSchema`](https://samchon.github.io/openapi/api/types/IGeminiSchema-1.html)
402
+ * - `llama`:
403
+ * [`ILlamaSchema`](https://samchon.github.io/openapi/api/types/ILlamaSchema-1.html)
404
+ * - Middle layer schemas
405
+ *
406
+ * - `3.0`: [`ILlmSchemaV3`](https://samchon.github.io/openapi/api/types/ILlmSchemaV3-1.html)
407
+ * - `3.1`: [`ILlmSchemaV3_1`](https://samchon.github.io/openapi/api/types/ILlmSchemaV3_1-1.html)
408
+ *
409
+ * @template Parameters Target parameters type
410
+ * @template Model LLM schema model
411
+ * @template Config Configuration of LLM schema composition
412
+ * @returns LLM parameters schema
413
+ * @reference https://platform.openai.com/docs/guides/function-calling
414
+ * @reference https://platform.openai.com/docs/guides/structured-outputs
415
+ */
416
+ export function parameters(): never;
417
+
418
+ /**
419
+ * TypeScript parameters to LLM parameters schema.
420
+ *
421
+ * Creates an LLM (Large Language Model) parameters schema, a type metadata that
422
+ * is used in the [LLM function
423
+ * calling](https://platform.openai.com/docs/guides/function-calling) and [LLM
424
+ * structured
425
+ * outputs](https://platform.openai.com/docs/guides/structured-outputs), from a
426
+ * TypeScript parameters type.
427
+ *
428
+ * For references, LLM identifies only keyworded arguments, not positional
429
+ * arguments. Therefore, the TypeScript parameters type must be an object type,
430
+ * and its properties must be static. If dynamic properties are, it will be
431
+ * compilation error.
432
+ *
433
+ * Also, such parameters type can be utilized not only for the LLM function
434
+ * calling, but also for the LLM structured outputs. The LLM structured outputs
435
+ * is a feature that LLM (Large Language Model) can generate a structured
436
+ * output, not only a plain text, by filling the parameters from the
437
+ * conversation (maybe chatting text) with user (human).
438
+ *
439
+ * Here is the list of available `Model` types with their corresponding LLM
440
+ * schema. Reading the following list, and determine the `Model` type
441
+ * considering the characteristics of the target LLM provider.
442
+ *
443
+ * - LLM provider schemas
444
+ *
445
+ * - `chatgpt`:
446
+ * [`IChatGptSchema`](https://github.com/samchon/openapi/blob/master/src/structures/IChatGptSchema.ts)
447
+ * - `claude`:
448
+ * [`IClaudeSchema`](https://samchon.github.io/openapi/api/types/IClaudeSchema-1.html)
449
+ * - `deepseek`:
450
+ * [`IDeepSeekSchema`](https://samchon.github.io/openapi/api/types/IClaudeSchema-1.html)
451
+ * - `gemini`:
452
+ * [`IGeminiSchema`](https://samchon.github.io/openapi/api/types/IGeminiSchema-1.html)
453
+ * - `llama`:
454
+ * [`ILlamaSchema`](https://samchon.github.io/openapi/api/types/ILlamaSchema-1.html)
455
+ * - Middle layer schemas
456
+ *
457
+ * - `3.0`: [`ILlmSchemaV3`](https://samchon.github.io/openapi/api/types/ILlmSchemaV3-1.html)
458
+ * - `3.1`: [`ILlmSchemaV3_1`](https://samchon.github.io/openapi/api/types/ILlmSchemaV3_1-1.html)
459
+ *
460
+ * @template Parameters Target parameters type
461
+ * @template Model LLM schema model
462
+ * @template Config Configuration of LLM schema composition
463
+ * @returns LLM parameters schema
464
+ * @reference https://platform.openai.com/docs/guides/function-calling
465
+ * @reference https://platform.openai.com/docs/guides/structured-outputs
466
+ */
467
+ export function parameters<
468
+ Parameters extends Record<string, any>,
469
+ Model extends ILlmSchema.Model,
470
+ Config extends Partial<ILlmSchema.ModelConfig[Model]> = {},
471
+ >(): ILlmSchema.ModelParameters[Model];
472
+
473
+ /** @internal */
474
+ export function parameters(): never {
475
+ NoTransformConfigurationError("llm.parameters");
476
+ }
477
+
478
+ /**
479
+ * > You must configure the generic argument `T`.
480
+ *
481
+ * TypeScript type to LLM type schema.
482
+ *
483
+ * Creates an LLM (Large Language Model) type schema, a type metadata that is
484
+ * used in the [LLM function calling](@reference
485
+ * https://platform.openai.com/docs/guides/function-calling), from a TypeScript
486
+ * type.
487
+ *
488
+ * The returned {@link ILlmSchema} type will be specified by the `Model`
489
+ * argument, and here is the list of available `Model` types with their
490
+ * corresponding LLM schema. Reading the following list, and determine the
491
+ * `Model` type considering the characteristics of the target LLM provider.
492
+ *
493
+ * - LLM provider schemas
494
+ *
495
+ * - `chatgpt`:
496
+ * [`IChatGptSchema`](https://github.com/samchon/openapi/blob/master/src/structures/IChatGptSchema.ts)
497
+ * - `claude`:
498
+ * [`IClaudeSchema`](https://samchon.github.io/openapi/api/types/IClaudeSchema-1.html)
499
+ * - `deepseek`:
500
+ * [`IDeepSeekSchema`](https://samchon.github.io/openapi/api/types/IClaudeSchema-1.html)
501
+ * - `gemini`:
502
+ * [`IGeminiSchema`](https://samchon.github.io/openapi/api/types/IGeminiSchema-1.html)
503
+ * - `llama`:
504
+ * [`ILlamaSchema`](https://samchon.github.io/openapi/api/types/ILlamaSchema-1.html)
505
+ * - Middle layer schemas
506
+ *
507
+ * - `3.0`: [`ILlmSchemaV3`](https://samchon.github.io/openapi/api/types/ILlmSchemaV3-1.html)
508
+ * - `3.1`: [`ILlmSchemaV3_1`](https://samchon.github.io/openapi/api/types/ILlmSchemaV3_1-1.html)
509
+ *
510
+ * If you actually want to perform the LLM function calling with TypeScript
511
+ * functions, you can do it with the {@link application} function. Otherwise you
512
+ * hope to perform the structured output, {@link parameters} function is better.
513
+ * Let's enjoy the LLM function calling and structured output with the native
514
+ * TypeScript functions and types.
515
+ *
516
+ * > **What LLM function calling is?
517
+ *
518
+ * > LLM (Large Language Model) selects property function and fill the arguments,
519
+ * > but actual function call execution is not by LLM, but by you.
520
+ *
521
+ * > In nowadays, most LLM (Large Language Model) like OpenAI are supporting
522
+ * > "function calling" feature. The "function calling" means that LLM
523
+ * > automatically selects a proper function and compose parameter values from the
524
+ * > user's chatting text.
525
+ *
526
+ * > When LLM selects the proper function and its arguments, you just call the
527
+ * > function with the arguments. And then informs the return value to the LLM by
528
+ * > system prompt, LLM will continue the next conversation based on the return
529
+ * > value.
530
+ *
531
+ * @author Jeongho Nam - https://github.com/samchon
532
+ * @template T Target type
533
+ * @template Model LLM schema model
534
+ * @template Config Configuration of LLM schema composition
535
+ * @returns LLM schema
536
+ * @reference https://platform.openai.com/docs/guides/function-calling
537
+ * @reference https://platform.openai.com/docs/guides/structured-outputs
538
+ */
539
+ export function schema(): never;
540
+
541
+ /**
542
+ * TypeScript type to LLM type schema.
543
+ *
544
+ * Creates an LLM (Large Language Model) type schema, a type metadata that is
545
+ * used in the [LLM function calling](@reference
546
+ * https://platform.openai.com/docs/guides/function-calling), from a TypeScript
547
+ * type.
548
+ *
549
+ * The returned {@link ILlmSchema} type will be specified by the `Model`
550
+ * argument, and here is the list of available `Model` types with their
551
+ * corresponding LLM schema:
552
+ *
553
+ * - LLM provider schemas
554
+ *
555
+ * - `chatgpt`:
556
+ * [`IChatGptSchema`](https://github.com/samchon/openapi/blob/master/src/structures/IChatGptSchema.ts)
557
+ * - `claude`:
558
+ * [`IClaudeSchema`](https://samchon.github.io/openapi/api/types/IClaudeSchema-1.html)
559
+ * - `deepseek`:
560
+ * [`IDeepSeekSchema`](https://samchon.github.io/openapi/api/types/IClaudeSchema-1.html)
561
+ * - `gemini`:
562
+ * [`IGeminiSchema`](https://samchon.github.io/openapi/api/types/IGeminiSchema-1.html)
563
+ * - `llama`:
564
+ * [`ILlamaSchema`](https://samchon.github.io/openapi/api/types/ILlamaSchema-1.html)
565
+ * - Middle layer schemas
566
+ *
567
+ * - `3.0`: [`ILlmSchemaV3`](https://samchon.github.io/openapi/api/types/ILlmSchemaV3-1.html)
568
+ * - `3.1`: [`ILlmSchemaV3_1`](https://samchon.github.io/openapi/api/types/ILlmSchemaV3_1-1.html)
569
+ *
570
+ * If you actually want to perform the LLM function calling with TypeScript
571
+ * functions, you can do it with the {@link application} function. Otherwise you
572
+ * hope to perform the structured output, {@link parameters} function is better.
573
+ * Let's enjoy the LLM function calling and structured output with the native
574
+ * TypeScript functions and types.
575
+ *
576
+ * > **What LLM function calling is?
577
+ *
578
+ * > LLM (Large Language Model) selects property function and fill the arguments,
579
+ * > but actual function call execution is not by LLM, but by you.
580
+ *
581
+ * > In nowadays, most LLM (Large Language Model) like OpenAI are supporting
582
+ * > "function calling" feature. The "function calling" means that LLM
583
+ * > automatically selects a proper function and compose parameter values from the
584
+ * > user's chatting text.
585
+ *
586
+ * > When LLM selects the proper function and its arguments, you just call the
587
+ * > function with the arguments. And then informs the return value to the LLM by
588
+ * > system prompt, LLM will continue the next conversation based on the return
589
+ * > value.
590
+ *
591
+ * @author Jeongho Nam - https://github.com/samchon
592
+ * @template T Target type
593
+ * @template Model LLM schema model
594
+ * @template Config Configuration of LLM schema composition
595
+ * @returns LLM schema
596
+ * @reference https://platform.openai.com/docs/guides/function-calling
597
+ * @reference https://platform.openai.com/docs/guides/structured-outputs
598
+ */
599
+ export function schema<
600
+ T,
601
+ Model extends ILlmSchema.Model,
602
+ Config extends Partial<ILlmSchema.ModelConfig[Model]> = {},
603
+ >(
604
+ ...$defs: Extract<
605
+ ILlmSchema.ModelSchema[Model],
606
+ { $ref: string }
607
+ > extends never
608
+ ? []
609
+ : [Record<string, ILlmSchema.ModelSchema[Model]>]
610
+ ): ILlmSchema.ModelSchema[Model];
611
+
612
+ /** @internal */
613
+ export function schema(): never {
614
+ NoTransformConfigurationError("llm.schema");
615
+ }