@jjlmoya/utils-developer 1.4.0 → 1.5.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_uniqueness.test.ts +81 -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 +2 -1
- 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 +2 -1
- 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 +2 -1
- 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 = 'llm-cost-calculator-nl';
|
|
6
|
+
const title = 'LLM Kostencalculator. Prijsschatter voor AI Model APIs';
|
|
7
|
+
const description =
|
|
8
|
+
'Gratis online tool om de kosten van LLM API-aanroepen te schatten. Vergelijk GPT-4o, Claude, Gemini, Llama en meer met echte tokenprijzen per miljoen tokens.';
|
|
9
|
+
|
|
10
|
+
const faqData = [
|
|
11
|
+
{
|
|
12
|
+
question: 'Hoe worden de kosten van een LLM API berekend?',
|
|
13
|
+
answer:
|
|
14
|
+
'LLM APIs rekenen afzonderlijk voor invoer-tokens (de prompt) en uitvoer-tokens (het antwoord). De totale kosten per verzoek zijn: (invoer-tokens × invoerprijs + uitvoer-tokens × uitvoerprijs) / 1.000.000. Vermenigvuldig dit met het aantal verzoeken om de totale maandelijkse kosten te berekenen.',
|
|
15
|
+
},
|
|
16
|
+
{
|
|
17
|
+
question: 'Wat zijn tokens en hoe verhouden ze zich tot woorden?',
|
|
18
|
+
answer:
|
|
19
|
+
'Een token is de basiseenheid van tekst die een taalmodel verwerkt. Gemiddeld is 1 token gelijk aan ongeveer 0,75 woord in het Engels, dus 1.000 tokens ≈ 750 woorden. Prijzen worden opgegeven per miljoen tokens ($/1M), de standaard prijseenheid bij alle aanbieders.',
|
|
20
|
+
},
|
|
21
|
+
{
|
|
22
|
+
question: 'Waarom zijn uitvoer-tokens duurder dan invoer-tokens?',
|
|
23
|
+
answer:
|
|
24
|
+
'Bij het genereren van tekst (uitvoer) moet het model elke token achtereenvolgens berekenen, wat rekenintensief is dan het lezen van de invoer. De meeste aanbieders rekenen 3 tot 5 keer meer voor uitvoer-tokens dan voor invoer-tokens.',
|
|
25
|
+
},
|
|
26
|
+
{
|
|
27
|
+
question: 'Hoe kan ik mijn LLM API-kosten verlagen?',
|
|
28
|
+
answer:
|
|
29
|
+
'Gebruik het kleinste model dat voldoet aan jouw kwaliteitseisen. Sla herhaalde prompts op in een cache wanneer mogelijk. Houd de systeemprompt zo kort mogelijk en vermijd onnodige context. Voor eenvoudige classificatie- of extractietaken bieden kleinere modellen zoals GPT-4o mini of Gemini Flash aanzienlijke besparingen.',
|
|
30
|
+
},
|
|
31
|
+
];
|
|
32
|
+
|
|
33
|
+
const howToData = [
|
|
34
|
+
{
|
|
35
|
+
name: 'Selecteer een model',
|
|
36
|
+
text: 'Kies het AI-model dat je wilt gebruiken uit de gegroepeerde keuzelijst. Modellen zijn georganiseerd per aanbieder.',
|
|
37
|
+
},
|
|
38
|
+
{
|
|
39
|
+
name: 'Voer het aantal tokens in',
|
|
40
|
+
text: 'Voer het verwachte aantal invoer-tokens (jouw prompt) en uitvoer-tokens (het antwoord) in. Onder elk veld verschijnt een schatting in woorden.',
|
|
41
|
+
},
|
|
42
|
+
{
|
|
43
|
+
name: 'Stel het aantal verzoeken in',
|
|
44
|
+
text: 'Gebruik de schuifregelaar of het getalveld om in te voeren hoeveel API-aanroepen je verwacht. De totale kosten worden realtime bijgewerkt.',
|
|
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: 'nl',
|
|
80
|
+
};
|
|
81
|
+
|
|
82
|
+
const ui: LlmCostCalculatorUI = {
|
|
83
|
+
labelModel: 'LLM-model',
|
|
84
|
+
labelInputTokens: 'Invoer tokens',
|
|
85
|
+
labelOutputTokens: 'Uitvoer tokens',
|
|
86
|
+
labelRequests: 'Aantal verzoeken',
|
|
87
|
+
unitWords: 'woorden',
|
|
88
|
+
labelCostPerRequest: 'Kosten per verzoek',
|
|
89
|
+
labelTotal: 'Geschatte totale kosten',
|
|
90
|
+
labelInput: 'Invoer',
|
|
91
|
+
labelOutput: 'Uitvoer',
|
|
92
|
+
};
|
|
93
|
+
|
|
94
|
+
export const content: ToolLocaleContent<LlmCostCalculatorUI> = {
|
|
95
|
+
slug,
|
|
96
|
+
title,
|
|
97
|
+
description,
|
|
98
|
+
ui,
|
|
99
|
+
faqTitle: 'Veelgestelde vragen',
|
|
100
|
+
faq: faqData,
|
|
101
|
+
bibliographyTitle: 'Bronnen en prijsreferenties',
|
|
102
|
+
bibliography: [
|
|
103
|
+
{
|
|
104
|
+
name: 'OpenAI API-prijzen',
|
|
105
|
+
url: 'https://openai.com/pricing',
|
|
106
|
+
},
|
|
107
|
+
{
|
|
108
|
+
name: 'Anthropic API-prijzen',
|
|
109
|
+
url: 'https://www.anthropic.com/pricing',
|
|
110
|
+
},
|
|
111
|
+
{
|
|
112
|
+
name: 'Google AI Studio prijzen',
|
|
113
|
+
url: 'https://ai.google.dev/pricing',
|
|
114
|
+
},
|
|
115
|
+
{
|
|
116
|
+
name: 'OpenAI Tokenizer',
|
|
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-prijzen begrijpen',
|
|
126
|
+
level: 2,
|
|
127
|
+
},
|
|
128
|
+
{
|
|
129
|
+
type: 'paragraph',
|
|
130
|
+
html: 'APIs voor grote taalmodellen rekenen op basis van tokengebruik, niet op basis van tijd of het aantal verzoeken. Elke API-aanroep heeft twee kostencomponenten: de <strong>invoerkosten</strong> (verwerking van jouw prompt) en de <strong>uitvoerkosten</strong> (generatie van het antwoord). Dit onderscheid begrijpen is de sleutel tot een nauwkeurige schatting van je maandelijkse rekening.',
|
|
131
|
+
},
|
|
132
|
+
{
|
|
133
|
+
type: 'title',
|
|
134
|
+
text: 'Invoer tokens versus uitvoer-tokens',
|
|
135
|
+
level: 3,
|
|
136
|
+
},
|
|
137
|
+
{
|
|
138
|
+
type: 'grid',
|
|
139
|
+
columns: 2,
|
|
140
|
+
},
|
|
141
|
+
{
|
|
142
|
+
type: 'card',
|
|
143
|
+
title: 'Invoer tokens',
|
|
144
|
+
html: '<p>Invoer tokens vertegenwoordigen alles wat <strong>naar</strong> het model wordt gestuurd: jouw systeemprompt, de gespreksgeschiedenis en het gebruikersbericht. Ze zijn goedkoper omdat het model ze parallel verwerkt. Een typische systeemprompt van 200 woorden kost ongeveer 267 invoer-tokens.</p>',
|
|
145
|
+
},
|
|
146
|
+
{
|
|
147
|
+
type: 'card',
|
|
148
|
+
title: 'Uitvoer tokens',
|
|
149
|
+
html: '<p>Uitvoer tokens worden één voor één achtereenvolgens gegenereerd, wat ze rekenintensief maakt. De meeste aanbieders rekenen <strong>3 tot 5 keer meer</strong> voor uitvoer-tokens. Een antwoord van 300 woorden genereert ongeveer 400 uitvoer-tokens. Antwoorden beknopt houden is een van de meest effectieve strategieën om kosten te besparen.</p>',
|
|
150
|
+
},
|
|
151
|
+
{
|
|
152
|
+
type: 'title',
|
|
153
|
+
text: 'Het juiste model kiezen voor jouw budget',
|
|
154
|
+
level: 3,
|
|
155
|
+
},
|
|
156
|
+
{
|
|
157
|
+
type: 'tip',
|
|
158
|
+
html: 'Begin met een capabel middenklasse model zoals <code>GPT-4o mini</code> of <code>Gemini 1.5 Flash</code> en schakel alleen over naar een groter model als de kwaliteit tekortschiet. Het kostenverschil tussen een klein en groot model kan 10 tot 100 keer zijn.',
|
|
159
|
+
},
|
|
160
|
+
{
|
|
161
|
+
type: 'paragraph',
|
|
162
|
+
html: 'Niet alle taken vereisen dezelfde modelkwaliteit. Classificatie, extractie en samenvattingen werken vaak prima met kleinere, goedkopere modellen. Bewaar grote frontier-modellen zoals <code>claude-3-opus</code> of <code>o1</code> voor complexe redeneeruitgaven waarbij kwaliteit direct het resultaat beïnvloedt.',
|
|
163
|
+
},
|
|
164
|
+
],
|
|
165
|
+
};
|
|
166
|
+
|
|
@@ -0,0 +1,165 @@
|
|
|
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-kosztow-llm';
|
|
6
|
+
const title = 'Kalkulator Kosztów LLM. Estymator Cen Modeli AI';
|
|
7
|
+
const description =
|
|
8
|
+
'Bezpłatne narzędzie online do oszacowania kosztów wywoływania interfejsów API LLM. Porównuj GPT-4o, Claude, Gemini, Llama i inne z rzeczywistymi cenami tokenów za milion tokenów.';
|
|
9
|
+
|
|
10
|
+
const faqData = [
|
|
11
|
+
{
|
|
12
|
+
question: 'Jak obliczany jest koszt interfejsu API LLM?',
|
|
13
|
+
answer:
|
|
14
|
+
'Interfejsy API LLM pobierają opłaty oddzielnie za tokeny wejściowe (prompt) i tokeny wyjściowe (odpowiedź). Całkowity koszt na żądanie to: (tokeny wejściowe × cena wejściowa + tokeny wyjściowe × cena wyjściowa) / 1 000 000. Pomnóż przez liczbę żądań, aby uzyskać całkowity miesięczny koszt.',
|
|
15
|
+
},
|
|
16
|
+
{
|
|
17
|
+
question: 'Co to są tokeny i jak się mają do słów?',
|
|
18
|
+
answer:
|
|
19
|
+
'Token to podstawowa jednostka tekstu, którą przetwarza model językowy. Przeciętnie 1 token równa się około 0,75 słowa w języku angielskim, więc 1000 tokenów ≈ 750 słów. Ceny są podawane za milion tokenów ($/1M), co jest standardową jednostką cen na wszystkich platformach.',
|
|
20
|
+
},
|
|
21
|
+
{
|
|
22
|
+
question: 'Dlaczego tokeny wyjściowe są droższe niż tokeny wejściowe?',
|
|
23
|
+
answer:
|
|
24
|
+
'Generowanie tekstu (wyjście) wymaga, aby model obliczył każdy token sekwencyjnie, co jest bardziej intensywne obliczeniowo niż czytanie wejścia. Większość dostawców pobiera 3-5 razy więcej za tokeny wyjściowe niż tokeny wejściowe.',
|
|
25
|
+
},
|
|
26
|
+
{
|
|
27
|
+
question: 'Jak mogę zmniejszyć koszty API LLM?',
|
|
28
|
+
answer:
|
|
29
|
+
'Użyj najmniejszego modelu, który spełnia Twoje wymagania jakościowe. Jeśli to możliwe, buforuj powtórzone prompty. Minimalizuj długość system prompt i unikaj niepotrzebnego kontekstu. W przypadku prostych zadań klasyfikacji lub ekstrakcji, mniejsze modele, takie jak GPT-4o mini lub Gemini Flash, oferują znaczne oszczędności.',
|
|
30
|
+
},
|
|
31
|
+
];
|
|
32
|
+
|
|
33
|
+
const howToData = [
|
|
34
|
+
{
|
|
35
|
+
name: 'Wybierz model',
|
|
36
|
+
text: 'Wybierz model AI, który planujesz użyć, z rozwijanego menu pogrupowanego. Modele są zorganizowane według dostawcy.',
|
|
37
|
+
},
|
|
38
|
+
{
|
|
39
|
+
name: 'Wprowadź liczbę tokenów',
|
|
40
|
+
text: 'Wprowadź oczekiwaną liczbę tokenów wejściowych (Twój prompt) i tokenów wyjściowych (odpowiedź). Poniżej każdego pola pojawią się oszacowania słów.',
|
|
41
|
+
},
|
|
42
|
+
{
|
|
43
|
+
name: 'Ustaw liczbę żądań',
|
|
44
|
+
text: 'Użyj suwaka lub pola liczby, aby wprowadzić, ile połączeń API spodziewasz się. Całkowity koszt aktualizuje się w czasie rzeczywistym.',
|
|
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: 'pl',
|
|
80
|
+
};
|
|
81
|
+
|
|
82
|
+
const ui: LlmCostCalculatorUI = {
|
|
83
|
+
labelModel: 'Model LLM',
|
|
84
|
+
labelInputTokens: 'Tokeny Wejściowe',
|
|
85
|
+
labelOutputTokens: 'Tokeny Wyjściowe',
|
|
86
|
+
labelRequests: 'Liczba Żądań',
|
|
87
|
+
unitWords: 'słowa',
|
|
88
|
+
labelCostPerRequest: 'Koszt za Żądanie',
|
|
89
|
+
labelTotal: 'Szacunkowy Całkowity Koszt',
|
|
90
|
+
labelInput: 'Wejście',
|
|
91
|
+
labelOutput: 'Wyjście',
|
|
92
|
+
};
|
|
93
|
+
|
|
94
|
+
export const content: ToolLocaleContent<LlmCostCalculatorUI> = {
|
|
95
|
+
slug,
|
|
96
|
+
title,
|
|
97
|
+
description,
|
|
98
|
+
ui,
|
|
99
|
+
faqTitle: 'Często Zadawane Pytania',
|
|
100
|
+
faq: faqData,
|
|
101
|
+
bibliographyTitle: 'Referencje i Źródła Cen',
|
|
102
|
+
bibliography: [
|
|
103
|
+
{
|
|
104
|
+
name: 'Ceny API OpenAI',
|
|
105
|
+
url: 'https://openai.com/pricing',
|
|
106
|
+
},
|
|
107
|
+
{
|
|
108
|
+
name: 'Ceny API Anthropic',
|
|
109
|
+
url: 'https://www.anthropic.com/pricing',
|
|
110
|
+
},
|
|
111
|
+
{
|
|
112
|
+
name: 'Ceny 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: 'Zrozumienie cen API LLM',
|
|
126
|
+
level: 2,
|
|
127
|
+
},
|
|
128
|
+
{
|
|
129
|
+
type: 'paragraph',
|
|
130
|
+
html: 'Interfejsy API dużych modeli językowych pobierają opłaty na podstawie użycia tokenów, a nie czasu lub żądań. Każde połączenie API ma dwa koszty: <strong>koszt wejścia</strong> (przetwarzanie Twojego promptu) i <strong>koszt wyjścia</strong> (generowanie odpowiedzi). Zrozumienie tego podziału jest kluczowe do dokładnego oszacowania Twojego miesięcznego rachunku.',
|
|
131
|
+
},
|
|
132
|
+
{
|
|
133
|
+
type: 'title',
|
|
134
|
+
text: 'Tokeny wejściowe a tokeny wyjściowe',
|
|
135
|
+
level: 3,
|
|
136
|
+
},
|
|
137
|
+
{
|
|
138
|
+
type: 'grid',
|
|
139
|
+
columns: 2,
|
|
140
|
+
},
|
|
141
|
+
{
|
|
142
|
+
type: 'card',
|
|
143
|
+
title: 'Tokeny wejściowe',
|
|
144
|
+
html: '<p>Tokeny wejściowe reprezentują wszystko wysłane <strong>do</strong> modelu: Twój system prompt, historię konwersacji i komunikat użytkownika. Są tańsze, ponieważ model przetwarza je równolegle. Typowy system prompt 200 słów kosztuje około 267 tokenów wejściowych.</p>',
|
|
145
|
+
},
|
|
146
|
+
{
|
|
147
|
+
type: 'card',
|
|
148
|
+
title: 'Tokeny wyjściowe',
|
|
149
|
+
html: '<p>Tokeny wyjściowe są generowane jeden po drugim w sekwencji, co czyni je bardziej kosztownym obliczeniowo. Większość dostawców pobiera <strong>3-5 razy więcej</strong> za tokeny wyjściowe. Odpowiedź 300 słów generuje około 400 tokenów wyjściowych. Utrzymanie odpowiedzi zwięzłe to jedna z najskuteczniejszych strategii obniżania kosztów.</p>',
|
|
150
|
+
},
|
|
151
|
+
{
|
|
152
|
+
type: 'title',
|
|
153
|
+
text: 'Wybór właściwego modelu do Twojego budżetu',
|
|
154
|
+
level: 3,
|
|
155
|
+
},
|
|
156
|
+
{
|
|
157
|
+
type: 'tip',
|
|
158
|
+
html: 'Zacznij od zdolnego modelu średniej klasy, takiego jak <code>GPT-4o mini</code> lub <code>Gemini 1.5 Flash</code>, i uaktualnij tylko wtedy, gdy jakość spadnie. Różnica w kosztach między małym a dużym modelem może wynosić 10-100 razy.',
|
|
159
|
+
},
|
|
160
|
+
{
|
|
161
|
+
type: 'paragraph',
|
|
162
|
+
html: 'Nie wszystkie zadania wymagają tej samej jakości modelu. Zadania klasyfikacji, ekstrakcji i streszczania często działają dobrze z mniejszymi, tańszymi modelami. Zarezerwuj duże modele graniczne, takie jak <code>claude-3-opus</code> lub <code>o1</code>, na złożone zadania rozumowania, gdzie jakość bezpośrednio wpływa na wyniki.',
|
|
163
|
+
},
|
|
164
|
+
],
|
|
165
|
+
};
|
|
@@ -0,0 +1,165 @@
|
|
|
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 = 'calculadora-custo-llm';
|
|
6
|
+
const title = 'Calculadora de Custo LLM. Estimador de Preços de Modelos IA';
|
|
7
|
+
const description =
|
|
8
|
+
'Ferramenta online gratuita para estimar o custo de chamar APIs LLM. Compare GPT-4o, Claude, Gemini, Llama e mais com preços reais de tokens por milhão.';
|
|
9
|
+
|
|
10
|
+
const faqData = [
|
|
11
|
+
{
|
|
12
|
+
question: 'Como é calculado o custo da API LLM?',
|
|
13
|
+
answer:
|
|
14
|
+
'As APIs LLM cobram separadamente para tokens de entrada (seu prompt) e tokens de saída (a resposta). O custo total por solicitação é: (tokens de entrada × preço de entrada + tokens de saída × preço de saída) / 1.000.000. Multiplique pelo número de solicitações para obter o custo mensal total.',
|
|
15
|
+
},
|
|
16
|
+
{
|
|
17
|
+
question: 'O que são tokens e como se relacionam com palavras?',
|
|
18
|
+
answer:
|
|
19
|
+
'Um token é a unidade básica de texto que um modelo de linguagem processa. Em média, 1 token equivale a cerca de 0,75 palavras em inglês, então 1.000 tokens ≈ 750 palavras. Os preços são listados por milhão de tokens ($/1M), que é a unidade de preço padrão em todos os provedores.',
|
|
20
|
+
},
|
|
21
|
+
{
|
|
22
|
+
question: 'Por que os tokens de saída são mais caros que os de entrada?',
|
|
23
|
+
answer:
|
|
24
|
+
'Gerar texto (saída) requer que o modelo compute cada token sequencialmente, o que é computacionalmente mais intensivo do que ler a entrada. A maioria dos provedores cobra 3–5x mais para tokens de saída do que de entrada.',
|
|
25
|
+
},
|
|
26
|
+
{
|
|
27
|
+
question: 'Como posso reduzir meus custos de API LLM?',
|
|
28
|
+
answer:
|
|
29
|
+
'Use o menor modelo que atenda a seus requisitos de qualidade. Cache prompts repetidos quando possível. Minimize o comprimento do prompt do sistema e evite contexto desnecessário. Para tarefas simples de classificação ou extração, modelos menores como GPT-4o mini ou Gemini Flash oferecem economias significativas.',
|
|
30
|
+
},
|
|
31
|
+
];
|
|
32
|
+
|
|
33
|
+
const howToData = [
|
|
34
|
+
{
|
|
35
|
+
name: 'Selecione um modelo',
|
|
36
|
+
text: 'Escolha o modelo IA que você planeja usar no dropdown agrupado. Os modelos são organizados por provedor.',
|
|
37
|
+
},
|
|
38
|
+
{
|
|
39
|
+
name: 'Insira contagens de tokens',
|
|
40
|
+
text: 'Digite o número esperado de tokens de entrada (seu prompt) e tokens de saída (a resposta). Estimativas de palavras aparecem abaixo de cada campo.',
|
|
41
|
+
},
|
|
42
|
+
{
|
|
43
|
+
name: 'Defina o número de solicitações',
|
|
44
|
+
text: 'Use o slider ou entrada numérica para inserir quantas chamadas de API você espera. O custo total é atualizado em tempo real.',
|
|
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: 'pt',
|
|
80
|
+
};
|
|
81
|
+
|
|
82
|
+
const ui: LlmCostCalculatorUI = {
|
|
83
|
+
labelModel: 'Modelo LLM',
|
|
84
|
+
labelInputTokens: 'Tokens de Entrada',
|
|
85
|
+
labelOutputTokens: 'Tokens de Saída',
|
|
86
|
+
labelRequests: 'Número de Solicitações',
|
|
87
|
+
unitWords: 'palavras',
|
|
88
|
+
labelCostPerRequest: 'Custo por Solicitação',
|
|
89
|
+
labelTotal: 'Custo Total Estimado',
|
|
90
|
+
labelInput: 'Entrada',
|
|
91
|
+
labelOutput: 'Saída',
|
|
92
|
+
};
|
|
93
|
+
|
|
94
|
+
export const content: ToolLocaleContent<LlmCostCalculatorUI> = {
|
|
95
|
+
slug,
|
|
96
|
+
title,
|
|
97
|
+
description,
|
|
98
|
+
ui,
|
|
99
|
+
faqTitle: 'Perguntas Frequentes',
|
|
100
|
+
faq: faqData,
|
|
101
|
+
bibliographyTitle: 'Referências e Fontes de Preços',
|
|
102
|
+
bibliography: [
|
|
103
|
+
{
|
|
104
|
+
name: 'Preços de API OpenAI',
|
|
105
|
+
url: 'https://openai.com/pricing',
|
|
106
|
+
},
|
|
107
|
+
{
|
|
108
|
+
name: 'Preços de API Anthropic',
|
|
109
|
+
url: 'https://www.anthropic.com/pricing',
|
|
110
|
+
},
|
|
111
|
+
{
|
|
112
|
+
name: 'Preços Google AI Studio',
|
|
113
|
+
url: 'https://ai.google.dev/pricing',
|
|
114
|
+
},
|
|
115
|
+
{
|
|
116
|
+
name: 'Tokenizador 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: 'Entendendo preços de API LLM',
|
|
126
|
+
level: 2,
|
|
127
|
+
},
|
|
128
|
+
{
|
|
129
|
+
type: 'paragraph',
|
|
130
|
+
html: 'As APIs de Modelo de Linguagem Grande cobram com base no uso de tokens, não em tempo ou solicitações. Cada chamada de API tem dois custos: o <strong>custo de entrada</strong> (processando seu prompt) e o <strong>custo de saída</strong> (gerando a resposta). Entender essa divisão é fundamental para estimar sua fatura mensal com precisão.',
|
|
131
|
+
},
|
|
132
|
+
{
|
|
133
|
+
type: 'title',
|
|
134
|
+
text: 'Tokens de entrada vs tokens de saída',
|
|
135
|
+
level: 3,
|
|
136
|
+
},
|
|
137
|
+
{
|
|
138
|
+
type: 'grid',
|
|
139
|
+
columns: 2,
|
|
140
|
+
},
|
|
141
|
+
{
|
|
142
|
+
type: 'card',
|
|
143
|
+
title: 'Tokens de entrada',
|
|
144
|
+
html: '<p>Os tokens de entrada representam tudo enviado <strong>para</strong> o modelo: seu prompt do sistema, histórico de conversa e mensagem do usuário. Eles são mais baratos porque o modelo os processa em paralelo. Um prompt de sistema típico de 200 palavras custa aproximadamente 267 tokens de entrada.</p>',
|
|
145
|
+
},
|
|
146
|
+
{
|
|
147
|
+
type: 'card',
|
|
148
|
+
title: 'Tokens de saída',
|
|
149
|
+
html: '<p>Os tokens de saída são gerados um por um em sequência, tornando-os computacionalmente mais caros. A maioria dos provedores cobra <strong>3–5× mais</strong> para tokens de saída. Uma resposta de 300 palavras gera aproximadamente 400 tokens de saída. Manter as respostas concisas é uma das estratégias mais eficazes de economia de custos.</p>',
|
|
150
|
+
},
|
|
151
|
+
{
|
|
152
|
+
type: 'title',
|
|
153
|
+
text: 'Escolhendo o modelo certo para seu orçamento',
|
|
154
|
+
level: 3,
|
|
155
|
+
},
|
|
156
|
+
{
|
|
157
|
+
type: 'tip',
|
|
158
|
+
html: 'Comece com um modelo de nível médio capaz como <code>GPT-4o mini</code> ou <code>Gemini 1.5 Flash</code> e atualize apenas se a qualidade for insuficiente. A diferença de custo entre um modelo pequeno e grande pode ser 10–100×.',
|
|
159
|
+
},
|
|
160
|
+
{
|
|
161
|
+
type: 'paragraph',
|
|
162
|
+
html: 'Nem todas as tarefas requerem a mesma qualidade de modelo. Tarefas de classificação, extração e resumo geralmente funcionam bem com modelos menores e mais baratos. Reserve grandes modelos de fronteira como <code>claude-3-opus</code> ou <code>o1</code> para tarefas de raciocínio complexo onde a qualidade afeta diretamente os resultados.',
|
|
163
|
+
},
|
|
164
|
+
],
|
|
165
|
+
};
|
|
@@ -0,0 +1,165 @@
|
|
|
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 = 'kalkulyator-stoimosti-llm';
|
|
6
|
+
const title = 'Калькулятор Стоимости LLM. Оценитель Цен AI Моделей';
|
|
7
|
+
const description =
|
|
8
|
+
'Бесплатный онлайн инструмент для оценки стоимости вызовов API LLM. Сравните GPT-4o, Claude, Gemini, Llama и другие с реальными ценами токенов за миллион.';
|
|
9
|
+
|
|
10
|
+
const faqData = [
|
|
11
|
+
{
|
|
12
|
+
question: 'Как рассчитывается стоимость API LLM?',
|
|
13
|
+
answer:
|
|
14
|
+
'API LLM взимают отдельную плату за входные токены (ваш промпт) и выходные токены (ответ). Общая стоимость за запрос: (входные токены × цена входа + выходные токены × цена выхода) / 1,000,000. Умножьте на количество запросов, чтобы получить общую ежемесячную стоимость.',
|
|
15
|
+
},
|
|
16
|
+
{
|
|
17
|
+
question: 'Что такое токены и как они соотносятся со словами?',
|
|
18
|
+
answer:
|
|
19
|
+
'Токен - это основная единица текста, которую обрабатывает языковая модель. В среднем 1 токен равен примерно 0,75 слова на английском, поэтому 1000 токенов ≈ 750 слов. Цены указаны за миллион токенов ($/1M), что является стандартной единицей ценообразования у всех провайдеров.',
|
|
20
|
+
},
|
|
21
|
+
{
|
|
22
|
+
question: 'Почему выходные токены дороже входных?',
|
|
23
|
+
answer:
|
|
24
|
+
'Генерирование текста (выход) требует, чтобы модель последовательно вычисляла каждый токен, что вычислительно более интенсивно, чем чтение входа. Большинство провайдеров взимают в 3–5 раз больше за выходные токены, чем за входные.',
|
|
25
|
+
},
|
|
26
|
+
{
|
|
27
|
+
question: 'Как я могу снизить свои расходы на API LLM?',
|
|
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: 'ru',
|
|
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: 'Понимание ценообразования API LLM',
|
|
126
|
+
level: 2,
|
|
127
|
+
},
|
|
128
|
+
{
|
|
129
|
+
type: 'paragraph',
|
|
130
|
+
html: 'API больших языковых моделей взимают плату на основе использования токенов, а не времени или количества запросов. Каждый вызов API имеет две стоимости: <strong>входная стоимость</strong> (обработка вашего промпта) и <strong>выходная стоимость</strong> (генерирование ответа). Понимание этого разделения критически важно для точной оценки вашего ежемесячного счета.',
|
|
131
|
+
},
|
|
132
|
+
{
|
|
133
|
+
type: 'title',
|
|
134
|
+
text: 'Входные токены vs выходные токены',
|
|
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
|
+
};
|