1
1
namespace ResXManager . Translators ;
2
2
3
- using global ::Microsoft . DeepDev ;
3
+ using global ::Microsoft . ML . Tokenizers ;
4
4
using Newtonsoft . Json ;
5
5
using ResXManager . Infrastructure ;
6
6
using System ;
@@ -138,11 +138,11 @@ private sealed class ChatCompletionsResponse
138
138
139
139
private async Task TranslateUsingChatModel ( ITranslationSession translationSession , HttpClient client )
140
140
{
141
- const string ApiVersion = "2023-05-15 " ;
141
+ const string ApiVersion = "2024-06-01 " ;
142
142
var endpointUri = new Uri ( $ "/openai/deployments/{ ModelDeploymentName } /chat/completions?api-version={ ApiVersion } ", UriKind . Relative ) ;
143
- var tokenizer = await TokenizerBuilder . CreateByModelNameAsync (
143
+ var tokenizer = TiktokenTokenizer . CreateForModel (
144
144
ModelName ?? throw new InvalidOperationException ( "No model name provided in configuration!" )
145
- ) . ConfigureAwait ( false ) ;
145
+ ) ;
146
146
147
147
var retries = 0 ;
148
148
@@ -200,7 +200,7 @@ private async Task TranslateUsingChatModel(ITranslationSession translationSessio
200
200
}
201
201
202
202
private IEnumerable < ( ChatMessage message , ICollection < ITranslationItem > items ) > PackChatModelMessagesIntoBatches (
203
- ITranslationSession translationSession , IEnumerable < ITranslationItem > items , CultureInfo targetCulture , ITokenizer tokenizer
203
+ ITranslationSession translationSession , IEnumerable < ITranslationItem > items , CultureInfo targetCulture , TiktokenTokenizer tokenizer
204
204
)
205
205
{
206
206
var batchItems = new List < ITranslationItem > ( ) ;
@@ -209,7 +209,7 @@ private async Task TranslateUsingChatModel(ITranslationSession translationSessio
209
209
210
210
foreach ( var item in items )
211
211
{
212
- var currentBatch = batchItems . Concat ( new [ ] { item } ) . ToList ( ) ;
212
+ var currentBatch = batchItems . Concat ( [ item ] ) . ToList ( ) ;
213
213
214
214
var currentMessage = GenerateChatModelMessageForTranslations ( translationSession , currentBatch , targetCulture ) ;
215
215
if ( currentMessage ? . Content is null )
@@ -218,7 +218,7 @@ private async Task TranslateUsingChatModel(ITranslationSession translationSessio
218
218
continue ;
219
219
}
220
220
221
- var tokens = tokenizer . Encode ( currentMessage . Content , new List < string > ( ) ) . Count ;
221
+ var tokens = tokenizer . CountTokens ( currentMessage . Content ) ;
222
222
if ( tokens > PromptTokens )
223
223
{
224
224
translationSession . AddMessage ( $ "Prompt for resource would exceed { PromptTokens } tokens: { item . Source . Substring ( 0 , 20 ) } ...") ;
@@ -235,7 +235,7 @@ private async Task TranslateUsingChatModel(ITranslationSession translationSessio
235
235
{
236
236
yield return ( batchMessage , batchItems ) ;
237
237
238
- batchItems = new List < ITranslationItem > ( ) ;
238
+ batchItems = [ ] ;
239
239
batchTokens = 0 ;
240
240
}
241
241
@@ -414,11 +414,11 @@ private sealed class CompletionsResponse
414
414
415
415
private async Task TranslateUsingCompletionsModel ( ITranslationSession translationSession , HttpClient client )
416
416
{
417
- const string ApiVersion = "2023-05-15 " ;
417
+ const string ApiVersion = "2024-06-01 " ;
418
418
var endpointUri = new Uri ( $ "/openai/deployments/{ ModelDeploymentName } /completions?api-version={ ApiVersion } ", UriKind . Relative ) ;
419
- var tokenizer = await TokenizerBuilder . CreateByModelNameAsync (
419
+ var tokenizer = TiktokenTokenizer . CreateForModel (
420
420
ModelName ?? throw new InvalidOperationException ( "No model name provided in configuration!" )
421
- ) . ConfigureAwait ( false ) ;
421
+ ) ;
422
422
423
423
var retries = 0 ;
424
424
@@ -467,7 +467,7 @@ private async Task TranslateUsingCompletionsModel(ITranslationSession translatio
467
467
}
468
468
}
469
469
470
- private IEnumerable < PromptList > PackCompletionModelPromptsIntoBatches ( ITranslationSession translationSession , ITokenizer tokenizer )
470
+ private IEnumerable < PromptList > PackCompletionModelPromptsIntoBatches ( ITranslationSession translationSession , TiktokenTokenizer tokenizer )
471
471
{
472
472
var batchItems = new PromptList ( ) ;
473
473
var batchTokens = 0 ;
@@ -481,7 +481,7 @@ private IEnumerable<PromptList> PackCompletionModelPromptsIntoBatches(ITranslati
481
481
continue ;
482
482
}
483
483
484
- var tokens = tokenizer . Encode ( prompt , new List < string > ( ) ) . Count ;
484
+ var tokens = tokenizer . CountTokens ( prompt ) ;
485
485
486
486
if ( tokens > PromptTokens )
487
487
{
@@ -499,7 +499,7 @@ private IEnumerable<PromptList> PackCompletionModelPromptsIntoBatches(ITranslati
499
499
{
500
500
yield return batchItems ;
501
501
502
- batchItems = new PromptList ( ) ;
502
+ batchItems = [ ] ;
503
503
batchTokens = 0 ;
504
504
}
505
505
@@ -634,12 +634,12 @@ public string? ModelName
634
634
635
635
private static IList < ICredentialItem > GetCredentials ( )
636
636
{
637
- return new ICredentialItem [ ]
638
- {
637
+ return
638
+ [
639
639
new CredentialItem ( "AuthenticationKey" , "Key" ) ,
640
640
new CredentialItem ( "Url" , "Endpoint Url" , false ) ,
641
641
new CredentialItem ( "ModelDeploymentName" , "Model Deployment Name" , false ) ,
642
642
new CredentialItem ( "ModelName" , "Model Name" , false ) ,
643
- } ;
643
+ ] ;
644
644
}
645
645
}
0 commit comments