@jjlmoya/utils-developer 1.4.0 → 1.6.0
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.
- package/package.json +2 -1
- package/src/category/i18n/de.ts +34 -0
- package/src/category/i18n/id.ts +34 -0
- package/src/category/i18n/it.ts +34 -0
- package/src/category/i18n/ja.ts +34 -0
- package/src/category/i18n/ko.ts +34 -0
- package/src/category/i18n/nl.ts +34 -0
- package/src/category/i18n/pl.ts +34 -0
- package/src/category/i18n/pt.ts +34 -0
- package/src/category/i18n/ru.ts +34 -0
- package/src/category/i18n/sv.ts +34 -0
- package/src/category/i18n/tr.ts +34 -0
- package/src/category/i18n/zh.ts +34 -0
- package/src/category/index.ts +13 -1
- package/src/tests/faq_count.test.ts +1 -1
- package/src/tests/i18n_coverage.test.ts +36 -0
- package/src/tests/locale_completeness.test.ts +2 -2
- package/src/tests/slug_language_code_format.test.ts +25 -0
- package/src/tests/slug_uniqueness.test.ts +87 -0
- package/src/tool/aspectRatio/i18n/de.ts +177 -0
- package/src/tool/aspectRatio/i18n/id.ts +177 -0
- package/src/tool/aspectRatio/i18n/it.ts +177 -0
- package/src/tool/aspectRatio/i18n/ja.ts +178 -0
- package/src/tool/aspectRatio/i18n/ko.ts +178 -0
- package/src/tool/aspectRatio/i18n/nl.ts +178 -0
- package/src/tool/aspectRatio/i18n/pl.ts +177 -0
- package/src/tool/aspectRatio/i18n/pt.ts +177 -0
- package/src/tool/aspectRatio/i18n/ru.ts +177 -0
- package/src/tool/aspectRatio/i18n/sv.ts +177 -0
- package/src/tool/aspectRatio/i18n/tr.ts +177 -0
- package/src/tool/aspectRatio/i18n/zh.ts +178 -0
- package/src/tool/aspectRatio/index.ts +15 -7
- package/src/tool/calculadoraTiempoDatos/i18n/de.ts +150 -0
- package/src/tool/calculadoraTiempoDatos/i18n/id.ts +150 -0
- package/src/tool/calculadoraTiempoDatos/i18n/it.ts +150 -0
- package/src/tool/calculadoraTiempoDatos/i18n/ja.ts +151 -0
- package/src/tool/calculadoraTiempoDatos/i18n/ko.ts +151 -0
- package/src/tool/calculadoraTiempoDatos/i18n/nl.ts +150 -0
- package/src/tool/calculadoraTiempoDatos/i18n/pl.ts +150 -0
- package/src/tool/calculadoraTiempoDatos/i18n/pt.ts +150 -0
- package/src/tool/calculadoraTiempoDatos/i18n/ru.ts +151 -0
- package/src/tool/calculadoraTiempoDatos/i18n/sv.ts +150 -0
- package/src/tool/calculadoraTiempoDatos/i18n/tr.ts +150 -0
- package/src/tool/calculadoraTiempoDatos/i18n/zh.ts +151 -0
- package/src/tool/calculadoraTiempoDatos/index.ts +15 -7
- package/src/tool/colorConverter/i18n/de.ts +126 -0
- package/src/tool/colorConverter/i18n/id.ts +126 -0
- package/src/tool/colorConverter/i18n/it.ts +126 -0
- package/src/tool/colorConverter/i18n/ja.ts +127 -0
- package/src/tool/colorConverter/i18n/ko.ts +127 -0
- package/src/tool/colorConverter/i18n/nl.ts +126 -0
- package/src/tool/colorConverter/i18n/pl.ts +126 -0
- package/src/tool/colorConverter/i18n/pt.ts +126 -0
- package/src/tool/colorConverter/i18n/ru.ts +126 -0
- package/src/tool/colorConverter/i18n/sv.ts +126 -0
- package/src/tool/colorConverter/i18n/tr.ts +126 -0
- package/src/tool/colorConverter/i18n/zh.ts +127 -0
- package/src/tool/colorConverter/index.ts +15 -7
- package/src/tool/conversorExcelCsvHtml/i18n/de.ts +129 -0
- package/src/tool/conversorExcelCsvHtml/i18n/id.ts +129 -0
- package/src/tool/conversorExcelCsvHtml/i18n/it.ts +129 -0
- package/src/tool/conversorExcelCsvHtml/i18n/ja.ts +130 -0
- package/src/tool/conversorExcelCsvHtml/i18n/ko.ts +130 -0
- package/src/tool/conversorExcelCsvHtml/i18n/nl.ts +129 -0
- package/src/tool/conversorExcelCsvHtml/i18n/pl.ts +129 -0
- package/src/tool/conversorExcelCsvHtml/i18n/pt.ts +129 -0
- package/src/tool/conversorExcelCsvHtml/i18n/ru.ts +129 -0
- package/src/tool/conversorExcelCsvHtml/i18n/sv.ts +129 -0
- package/src/tool/conversorExcelCsvHtml/i18n/tr.ts +129 -0
- package/src/tool/conversorExcelCsvHtml/i18n/zh.ts +130 -0
- package/src/tool/conversorExcelCsvHtml/index.ts +15 -7
- package/src/tool/cronGenerator/i18n/de.ts +192 -0
- package/src/tool/cronGenerator/i18n/es.ts +1 -0
- package/src/tool/cronGenerator/i18n/fr.ts +2 -1
- package/src/tool/cronGenerator/i18n/id.ts +192 -0
- package/src/tool/cronGenerator/i18n/it.ts +192 -0
- package/src/tool/cronGenerator/i18n/ja.ts +192 -0
- package/src/tool/cronGenerator/i18n/ko.ts +192 -0
- package/src/tool/cronGenerator/i18n/nl.ts +192 -0
- package/src/tool/cronGenerator/i18n/pl.ts +192 -0
- package/src/tool/cronGenerator/i18n/pt.ts +192 -0
- package/src/tool/cronGenerator/i18n/ru.ts +192 -0
- package/src/tool/cronGenerator/i18n/sv.ts +192 -0
- package/src/tool/cronGenerator/i18n/tr.ts +192 -0
- package/src/tool/cronGenerator/i18n/zh.ts +192 -0
- package/src/tool/cronGenerator/index.ts +15 -7
- package/src/tool/cssSpecificityCalculator/i18n/de.ts +168 -0
- package/src/tool/cssSpecificityCalculator/i18n/id.ts +168 -0
- package/src/tool/cssSpecificityCalculator/i18n/it.ts +168 -0
- package/src/tool/cssSpecificityCalculator/i18n/ja.ts +169 -0
- package/src/tool/cssSpecificityCalculator/i18n/ko.ts +169 -0
- package/src/tool/cssSpecificityCalculator/i18n/nl.ts +168 -0
- package/src/tool/cssSpecificityCalculator/i18n/pl.ts +168 -0
- package/src/tool/cssSpecificityCalculator/i18n/pt.ts +168 -0
- package/src/tool/cssSpecificityCalculator/i18n/ru.ts +168 -0
- package/src/tool/cssSpecificityCalculator/i18n/sv.ts +168 -0
- package/src/tool/cssSpecificityCalculator/i18n/tr.ts +168 -0
- package/src/tool/cssSpecificityCalculator/i18n/zh.ts +169 -0
- package/src/tool/cssSpecificityCalculator/index.ts +15 -7
- package/src/tool/cssToInlineConverter/i18n/de.ts +160 -0
- package/src/tool/cssToInlineConverter/i18n/id.ts +160 -0
- package/src/tool/cssToInlineConverter/i18n/it.ts +160 -0
- package/src/tool/cssToInlineConverter/i18n/ja.ts +161 -0
- package/src/tool/cssToInlineConverter/i18n/ko.ts +161 -0
- package/src/tool/cssToInlineConverter/i18n/nl.ts +160 -0
- package/src/tool/cssToInlineConverter/i18n/pl.ts +160 -0
- package/src/tool/cssToInlineConverter/i18n/pt.ts +160 -0
- package/src/tool/cssToInlineConverter/i18n/ru.ts +160 -0
- package/src/tool/cssToInlineConverter/i18n/sv.ts +160 -0
- package/src/tool/cssToInlineConverter/i18n/tr.ts +160 -0
- package/src/tool/cssToInlineConverter/i18n/zh.ts +161 -0
- package/src/tool/cssToInlineConverter/index.ts +15 -7
- package/src/tool/duplicateCssRemover/i18n/de.ts +167 -0
- package/src/tool/duplicateCssRemover/i18n/id.ts +167 -0
- package/src/tool/duplicateCssRemover/i18n/it.ts +167 -0
- package/src/tool/duplicateCssRemover/i18n/ja.ts +168 -0
- package/src/tool/duplicateCssRemover/i18n/ko.ts +168 -0
- package/src/tool/duplicateCssRemover/i18n/nl.ts +167 -0
- package/src/tool/duplicateCssRemover/i18n/pl.ts +167 -0
- package/src/tool/duplicateCssRemover/i18n/pt.ts +167 -0
- package/src/tool/duplicateCssRemover/i18n/ru.ts +167 -0
- package/src/tool/duplicateCssRemover/i18n/sv.ts +167 -0
- package/src/tool/duplicateCssRemover/i18n/tr.ts +167 -0
- package/src/tool/duplicateCssRemover/i18n/zh.ts +168 -0
- package/src/tool/duplicateCssRemover/index.ts +15 -7
- package/src/tool/generadorSecurityTxt/i18n/de.ts +174 -0
- package/src/tool/generadorSecurityTxt/i18n/id.ts +174 -0
- package/src/tool/generadorSecurityTxt/i18n/it.ts +174 -0
- package/src/tool/generadorSecurityTxt/i18n/ja.ts +174 -0
- package/src/tool/generadorSecurityTxt/i18n/ko.ts +174 -0
- package/src/tool/generadorSecurityTxt/i18n/nl.ts +174 -0
- package/src/tool/generadorSecurityTxt/i18n/pl.ts +174 -0
- package/src/tool/generadorSecurityTxt/i18n/pt.ts +174 -0
- package/src/tool/generadorSecurityTxt/i18n/ru.ts +174 -0
- package/src/tool/generadorSecurityTxt/i18n/sv.ts +174 -0
- package/src/tool/generadorSecurityTxt/i18n/tr.ts +174 -0
- package/src/tool/generadorSecurityTxt/i18n/zh.ts +174 -0
- package/src/tool/generadorSecurityTxt/index.ts +15 -7
- package/src/tool/hashGenerator/i18n/de.ts +119 -0
- package/src/tool/hashGenerator/i18n/id.ts +119 -0
- package/src/tool/hashGenerator/i18n/it.ts +118 -0
- package/src/tool/hashGenerator/i18n/ja.ts +119 -0
- package/src/tool/hashGenerator/i18n/ko.ts +119 -0
- package/src/tool/hashGenerator/i18n/nl.ts +119 -0
- package/src/tool/hashGenerator/i18n/pl.ts +118 -0
- package/src/tool/hashGenerator/i18n/pt.ts +118 -0
- package/src/tool/hashGenerator/i18n/ru.ts +119 -0
- package/src/tool/hashGenerator/i18n/sv.ts +119 -0
- package/src/tool/hashGenerator/i18n/tr.ts +118 -0
- package/src/tool/hashGenerator/i18n/zh.ts +119 -0
- package/src/tool/hashGenerator/index.ts +15 -7
- package/src/tool/inspectorCertificadosSsl/i18n/de.ts +214 -0
- package/src/tool/inspectorCertificadosSsl/i18n/id.ts +215 -0
- package/src/tool/inspectorCertificadosSsl/i18n/it.ts +214 -0
- package/src/tool/inspectorCertificadosSsl/i18n/ja.ts +215 -0
- package/src/tool/inspectorCertificadosSsl/i18n/ko.ts +215 -0
- package/src/tool/inspectorCertificadosSsl/i18n/nl.ts +215 -0
- package/src/tool/inspectorCertificadosSsl/i18n/pl.ts +215 -0
- package/src/tool/inspectorCertificadosSsl/i18n/pt.ts +214 -0
- package/src/tool/inspectorCertificadosSsl/i18n/ru.ts +215 -0
- package/src/tool/inspectorCertificadosSsl/i18n/sv.ts +215 -0
- package/src/tool/inspectorCertificadosSsl/i18n/tr.ts +215 -0
- package/src/tool/inspectorCertificadosSsl/i18n/zh.ts +215 -0
- package/src/tool/inspectorCertificadosSsl/index.ts +24 -0
- package/src/tool/jsonFormatter/i18n/de.ts +157 -0
- package/src/tool/jsonFormatter/i18n/es.ts +1 -0
- package/src/tool/jsonFormatter/i18n/fr.ts +2 -1
- package/src/tool/jsonFormatter/i18n/id.ts +157 -0
- package/src/tool/jsonFormatter/i18n/it.ts +156 -0
- package/src/tool/jsonFormatter/i18n/ja.ts +157 -0
- package/src/tool/jsonFormatter/i18n/ko.ts +157 -0
- package/src/tool/jsonFormatter/i18n/nl.ts +157 -0
- package/src/tool/jsonFormatter/i18n/pl.ts +156 -0
- package/src/tool/jsonFormatter/i18n/pt.ts +156 -0
- package/src/tool/jsonFormatter/i18n/ru.ts +157 -0
- package/src/tool/jsonFormatter/i18n/sv.ts +157 -0
- package/src/tool/jsonFormatter/i18n/tr.ts +157 -0
- package/src/tool/jsonFormatter/i18n/zh.ts +157 -0
- package/src/tool/jsonFormatter/index.ts +15 -7
- package/src/tool/keycode/i18n/de.ts +161 -0
- package/src/tool/keycode/i18n/es.ts +1 -0
- package/src/tool/keycode/i18n/fr.ts +2 -1
- package/src/tool/keycode/i18n/id.ts +161 -0
- package/src/tool/keycode/i18n/it.ts +161 -0
- package/src/tool/keycode/i18n/ja.ts +161 -0
- package/src/tool/keycode/i18n/ko.ts +161 -0
- package/src/tool/keycode/i18n/nl.ts +161 -0
- package/src/tool/keycode/i18n/pl.ts +161 -0
- package/src/tool/keycode/i18n/pt.ts +160 -0
- package/src/tool/keycode/i18n/ru.ts +160 -0
- package/src/tool/keycode/i18n/sv.ts +160 -0
- package/src/tool/keycode/i18n/tr.ts +160 -0
- package/src/tool/keycode/i18n/zh.ts +161 -0
- package/src/tool/keycode/index.ts +15 -7
- package/src/tool/llmCostCalculator/i18n/de.ts +166 -0
- package/src/tool/llmCostCalculator/i18n/fr.ts +2 -1
- package/src/tool/llmCostCalculator/i18n/id.ts +166 -0
- package/src/tool/llmCostCalculator/i18n/it.ts +166 -0
- package/src/tool/llmCostCalculator/i18n/ja.ts +166 -0
- package/src/tool/llmCostCalculator/i18n/ko.ts +166 -0
- package/src/tool/llmCostCalculator/i18n/nl.ts +166 -0
- package/src/tool/llmCostCalculator/i18n/pl.ts +165 -0
- package/src/tool/llmCostCalculator/i18n/pt.ts +165 -0
- package/src/tool/llmCostCalculator/i18n/ru.ts +165 -0
- package/src/tool/llmCostCalculator/i18n/sv.ts +165 -0
- package/src/tool/llmCostCalculator/i18n/tr.ts +165 -0
- package/src/tool/llmCostCalculator/i18n/zh.ts +166 -0
- package/src/tool/llmCostCalculator/index.ts +24 -0
- package/src/tool/mobileMockupGenerator/i18n/de.ts +121 -0
- package/src/tool/mobileMockupGenerator/i18n/id.ts +121 -0
- package/src/tool/mobileMockupGenerator/i18n/it.ts +121 -0
- package/src/tool/mobileMockupGenerator/i18n/ja.ts +122 -0
- package/src/tool/mobileMockupGenerator/i18n/ko.ts +122 -0
- package/src/tool/mobileMockupGenerator/i18n/nl.ts +121 -0
- package/src/tool/mobileMockupGenerator/i18n/pl.ts +31 -0
- package/src/tool/mobileMockupGenerator/i18n/pt.ts +121 -0
- package/src/tool/mobileMockupGenerator/i18n/ru.ts +121 -0
- package/src/tool/mobileMockupGenerator/i18n/sv.ts +121 -0
- package/src/tool/mobileMockupGenerator/i18n/tr.ts +121 -0
- package/src/tool/mobileMockupGenerator/i18n/zh.ts +122 -0
- package/src/tool/mobileMockupGenerator/index.ts +24 -0
- package/src/tool/musicalTypography/i18n/de.ts +179 -0
- package/src/tool/musicalTypography/i18n/id.ts +179 -0
- package/src/tool/musicalTypography/i18n/it.ts +179 -0
- package/src/tool/musicalTypography/i18n/ja.ts +180 -0
- package/src/tool/musicalTypography/i18n/ko.ts +180 -0
- package/src/tool/musicalTypography/i18n/nl.ts +179 -0
- package/src/tool/musicalTypography/i18n/pl.ts +179 -0
- package/src/tool/musicalTypography/i18n/pt.ts +101 -0
- package/src/tool/musicalTypography/i18n/ru.ts +47 -0
- package/src/tool/musicalTypography/i18n/sv.ts +29 -0
- package/src/tool/musicalTypography/i18n/tr.ts +29 -0
- package/src/tool/musicalTypography/i18n/zh.ts +30 -0
- package/src/tool/musicalTypography/index.ts +15 -7
- package/src/tool/placeholderGenerator/i18n/de.ts +176 -0
- package/src/tool/placeholderGenerator/i18n/id.ts +176 -0
- package/src/tool/placeholderGenerator/i18n/it.ts +176 -0
- package/src/tool/placeholderGenerator/i18n/ja.ts +177 -0
- package/src/tool/placeholderGenerator/i18n/ko.ts +177 -0
- package/src/tool/placeholderGenerator/i18n/nl.ts +176 -0
- package/src/tool/placeholderGenerator/i18n/pl.ts +176 -0
- package/src/tool/placeholderGenerator/i18n/pt.ts +176 -0
- package/src/tool/placeholderGenerator/i18n/ru.ts +176 -0
- package/src/tool/placeholderGenerator/i18n/sv.ts +176 -0
- package/src/tool/placeholderGenerator/i18n/tr.ts +176 -0
- package/src/tool/placeholderGenerator/i18n/zh.ts +177 -0
- package/src/tool/placeholderGenerator/index.ts +24 -0
- package/src/tool/promptLibrary/i18n/de.ts +131 -0
- package/src/tool/promptLibrary/i18n/id.ts +131 -0
- package/src/tool/promptLibrary/i18n/it.ts +131 -0
- package/src/tool/promptLibrary/i18n/ja.ts +132 -0
- package/src/tool/promptLibrary/i18n/ko.ts +132 -0
- package/src/tool/promptLibrary/i18n/nl.ts +131 -0
- package/src/tool/promptLibrary/i18n/pl.ts +28 -0
- package/src/tool/promptLibrary/i18n/pt.ts +101 -0
- package/src/tool/promptLibrary/i18n/ru.ts +101 -0
- package/src/tool/promptLibrary/i18n/sv.ts +93 -0
- package/src/tool/promptLibrary/i18n/tr.ts +93 -0
- package/src/tool/promptLibrary/i18n/zh.ts +94 -0
- package/src/tool/promptLibrary/index.ts +24 -0
- package/src/tool/readabilityCalculator/i18n/de.ts +133 -0
- package/src/tool/readabilityCalculator/i18n/id.ts +133 -0
- package/src/tool/readabilityCalculator/i18n/it.ts +133 -0
- package/src/tool/readabilityCalculator/i18n/ja.ts +134 -0
- package/src/tool/readabilityCalculator/i18n/ko.ts +134 -0
- package/src/tool/readabilityCalculator/i18n/nl.ts +133 -0
- package/src/tool/readabilityCalculator/i18n/pl.ts +29 -0
- package/src/tool/readabilityCalculator/i18n/pt.ts +91 -0
- package/src/tool/readabilityCalculator/i18n/ru.ts +91 -0
- package/src/tool/readabilityCalculator/i18n/sv.ts +43 -0
- package/src/tool/readabilityCalculator/i18n/tr.ts +43 -0
- package/src/tool/readabilityCalculator/i18n/zh.ts +44 -0
- package/src/tool/readabilityCalculator/index.ts +24 -0
- package/src/tool/svgSanitizer/i18n/de.ts +125 -0
- package/src/tool/svgSanitizer/i18n/id.ts +125 -0
- package/src/tool/svgSanitizer/i18n/it.ts +125 -0
- package/src/tool/svgSanitizer/i18n/ja.ts +126 -0
- package/src/tool/svgSanitizer/i18n/ko.ts +126 -0
- package/src/tool/svgSanitizer/i18n/nl.ts +125 -0
- package/src/tool/svgSanitizer/i18n/pl.ts +125 -0
- package/src/tool/svgSanitizer/i18n/pt.ts +30 -0
- package/src/tool/svgSanitizer/i18n/ru.ts +126 -0
- package/src/tool/svgSanitizer/i18n/sv.ts +126 -0
- package/src/tool/svgSanitizer/i18n/tr.ts +126 -0
- package/src/tool/svgSanitizer/i18n/zh.ts +126 -0
- package/src/tool/svgSanitizer/index.ts +24 -0
- package/src/tool/svgToCss/i18n/de.ts +174 -0
- package/src/tool/svgToCss/i18n/id.ts +174 -0
- package/src/tool/svgToCss/i18n/it.ts +174 -0
- package/src/tool/svgToCss/i18n/ja.ts +175 -0
- package/src/tool/svgToCss/i18n/ko.ts +175 -0
- package/src/tool/svgToCss/i18n/nl.ts +174 -0
- package/src/tool/svgToCss/i18n/pl.ts +174 -0
- package/src/tool/svgToCss/i18n/pt.ts +174 -0
- package/src/tool/svgToCss/i18n/ru.ts +174 -0
- package/src/tool/svgToCss/i18n/sv.ts +174 -0
- package/src/tool/svgToCss/i18n/tr.ts +174 -0
- package/src/tool/svgToCss/i18n/zh.ts +175 -0
- package/src/tool/svgToCss/index.ts +15 -7
- package/src/tool/urlCleaner/i18n/de.ts +116 -0
- package/src/tool/urlCleaner/i18n/id.ts +116 -0
- package/src/tool/urlCleaner/i18n/it.ts +116 -0
- package/src/tool/urlCleaner/i18n/ja.ts +117 -0
- package/src/tool/urlCleaner/i18n/ko.ts +117 -0
- package/src/tool/urlCleaner/i18n/nl.ts +116 -0
- package/src/tool/urlCleaner/i18n/pl.ts +29 -0
- package/src/tool/urlCleaner/i18n/pt.ts +43 -0
- package/src/tool/urlCleaner/i18n/ru.ts +43 -0
- package/src/tool/urlCleaner/i18n/sv.ts +43 -0
- package/src/tool/urlCleaner/i18n/tr.ts +43 -0
- package/src/tool/urlCleaner/i18n/zh.ts +44 -0
- package/src/tool/urlCleaner/index.ts +24 -0
- package/src/tool/urlEncoderDecoder/i18n/de.ts +163 -0
- package/src/tool/urlEncoderDecoder/i18n/id.ts +163 -0
- package/src/tool/urlEncoderDecoder/i18n/it.ts +163 -0
- package/src/tool/urlEncoderDecoder/i18n/ja.ts +163 -0
- package/src/tool/urlEncoderDecoder/i18n/ko.ts +163 -0
- package/src/tool/urlEncoderDecoder/i18n/nl.ts +163 -0
- package/src/tool/urlEncoderDecoder/i18n/pl.ts +162 -0
- package/src/tool/urlEncoderDecoder/i18n/pt.ts +162 -0
- package/src/tool/urlEncoderDecoder/i18n/ru.ts +163 -0
- package/src/tool/urlEncoderDecoder/i18n/sv.ts +163 -0
- package/src/tool/urlEncoderDecoder/i18n/tr.ts +162 -0
- package/src/tool/urlEncoderDecoder/i18n/zh.ts +163 -0
- package/src/tool/urlEncoderDecoder/index.ts +15 -7
- package/src/tool/utmGenerator/i18n/de.ts +118 -0
- package/src/tool/utmGenerator/i18n/id.ts +118 -0
- package/src/tool/utmGenerator/i18n/it.ts +118 -0
- package/src/tool/utmGenerator/i18n/ja.ts +118 -0
- package/src/tool/utmGenerator/i18n/ko.ts +118 -0
- package/src/tool/utmGenerator/i18n/nl.ts +118 -0
- package/src/tool/utmGenerator/i18n/pl.ts +117 -0
- package/src/tool/utmGenerator/i18n/pt.ts +118 -0
- package/src/tool/utmGenerator/i18n/ru.ts +118 -0
- package/src/tool/utmGenerator/i18n/sv.ts +118 -0
- package/src/tool/utmGenerator/i18n/tr.ts +117 -0
- package/src/tool/utmGenerator/i18n/zh.ts +118 -0
- package/src/tool/utmGenerator/index.ts +15 -7
- package/src/types.ts +1 -2
|
@@ -0,0 +1,166 @@
|
|
|
1
|
+
import type { WithContext, FAQPage, HowToThing, SoftwareApplication } from 'schema-dts';
|
|
2
|
+
import type { ToolLocaleContent } from '../../../types';
|
|
3
|
+
import type { LlmCostCalculatorUI } from '../ui';
|
|
4
|
+
|
|
5
|
+
const slug = 'kalkulator-biaya-llm';
|
|
6
|
+
const title = 'Kalkulator Biaya LLM. Estimator Harga Model AI';
|
|
7
|
+
const description =
|
|
8
|
+
'Alat online gratis untuk memperkirakan biaya pemanggilan API model bahasa besar. Bandingkan GPT-4o, Claude, Gemini, Llama, dan lainnya dengan harga token nyata per satu juta token.';
|
|
9
|
+
|
|
10
|
+
const faqData = [
|
|
11
|
+
{
|
|
12
|
+
question: 'Bagaimana biaya API LLM dihitung?',
|
|
13
|
+
answer:
|
|
14
|
+
'API LLM mengenakan biaya terpisah untuk token input (prompt) dan token output (respons). Total biaya per permintaan adalah: (token input × harga input + token output × harga output) / 1.000.000. Kalikan dengan jumlah permintaan untuk mendapatkan total biaya bulanan.',
|
|
15
|
+
},
|
|
16
|
+
{
|
|
17
|
+
question: 'Apa itu token dan bagaimana hubungannya dengan kata?',
|
|
18
|
+
answer:
|
|
19
|
+
'Token adalah satuan dasar teks yang diproses oleh model bahasa. Rata-rata, 1 token setara dengan sekitar 0,75 kata dalam bahasa Inggris, sehingga 1.000 token ≈ 750 kata. Harga dicantumkan per juta token ($/1M), yang merupakan satuan penetapan harga standar di semua penyedia.',
|
|
20
|
+
},
|
|
21
|
+
{
|
|
22
|
+
question: 'Mengapa token output lebih mahal daripada token input?',
|
|
23
|
+
answer:
|
|
24
|
+
'Menghasilkan teks (output) mengharuskan model menghitung setiap token secara berurutan, yang secara komputasi lebih intensif daripada membaca input. Sebagian besar penyedia mengenakan biaya 3–5 kali lebih mahal untuk token output dibandingkan token input.',
|
|
25
|
+
},
|
|
26
|
+
{
|
|
27
|
+
question: 'Bagaimana cara mengurangi biaya API LLM saya?',
|
|
28
|
+
answer:
|
|
29
|
+
'Gunakan model terkecil yang memenuhi persyaratan kualitas Anda. Terapkan cache untuk prompt yang berulang jika memungkinkan. Minimalkan panjang system prompt dan hindari konteks yang tidak perlu. Untuk tugas klasifikasi atau ekstraksi sederhana, model yang lebih kecil seperti GPT-4o mini atau Gemini Flash menawarkan penghematan yang signifikan.',
|
|
30
|
+
},
|
|
31
|
+
];
|
|
32
|
+
|
|
33
|
+
const howToData = [
|
|
34
|
+
{
|
|
35
|
+
name: 'Pilih model',
|
|
36
|
+
text: 'Pilih model AI yang ingin Anda gunakan dari dropdown yang dikelompokkan. Model diorganisir berdasarkan penyedia.',
|
|
37
|
+
},
|
|
38
|
+
{
|
|
39
|
+
name: 'Masukkan jumlah token',
|
|
40
|
+
text: 'Masukkan perkiraan jumlah token input (prompt Anda) dan token output (respons). Estimasi dalam kata muncul di bawah setiap kolom.',
|
|
41
|
+
},
|
|
42
|
+
{
|
|
43
|
+
name: 'Tentukan jumlah permintaan',
|
|
44
|
+
text: 'Gunakan slider atau kolom angka untuk memasukkan berapa banyak panggilan API yang Anda perkirakan. Total biaya diperbarui secara real time.',
|
|
45
|
+
},
|
|
46
|
+
];
|
|
47
|
+
|
|
48
|
+
const faqSchema: WithContext<FAQPage> = {
|
|
49
|
+
'@context': 'https://schema.org',
|
|
50
|
+
'@type': 'FAQPage',
|
|
51
|
+
mainEntity: faqData.map((item) => ({
|
|
52
|
+
'@type': 'Question',
|
|
53
|
+
name: item.question,
|
|
54
|
+
acceptedAnswer: { '@type': 'Answer', text: item.answer },
|
|
55
|
+
})),
|
|
56
|
+
};
|
|
57
|
+
|
|
58
|
+
const howToSchema: WithContext<HowToThing> = {
|
|
59
|
+
'@context': 'https://schema.org',
|
|
60
|
+
'@type': 'HowTo',
|
|
61
|
+
name: title,
|
|
62
|
+
description,
|
|
63
|
+
step: howToData.map((step, i) => ({
|
|
64
|
+
'@type': 'HowToStep',
|
|
65
|
+
position: i + 1,
|
|
66
|
+
name: step.name,
|
|
67
|
+
text: step.text,
|
|
68
|
+
})),
|
|
69
|
+
};
|
|
70
|
+
|
|
71
|
+
const appSchema: WithContext<SoftwareApplication> = {
|
|
72
|
+
'@context': 'https://schema.org',
|
|
73
|
+
'@type': 'SoftwareApplication',
|
|
74
|
+
name: title,
|
|
75
|
+
description,
|
|
76
|
+
applicationCategory: 'DeveloperApplication',
|
|
77
|
+
operatingSystem: 'All',
|
|
78
|
+
offers: { '@type': 'Offer', price: '0', priceCurrency: 'EUR' },
|
|
79
|
+
inLanguage: 'id',
|
|
80
|
+
};
|
|
81
|
+
|
|
82
|
+
const ui: LlmCostCalculatorUI = {
|
|
83
|
+
labelModel: 'Model LLM',
|
|
84
|
+
labelInputTokens: 'Token Input',
|
|
85
|
+
labelOutputTokens: 'Token Output',
|
|
86
|
+
labelRequests: 'Jumlah Permintaan',
|
|
87
|
+
unitWords: 'kata',
|
|
88
|
+
labelCostPerRequest: 'Biaya per Permintaan',
|
|
89
|
+
labelTotal: 'Estimasi Total Biaya',
|
|
90
|
+
labelInput: 'Input',
|
|
91
|
+
labelOutput: 'Output',
|
|
92
|
+
};
|
|
93
|
+
|
|
94
|
+
export const content: ToolLocaleContent<LlmCostCalculatorUI> = {
|
|
95
|
+
slug,
|
|
96
|
+
title,
|
|
97
|
+
description,
|
|
98
|
+
ui,
|
|
99
|
+
faqTitle: 'Pertanyaan yang Sering Diajukan',
|
|
100
|
+
faq: faqData,
|
|
101
|
+
bibliographyTitle: 'Referensi dan Sumber Harga',
|
|
102
|
+
bibliography: [
|
|
103
|
+
{
|
|
104
|
+
name: 'Harga API OpenAI',
|
|
105
|
+
url: 'https://openai.com/pricing',
|
|
106
|
+
},
|
|
107
|
+
{
|
|
108
|
+
name: 'Harga API Anthropic',
|
|
109
|
+
url: 'https://www.anthropic.com/pricing',
|
|
110
|
+
},
|
|
111
|
+
{
|
|
112
|
+
name: 'Harga Google AI Studio',
|
|
113
|
+
url: 'https://ai.google.dev/pricing',
|
|
114
|
+
},
|
|
115
|
+
{
|
|
116
|
+
name: 'Tokenizer OpenAI',
|
|
117
|
+
url: 'https://platform.openai.com/tokenizer',
|
|
118
|
+
},
|
|
119
|
+
],
|
|
120
|
+
howTo: howToData,
|
|
121
|
+
schemas: [faqSchema, howToSchema, appSchema],
|
|
122
|
+
seo: [
|
|
123
|
+
{
|
|
124
|
+
type: 'title',
|
|
125
|
+
text: 'Memahami penetapan harga API LLM',
|
|
126
|
+
level: 2,
|
|
127
|
+
},
|
|
128
|
+
{
|
|
129
|
+
type: 'paragraph',
|
|
130
|
+
html: 'API model bahasa besar mengenakan biaya berdasarkan penggunaan token, bukan waktu atau jumlah permintaan. Setiap panggilan API memiliki dua komponen biaya: <strong>biaya input</strong> (memproses prompt Anda) dan <strong>biaya output</strong> (menghasilkan respons). Memahami perbedaan ini adalah kunci untuk memperkirakan tagihan bulanan Anda secara akurat.',
|
|
131
|
+
},
|
|
132
|
+
{
|
|
133
|
+
type: 'title',
|
|
134
|
+
text: 'Token input vs token output',
|
|
135
|
+
level: 3,
|
|
136
|
+
},
|
|
137
|
+
{
|
|
138
|
+
type: 'grid',
|
|
139
|
+
columns: 2,
|
|
140
|
+
},
|
|
141
|
+
{
|
|
142
|
+
type: 'card',
|
|
143
|
+
title: 'Token input',
|
|
144
|
+
html: '<p>Token input mewakili semua yang dikirimkan <strong>ke</strong> model: system prompt, riwayat percakapan, dan pesan pengguna. Lebih murah karena model memprosesnya secara paralel. System prompt tipikal sepanjang 200 kata menghasilkan sekitar 267 token input.</p>',
|
|
145
|
+
},
|
|
146
|
+
{
|
|
147
|
+
type: 'card',
|
|
148
|
+
title: 'Token output',
|
|
149
|
+
html: '<p>Token output dihasilkan satu per satu secara berurutan, sehingga lebih intensif secara komputasi. Sebagian besar penyedia mengenakan biaya <strong>3–5× lebih mahal</strong> untuk token output. Respons 300 kata menghasilkan sekitar 400 token output. Menjaga respons tetap ringkas adalah salah satu strategi penghematan biaya yang paling efektif.</p>',
|
|
150
|
+
},
|
|
151
|
+
{
|
|
152
|
+
type: 'title',
|
|
153
|
+
text: 'Memilih model yang tepat sesuai anggaran',
|
|
154
|
+
level: 3,
|
|
155
|
+
},
|
|
156
|
+
{
|
|
157
|
+
type: 'tip',
|
|
158
|
+
html: 'Mulailah dengan model kelas menengah yang mumpuni seperti <code>GPT-4o mini</code> atau <code>Gemini 1.5 Flash</code> dan naik ke model yang lebih besar hanya jika kualitasnya belum memadai. Perbedaan biaya antara model kecil dan besar bisa mencapai 10–100×.',
|
|
159
|
+
},
|
|
160
|
+
{
|
|
161
|
+
type: 'paragraph',
|
|
162
|
+
html: 'Tidak semua tugas membutuhkan kualitas model yang sama. Tugas klasifikasi, ekstraksi, dan ringkasan sering kali berjalan baik dengan model yang lebih kecil dan lebih murah. Simpan model frontier besar seperti <code>claude-3-opus</code> atau <code>o1</code> untuk tugas penalaran kompleks yang kualitasnya berdampak langsung pada hasil.',
|
|
163
|
+
},
|
|
164
|
+
],
|
|
165
|
+
};
|
|
166
|
+
|
|
@@ -0,0 +1,166 @@
|
|
|
1
|
+
import type { WithContext, FAQPage, HowToThing, SoftwareApplication } from 'schema-dts';
|
|
2
|
+
import type { ToolLocaleContent } from '../../../types';
|
|
3
|
+
import type { LlmCostCalculatorUI } from '../ui';
|
|
4
|
+
|
|
5
|
+
const slug = 'calcolatore-costi-llm';
|
|
6
|
+
const title = 'Calcolatore Costi LLM. Stimatore Prezzi API per Modelli AI';
|
|
7
|
+
const description =
|
|
8
|
+
'Strumento online gratuito per stimare il costo delle chiamate alle API dei modelli linguistici. Confronta GPT-4o, Claude, Gemini, Llama e altri con i prezzi reali per milione di token.';
|
|
9
|
+
|
|
10
|
+
const faqData = [
|
|
11
|
+
{
|
|
12
|
+
question: 'Come si calcola il costo di una API LLM?',
|
|
13
|
+
answer:
|
|
14
|
+
'Le API LLM addebitano separatamente i token di input (il prompt) e i token di output (la risposta). Il costo totale per richiesta è: (token input × prezzo input + token output × prezzo output) / 1.000.000. Moltiplica per il numero di richieste per ottenere il costo mensile totale.',
|
|
15
|
+
},
|
|
16
|
+
{
|
|
17
|
+
question: 'Cosa sono i token e come si relazionano con le parole?',
|
|
18
|
+
answer:
|
|
19
|
+
'Un token è l\'unità di base del testo elaborata da un modello linguistico. In media, 1 token equivale a circa 0,75 parole in inglese, quindi 1.000 token ≈ 750 parole. I prezzi vengono indicati per milione di token ($/1M), che è l\'unità di tariffazione standard tra tutti i provider.',
|
|
20
|
+
},
|
|
21
|
+
{
|
|
22
|
+
question: 'Perché i token di output costano più di quelli di input?',
|
|
23
|
+
answer:
|
|
24
|
+
'Generare testo (output) richiede che il modello calcoli ogni token in sequenza, il che è computazionalmente più intensivo della lettura dell\'input. La maggior parte dei provider addebita da 3 a 5 volte di più per i token di output rispetto a quelli di input.',
|
|
25
|
+
},
|
|
26
|
+
{
|
|
27
|
+
question: 'Come posso ridurre i costi della mia API LLM?',
|
|
28
|
+
answer:
|
|
29
|
+
'Usa il modello più piccolo che soddisfa i tuoi requisiti di qualità. Metti in cache i prompt ripetuti quando possibile. Riduci al minimo la lunghezza del system prompt ed evita il contesto non necessario. Per compiti semplici di classificazione o estrazione, modelli più piccoli come GPT-4o mini o Gemini Flash offrono risparmi significativi.',
|
|
30
|
+
},
|
|
31
|
+
];
|
|
32
|
+
|
|
33
|
+
const howToData = [
|
|
34
|
+
{
|
|
35
|
+
name: 'Seleziona un modello',
|
|
36
|
+
text: 'Scegli il modello AI che intendi utilizzare dal menu a tendina raggruppato. I modelli sono organizzati per provider.',
|
|
37
|
+
},
|
|
38
|
+
{
|
|
39
|
+
name: 'Inserisci il numero di token',
|
|
40
|
+
text: 'Inserisci il numero atteso di token di input (il tuo prompt) e di token di output (la risposta). Sotto ogni campo compare una stima in parole.',
|
|
41
|
+
},
|
|
42
|
+
{
|
|
43
|
+
name: 'Imposta il numero di richieste',
|
|
44
|
+
text: 'Usa il cursore o il campo numerico per inserire quante chiamate API prevedi. Il costo totale si aggiorna in tempo reale.',
|
|
45
|
+
},
|
|
46
|
+
];
|
|
47
|
+
|
|
48
|
+
const faqSchema: WithContext<FAQPage> = {
|
|
49
|
+
'@context': 'https://schema.org',
|
|
50
|
+
'@type': 'FAQPage',
|
|
51
|
+
mainEntity: faqData.map((item) => ({
|
|
52
|
+
'@type': 'Question',
|
|
53
|
+
name: item.question,
|
|
54
|
+
acceptedAnswer: { '@type': 'Answer', text: item.answer },
|
|
55
|
+
})),
|
|
56
|
+
};
|
|
57
|
+
|
|
58
|
+
const howToSchema: WithContext<HowToThing> = {
|
|
59
|
+
'@context': 'https://schema.org',
|
|
60
|
+
'@type': 'HowTo',
|
|
61
|
+
name: title,
|
|
62
|
+
description,
|
|
63
|
+
step: howToData.map((step, i) => ({
|
|
64
|
+
'@type': 'HowToStep',
|
|
65
|
+
position: i + 1,
|
|
66
|
+
name: step.name,
|
|
67
|
+
text: step.text,
|
|
68
|
+
})),
|
|
69
|
+
};
|
|
70
|
+
|
|
71
|
+
const appSchema: WithContext<SoftwareApplication> = {
|
|
72
|
+
'@context': 'https://schema.org',
|
|
73
|
+
'@type': 'SoftwareApplication',
|
|
74
|
+
name: title,
|
|
75
|
+
description,
|
|
76
|
+
applicationCategory: 'DeveloperApplication',
|
|
77
|
+
operatingSystem: 'All',
|
|
78
|
+
offers: { '@type': 'Offer', price: '0', priceCurrency: 'EUR' },
|
|
79
|
+
inLanguage: 'it',
|
|
80
|
+
};
|
|
81
|
+
|
|
82
|
+
const ui: LlmCostCalculatorUI = {
|
|
83
|
+
labelModel: 'Modello LLM',
|
|
84
|
+
labelInputTokens: 'Token di input',
|
|
85
|
+
labelOutputTokens: 'Token di output',
|
|
86
|
+
labelRequests: 'Numero di richieste',
|
|
87
|
+
unitWords: 'parole',
|
|
88
|
+
labelCostPerRequest: 'Costo per richiesta',
|
|
89
|
+
labelTotal: 'Costo totale stimato',
|
|
90
|
+
labelInput: 'Input',
|
|
91
|
+
labelOutput: 'Output',
|
|
92
|
+
};
|
|
93
|
+
|
|
94
|
+
export const content: ToolLocaleContent<LlmCostCalculatorUI> = {
|
|
95
|
+
slug,
|
|
96
|
+
title,
|
|
97
|
+
description,
|
|
98
|
+
ui,
|
|
99
|
+
faqTitle: 'Domande frequenti',
|
|
100
|
+
faq: faqData,
|
|
101
|
+
bibliographyTitle: 'Riferimenti e fonti dei prezzi',
|
|
102
|
+
bibliography: [
|
|
103
|
+
{
|
|
104
|
+
name: 'Prezzi API OpenAI',
|
|
105
|
+
url: 'https://openai.com/pricing',
|
|
106
|
+
},
|
|
107
|
+
{
|
|
108
|
+
name: 'Prezzi API Anthropic',
|
|
109
|
+
url: 'https://www.anthropic.com/pricing',
|
|
110
|
+
},
|
|
111
|
+
{
|
|
112
|
+
name: 'Prezzi Google AI Studio',
|
|
113
|
+
url: 'https://ai.google.dev/pricing',
|
|
114
|
+
},
|
|
115
|
+
{
|
|
116
|
+
name: 'Tokenizer OpenAI',
|
|
117
|
+
url: 'https://platform.openai.com/tokenizer',
|
|
118
|
+
},
|
|
119
|
+
],
|
|
120
|
+
howTo: howToData,
|
|
121
|
+
schemas: [faqSchema, howToSchema, appSchema],
|
|
122
|
+
seo: [
|
|
123
|
+
{
|
|
124
|
+
type: 'title',
|
|
125
|
+
text: 'Come funziona la tariffazione delle API LLM',
|
|
126
|
+
level: 2,
|
|
127
|
+
},
|
|
128
|
+
{
|
|
129
|
+
type: 'paragraph',
|
|
130
|
+
html: 'Le API dei modelli linguistici addebitano in base all\'utilizzo dei token, non al tempo o al numero di richieste. Ogni chiamata ha due costi: il <strong>costo di input</strong> (elaborazione del tuo prompt) e il <strong>costo di output</strong> (generazione della risposta). Comprendere questa distinzione è fondamentale per stimare con precisione la tua spesa mensile.',
|
|
131
|
+
},
|
|
132
|
+
{
|
|
133
|
+
type: 'title',
|
|
134
|
+
text: 'Token di input e token di output a confronto',
|
|
135
|
+
level: 3,
|
|
136
|
+
},
|
|
137
|
+
{
|
|
138
|
+
type: 'grid',
|
|
139
|
+
columns: 2,
|
|
140
|
+
},
|
|
141
|
+
{
|
|
142
|
+
type: 'card',
|
|
143
|
+
title: 'Token di input',
|
|
144
|
+
html: '<p>I token di input rappresentano tutto ciò che viene inviato <strong>al</strong> modello: il system prompt, la cronologia della conversazione e il messaggio dell\'utente. Costano meno perché il modello li elabora in parallelo. Un system prompt tipico di 200 parole genera circa 267 token di input.</p>',
|
|
145
|
+
},
|
|
146
|
+
{
|
|
147
|
+
type: 'card',
|
|
148
|
+
title: 'Token di output',
|
|
149
|
+
html: '<p>I token di output vengono generati uno per uno in sequenza, rendendoli più costosi dal punto di vista computazionale. La maggior parte dei provider addebita <strong>da 3 a 5 volte di più</strong> per i token di output. Una risposta di 300 parole genera circa 400 token di output. Mantenere le risposte concise è una delle strategie di risparmio più efficaci.</p>',
|
|
150
|
+
},
|
|
151
|
+
{
|
|
152
|
+
type: 'title',
|
|
153
|
+
text: 'Scegliere il modello giusto per il tuo budget',
|
|
154
|
+
level: 3,
|
|
155
|
+
},
|
|
156
|
+
{
|
|
157
|
+
type: 'tip',
|
|
158
|
+
html: 'Inizia con un modello di fascia media come <code>GPT-4o mini</code> o <code>Gemini 1.5 Flash</code> e passa a un modello superiore solo se la qualità non è sufficiente. La differenza di costo tra un modello piccolo e uno grande può essere da 10 a 100 volte.',
|
|
159
|
+
},
|
|
160
|
+
{
|
|
161
|
+
type: 'paragraph',
|
|
162
|
+
html: 'Non tutte le attività richiedono lo stesso livello di modello. Classificazione, estrazione e riassunti spesso funzionano bene anche con modelli più piccoli ed economici. Riserva i grandi modelli frontier come <code>claude-3-opus</code> o <code>o1</code> per i ragionamenti complessi dove la qualità influisce direttamente sui risultati.',
|
|
163
|
+
},
|
|
164
|
+
],
|
|
165
|
+
};
|
|
166
|
+
|
|
@@ -0,0 +1,166 @@
|
|
|
1
|
+
import type { WithContext, FAQPage, HowToThing, SoftwareApplication } from 'schema-dts';
|
|
2
|
+
import type { ToolLocaleContent } from '../../../types';
|
|
3
|
+
import type { LlmCostCalculatorUI } from '../ui';
|
|
4
|
+
|
|
5
|
+
const slug = 'llm-cost-calculator';
|
|
6
|
+
const title = 'LLMコスト計算ツール。AIモデルAPIの料金見積もり';
|
|
7
|
+
const description =
|
|
8
|
+
'LLM APIの呼び出しコストを無料で試算できるオンラインツールです。GPT-4o、Claude、Gemini、Llamaなどを、100万トークンあたりの実際の料金で比較できます。';
|
|
9
|
+
|
|
10
|
+
const faqData = [
|
|
11
|
+
{
|
|
12
|
+
question: 'LLM APIのコストはどう計算されますか?',
|
|
13
|
+
answer:
|
|
14
|
+
'LLM APIでは、入力トークン(プロンプト)と出力トークン(レスポンス)が別々に課金されます。1リクエストあたりの合計コストは「(入力トークン数 × 入力単価 + 出力トークン数 × 出力単価) ÷ 1,000,000」で算出されます。これにリクエスト数を掛けることで、月間合計コストが求められます。',
|
|
15
|
+
},
|
|
16
|
+
{
|
|
17
|
+
question: 'トークンとは何ですか?単語数とどう関係しますか?',
|
|
18
|
+
answer:
|
|
19
|
+
'トークンとは、言語モデルが処理するテキストの基本単位です。英語では平均して1トークンが約0.75単語に相当するため、1,000トークン ≈ 750単語となります。料金は100万トークンあたり($/1M)で表示されるのが業界標準です。',
|
|
20
|
+
},
|
|
21
|
+
{
|
|
22
|
+
question: '出力トークンが入力トークンより高いのはなぜですか?',
|
|
23
|
+
answer:
|
|
24
|
+
'テキストを生成(出力)する際、モデルはトークンを1つずつ逐次的に計算するため、入力を読み込む処理よりも計算コストが高くなります。多くのプロバイダーでは、出力トークンの料金を入力トークンの3〜5倍に設定しています。',
|
|
25
|
+
},
|
|
26
|
+
{
|
|
27
|
+
question: 'LLM APIのコストを下げるにはどうすればよいですか?',
|
|
28
|
+
answer:
|
|
29
|
+
'品質要件を満たす中で最も小さなモデルを選択しましょう。繰り返し使うプロンプトはキャッシュを活用することも有効です。システムプロンプトはできるだけ短くし、不要なコンテキストは含めないようにしましょう。分類や抽出などのシンプルなタスクには、GPT-4o miniやGemini Flashのような軽量モデルが大幅なコスト削減につながります。',
|
|
30
|
+
},
|
|
31
|
+
];
|
|
32
|
+
|
|
33
|
+
const howToData = [
|
|
34
|
+
{
|
|
35
|
+
name: 'モデルを選択する',
|
|
36
|
+
text: 'グループ化されたドロップダウンから、使用予定のAIモデルを選びます。モデルはプロバイダーごとに整理されています。',
|
|
37
|
+
},
|
|
38
|
+
{
|
|
39
|
+
name: 'トークン数を入力する',
|
|
40
|
+
text: '入力トークン数(プロンプト)と出力トークン数(レスポンス)の想定値を入力します。各フィールドの下に単語数の目安が表示されます。',
|
|
41
|
+
},
|
|
42
|
+
{
|
|
43
|
+
name: 'リクエスト数を設定する',
|
|
44
|
+
text: 'スライダーまたは数値入力フィールドで、想定するAPIコール数を入力します。合計コストはリアルタイムで更新されます。',
|
|
45
|
+
},
|
|
46
|
+
];
|
|
47
|
+
|
|
48
|
+
const faqSchema: WithContext<FAQPage> = {
|
|
49
|
+
'@context': 'https://schema.org',
|
|
50
|
+
'@type': 'FAQPage',
|
|
51
|
+
mainEntity: faqData.map((item) => ({
|
|
52
|
+
'@type': 'Question',
|
|
53
|
+
name: item.question,
|
|
54
|
+
acceptedAnswer: { '@type': 'Answer', text: item.answer },
|
|
55
|
+
})),
|
|
56
|
+
};
|
|
57
|
+
|
|
58
|
+
const howToSchema: WithContext<HowToThing> = {
|
|
59
|
+
'@context': 'https://schema.org',
|
|
60
|
+
'@type': 'HowTo',
|
|
61
|
+
name: title,
|
|
62
|
+
description,
|
|
63
|
+
step: howToData.map((step, i) => ({
|
|
64
|
+
'@type': 'HowToStep',
|
|
65
|
+
position: i + 1,
|
|
66
|
+
name: step.name,
|
|
67
|
+
text: step.text,
|
|
68
|
+
})),
|
|
69
|
+
};
|
|
70
|
+
|
|
71
|
+
const appSchema: WithContext<SoftwareApplication> = {
|
|
72
|
+
'@context': 'https://schema.org',
|
|
73
|
+
'@type': 'SoftwareApplication',
|
|
74
|
+
name: title,
|
|
75
|
+
description,
|
|
76
|
+
applicationCategory: 'DeveloperApplication',
|
|
77
|
+
operatingSystem: 'All',
|
|
78
|
+
offers: { '@type': 'Offer', price: '0', priceCurrency: 'EUR' },
|
|
79
|
+
inLanguage: 'ja',
|
|
80
|
+
};
|
|
81
|
+
|
|
82
|
+
const ui: LlmCostCalculatorUI = {
|
|
83
|
+
labelModel: 'LLMモデル',
|
|
84
|
+
labelInputTokens: '入力トークン数',
|
|
85
|
+
labelOutputTokens: '出力トークン数',
|
|
86
|
+
labelRequests: 'リクエスト数',
|
|
87
|
+
unitWords: '単語',
|
|
88
|
+
labelCostPerRequest: '1リクエストあたりのコスト',
|
|
89
|
+
labelTotal: '推定合計コスト',
|
|
90
|
+
labelInput: '入力',
|
|
91
|
+
labelOutput: '出力',
|
|
92
|
+
};
|
|
93
|
+
|
|
94
|
+
export const content: ToolLocaleContent<LlmCostCalculatorUI> = {
|
|
95
|
+
slug,
|
|
96
|
+
title,
|
|
97
|
+
description,
|
|
98
|
+
ui,
|
|
99
|
+
faqTitle: 'よくある質問',
|
|
100
|
+
faq: faqData,
|
|
101
|
+
bibliographyTitle: '参考情報と料金ソース',
|
|
102
|
+
bibliography: [
|
|
103
|
+
{
|
|
104
|
+
name: 'OpenAI API 料金',
|
|
105
|
+
url: 'https://openai.com/pricing',
|
|
106
|
+
},
|
|
107
|
+
{
|
|
108
|
+
name: 'Anthropic API 料金',
|
|
109
|
+
url: 'https://www.anthropic.com/pricing',
|
|
110
|
+
},
|
|
111
|
+
{
|
|
112
|
+
name: 'Google AI Studio 料金',
|
|
113
|
+
url: 'https://ai.google.dev/pricing',
|
|
114
|
+
},
|
|
115
|
+
{
|
|
116
|
+
name: 'OpenAI トークナイザー',
|
|
117
|
+
url: 'https://platform.openai.com/tokenizer',
|
|
118
|
+
},
|
|
119
|
+
],
|
|
120
|
+
howTo: howToData,
|
|
121
|
+
schemas: [faqSchema, howToSchema, appSchema],
|
|
122
|
+
seo: [
|
|
123
|
+
{
|
|
124
|
+
type: 'title',
|
|
125
|
+
text: 'LLM APIの料金体系を理解する',
|
|
126
|
+
level: 2,
|
|
127
|
+
},
|
|
128
|
+
{
|
|
129
|
+
type: 'paragraph',
|
|
130
|
+
html: '大規模言語モデルのAPIは、時間やリクエスト数ではなく、<strong>トークンの使用量</strong>に基づいて課金されます。各APIコールには2種類のコストが発生します。<strong>入力コスト</strong>(プロンプトの処理)と<strong>出力コスト</strong>(レスポンスの生成)です。この違いを把握することが、月額費用を正確に見積もるうえで欠かせません。',
|
|
131
|
+
},
|
|
132
|
+
{
|
|
133
|
+
type: 'title',
|
|
134
|
+
text: '入力トークンと出力トークンの違い',
|
|
135
|
+
level: 3,
|
|
136
|
+
},
|
|
137
|
+
{
|
|
138
|
+
type: 'grid',
|
|
139
|
+
columns: 2,
|
|
140
|
+
},
|
|
141
|
+
{
|
|
142
|
+
type: 'card',
|
|
143
|
+
title: '入力トークン',
|
|
144
|
+
html: '<p>入力トークンとは、モデルに<strong>送信される</strong>すべてのテキストを指します。システムプロンプト、会話履歴、ユーザーメッセージが含まれます。モデルがこれらを並列処理するため、コストは比較的低く抑えられます。200単語程度の一般的なシステムプロンプトは、おおよそ267入力トークンに相当します。</p>',
|
|
145
|
+
},
|
|
146
|
+
{
|
|
147
|
+
type: 'card',
|
|
148
|
+
title: '出力トークン',
|
|
149
|
+
html: '<p>出力トークンは1つずつ逐次的に生成されるため、計算コストが高くなります。多くのプロバイダーでは、出力トークンの料金を入力トークンの<strong>3〜5倍</strong>に設定しています。300単語のレスポンスはおよそ400出力トークンに相当します。レスポンスを簡潔に保つことは、コスト削減に最も効果的な手段のひとつです。</p>',
|
|
150
|
+
},
|
|
151
|
+
{
|
|
152
|
+
type: 'title',
|
|
153
|
+
text: '予算に合ったモデルの選び方',
|
|
154
|
+
level: 3,
|
|
155
|
+
},
|
|
156
|
+
{
|
|
157
|
+
type: 'tip',
|
|
158
|
+
html: 'まずは<code>GPT-4o mini</code>や<code>Gemini 1.5 Flash</code>のような中堅モデルから始め、品質が不十分な場合にのみ上位モデルへ移行することをおすすめします。小型モデルと大型モデルのコスト差は、10〜100倍になることもあります。',
|
|
159
|
+
},
|
|
160
|
+
{
|
|
161
|
+
type: 'paragraph',
|
|
162
|
+
html: 'すべてのタスクが同じモデル品質を必要とするわけではありません。分類・抽出・要約といったタスクは、より小型で安価なモデルでも十分に対応できることが多いです。<code>claude-3-opus</code>や<code>o1</code>のような大規模フロンティアモデルは、品質が結果に直接影響する複雑な推論タスクのために取っておきましょう。',
|
|
163
|
+
},
|
|
164
|
+
],
|
|
165
|
+
};
|
|
166
|
+
|
|
@@ -0,0 +1,166 @@
|
|
|
1
|
+
import type { WithContext, FAQPage, HowToThing, SoftwareApplication } from 'schema-dts';
|
|
2
|
+
import type { ToolLocaleContent } from '../../../types';
|
|
3
|
+
import type { LlmCostCalculatorUI } from '../ui';
|
|
4
|
+
|
|
5
|
+
const slug = 'llm-cost-calculator';
|
|
6
|
+
const title = 'LLM 비용 계산기. AI 모델 API 가격 추정 도구';
|
|
7
|
+
const description =
|
|
8
|
+
'LLM API 호출 비용을 무료로 추산할 수 있는 온라인 도구입니다. GPT-4o, Claude, Gemini, Llama 등을 백만 토큰당 실제 가격으로 비교해 보세요.';
|
|
9
|
+
|
|
10
|
+
const faqData = [
|
|
11
|
+
{
|
|
12
|
+
question: 'LLM API 비용은 어떻게 계산되나요?',
|
|
13
|
+
answer:
|
|
14
|
+
'LLM API는 입력 토큰(프롬프트)과 출력 토큰(응답)을 별도로 청구합니다. 요청당 총 비용은 (입력 토큰 × 입력 가격 + 출력 토큰 × 출력 가격) / 1,000,000으로 계산됩니다. 여기에 요청 수를 곱하면 월간 총 비용을 구할 수 있습니다.',
|
|
15
|
+
},
|
|
16
|
+
{
|
|
17
|
+
question: '토큰이란 무엇이며, 단어와 어떤 관계가 있나요?',
|
|
18
|
+
answer:
|
|
19
|
+
'토큰은 언어 모델이 처리하는 텍스트의 기본 단위입니다. 영어 기준으로 평균 1 토큰은 약 0.75 단어에 해당하므로, 1,000 토큰 ≈ 750 단어입니다. 가격은 백만 토큰당($/1M)으로 표시되며, 이것이 모든 제공업체에서 통용되는 표준 단위입니다.',
|
|
20
|
+
},
|
|
21
|
+
{
|
|
22
|
+
question: '출력 토큰이 입력 토큰보다 더 비싼 이유는 무엇인가요?',
|
|
23
|
+
answer:
|
|
24
|
+
'텍스트를 생성(출력)할 때 모델은 각 토큰을 순서대로 계산해야 하기 때문에, 입력을 읽는 것보다 연산 부하가 큽니다. 대부분의 제공업체에서는 출력 토큰에 입력 토큰보다 3~5배 높은 요금을 부과합니다.',
|
|
25
|
+
},
|
|
26
|
+
{
|
|
27
|
+
question: 'LLM API 비용을 줄이려면 어떻게 해야 하나요?',
|
|
28
|
+
answer:
|
|
29
|
+
'품질 요건을 충족하는 가장 작은 모델을 사용하세요. 반복되는 프롬프트는 가능하면 캐싱을 활용하세요. 시스템 프롬프트 길이를 최소화하고 불필요한 컨텍스트는 제거하세요. 단순 분류나 추출 작업에는 GPT-4o mini나 Gemini Flash 같은 경량 모델이 상당한 비용 절감 효과를 제공합니다.',
|
|
30
|
+
},
|
|
31
|
+
];
|
|
32
|
+
|
|
33
|
+
const howToData = [
|
|
34
|
+
{
|
|
35
|
+
name: '모델 선택',
|
|
36
|
+
text: '그룹화된 드롭다운에서 사용할 AI 모델을 선택하세요. 모델은 제공업체별로 정리되어 있습니다.',
|
|
37
|
+
},
|
|
38
|
+
{
|
|
39
|
+
name: '토큰 수 입력',
|
|
40
|
+
text: '예상 입력 토큰 수(프롬프트)와 출력 토큰 수(응답)를 입력하세요. 각 필드 아래에 단어 수 추정값이 표시됩니다.',
|
|
41
|
+
},
|
|
42
|
+
{
|
|
43
|
+
name: '요청 수 설정',
|
|
44
|
+
text: '슬라이더 또는 숫자 입력 필드를 사용해 예상 API 호출 수를 입력하세요. 총 비용이 실시간으로 업데이트됩니다.',
|
|
45
|
+
},
|
|
46
|
+
];
|
|
47
|
+
|
|
48
|
+
const faqSchema: WithContext<FAQPage> = {
|
|
49
|
+
'@context': 'https://schema.org',
|
|
50
|
+
'@type': 'FAQPage',
|
|
51
|
+
mainEntity: faqData.map((item) => ({
|
|
52
|
+
'@type': 'Question',
|
|
53
|
+
name: item.question,
|
|
54
|
+
acceptedAnswer: { '@type': 'Answer', text: item.answer },
|
|
55
|
+
})),
|
|
56
|
+
};
|
|
57
|
+
|
|
58
|
+
const howToSchema: WithContext<HowToThing> = {
|
|
59
|
+
'@context': 'https://schema.org',
|
|
60
|
+
'@type': 'HowTo',
|
|
61
|
+
name: title,
|
|
62
|
+
description,
|
|
63
|
+
step: howToData.map((step, i) => ({
|
|
64
|
+
'@type': 'HowToStep',
|
|
65
|
+
position: i + 1,
|
|
66
|
+
name: step.name,
|
|
67
|
+
text: step.text,
|
|
68
|
+
})),
|
|
69
|
+
};
|
|
70
|
+
|
|
71
|
+
const appSchema: WithContext<SoftwareApplication> = {
|
|
72
|
+
'@context': 'https://schema.org',
|
|
73
|
+
'@type': 'SoftwareApplication',
|
|
74
|
+
name: title,
|
|
75
|
+
description,
|
|
76
|
+
applicationCategory: 'DeveloperApplication',
|
|
77
|
+
operatingSystem: 'All',
|
|
78
|
+
offers: { '@type': 'Offer', price: '0', priceCurrency: 'EUR' },
|
|
79
|
+
inLanguage: 'ko',
|
|
80
|
+
};
|
|
81
|
+
|
|
82
|
+
const ui: LlmCostCalculatorUI = {
|
|
83
|
+
labelModel: 'LLM 모델',
|
|
84
|
+
labelInputTokens: '입력 토큰',
|
|
85
|
+
labelOutputTokens: '출력 토큰',
|
|
86
|
+
labelRequests: '요청 수',
|
|
87
|
+
unitWords: '단어',
|
|
88
|
+
labelCostPerRequest: '요청당 비용',
|
|
89
|
+
labelTotal: '예상 총 비용',
|
|
90
|
+
labelInput: '입력',
|
|
91
|
+
labelOutput: '출력',
|
|
92
|
+
};
|
|
93
|
+
|
|
94
|
+
export const content: ToolLocaleContent<LlmCostCalculatorUI> = {
|
|
95
|
+
slug,
|
|
96
|
+
title,
|
|
97
|
+
description,
|
|
98
|
+
ui,
|
|
99
|
+
faqTitle: '자주 묻는 질문',
|
|
100
|
+
faq: faqData,
|
|
101
|
+
bibliographyTitle: '참고 자료 및 가격 출처',
|
|
102
|
+
bibliography: [
|
|
103
|
+
{
|
|
104
|
+
name: 'OpenAI API 가격',
|
|
105
|
+
url: 'https://openai.com/pricing',
|
|
106
|
+
},
|
|
107
|
+
{
|
|
108
|
+
name: 'Anthropic API 가격',
|
|
109
|
+
url: 'https://www.anthropic.com/pricing',
|
|
110
|
+
},
|
|
111
|
+
{
|
|
112
|
+
name: 'Google AI Studio 가격',
|
|
113
|
+
url: 'https://ai.google.dev/pricing',
|
|
114
|
+
},
|
|
115
|
+
{
|
|
116
|
+
name: 'OpenAI 토크나이저',
|
|
117
|
+
url: 'https://platform.openai.com/tokenizer',
|
|
118
|
+
},
|
|
119
|
+
],
|
|
120
|
+
howTo: howToData,
|
|
121
|
+
schemas: [faqSchema, howToSchema, appSchema],
|
|
122
|
+
seo: [
|
|
123
|
+
{
|
|
124
|
+
type: 'title',
|
|
125
|
+
text: 'LLM API 가격 구조 이해하기',
|
|
126
|
+
level: 2,
|
|
127
|
+
},
|
|
128
|
+
{
|
|
129
|
+
type: 'paragraph',
|
|
130
|
+
html: '대형 언어 모델 API는 시간이나 요청 수가 아닌 토큰 사용량을 기준으로 요금을 부과합니다. API 호출 한 번에는 두 가지 비용이 발생합니다. <strong>입력 비용</strong>(프롬프트 처리)과 <strong>출력 비용</strong>(응답 생성)입니다. 이 차이를 이해하는 것이 월간 비용을 정확하게 예측하는 핵심입니다.',
|
|
131
|
+
},
|
|
132
|
+
{
|
|
133
|
+
type: 'title',
|
|
134
|
+
text: '입력 토큰과 출력 토큰 비교',
|
|
135
|
+
level: 3,
|
|
136
|
+
},
|
|
137
|
+
{
|
|
138
|
+
type: 'grid',
|
|
139
|
+
columns: 2,
|
|
140
|
+
},
|
|
141
|
+
{
|
|
142
|
+
type: 'card',
|
|
143
|
+
title: '입력 토큰',
|
|
144
|
+
html: '<p>입력 토큰은 모델에 <strong>전송되는</strong> 모든 내용을 의미합니다. 시스템 프롬프트, 대화 기록, 사용자 메시지가 포함됩니다. 모델이 이를 병렬로 처리하기 때문에 상대적으로 저렴합니다. 200단어 분량의 일반적인 시스템 프롬프트는 약 267개의 입력 토큰에 해당합니다.</p>',
|
|
145
|
+
},
|
|
146
|
+
{
|
|
147
|
+
type: 'card',
|
|
148
|
+
title: '출력 토큰',
|
|
149
|
+
html: '<p>출력 토큰은 하나씩 순서대로 생성되기 때문에 연산 부하가 더 큽니다. 대부분의 제공업체는 출력 토큰에 <strong>3~5배 더 높은</strong> 요금을 부과합니다. 300단어 분량의 응답은 약 400개의 출력 토큰을 생성합니다. 응답을 간결하게 유지하는 것이 가장 효과적인 비용 절감 전략 중 하나입니다.</p>',
|
|
150
|
+
},
|
|
151
|
+
{
|
|
152
|
+
type: 'title',
|
|
153
|
+
text: '예산에 맞는 모델 선택하기',
|
|
154
|
+
level: 3,
|
|
155
|
+
},
|
|
156
|
+
{
|
|
157
|
+
type: 'tip',
|
|
158
|
+
html: '<code>GPT-4o mini</code>나 <code>Gemini 1.5 Flash</code> 같은 중급 모델부터 시작하고, 품질이 부족한 경우에만 상위 모델로 업그레이드하세요. 소형 모델과 대형 모델의 비용 차이는 10~100배에 달할 수 있습니다.',
|
|
159
|
+
},
|
|
160
|
+
{
|
|
161
|
+
type: 'paragraph',
|
|
162
|
+
html: '모든 작업에 동일한 수준의 모델이 필요한 것은 아닙니다. 분류, 추출, 요약 같은 작업은 더 작고 저렴한 모델로도 충분히 처리할 수 있는 경우가 많습니다. <code>claude-3-opus</code>나 <code>o1</code> 같은 대형 프론티어 모델은 품질이 결과에 직접적인 영향을 미치는 복잡한 추론 작업을 위해 아껴두세요.',
|
|
163
|
+
},
|
|
164
|
+
],
|
|
165
|
+
};
|
|
166
|
+
|