Skip to content

Commit

Permalink
Updated more stuff.
Browse files Browse the repository at this point in the history
  • Loading branch information
Uralstech committed Nov 13, 2024
1 parent 29d32d9 commit e6a7423
Show file tree
Hide file tree
Showing 25 changed files with 241 additions and 253 deletions.
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ See the installation steps for the [Utilities.Audio](https://github.com/rageAgai

### Documentation

See <https://github.com/Uralstech/UBhashini/blob/master/UBhashini/Packages/com.uralstech.ubhashini/Documentation~/README.md>.
See <https://uralstech.github.io/UBhashini/DocSource/QuickStart.html>.

---

Expand Down

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ namespace Uralstech.UBhashini.Data
/// The type of task a pipeline should compute.
/// </summary>
[JsonConverter(typeof(StringEnumConverter))]
public enum BhashiniPipelineTaskType
public enum BhashiniTask
{
/// <summary>
/// Default value. Do not use.
Expand Down

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ public class BhashiniComputeTask
/// <seealso href="https://bhashini.gitbook.io/bhashini-apis/pipeline-compute-call/request-payload"/>
/// </remarks>
[JsonProperty("taskType")]
public BhashiniPipelineTaskType Type;
public BhashiniTask Type;

/// <summary>
/// The configuration for the task.
Expand All @@ -24,19 +24,19 @@ public class BhashiniComputeTask
/// <seealso href="https://bhashini.gitbook.io/bhashini-apis/pipeline-compute-call/request-payload"/>
/// </remarks>
[JsonProperty("config")]
public BhashiniComputeConfiguration Configuration;
public BhashiniComputeTaskConfiguration Configuration;

/// <param name="type">The task type.</param>
public BhashiniComputeTask(BhashiniPipelineTaskType type)
public BhashiniComputeTask(BhashiniTask type)
{
Type = type;
}

/// <param name="type">The task type.</param>
/// <param name="configuration">The task configuration from a <see cref="Pipeline.BhashiniPipelineResponse"/>.</param>
public BhashiniComputeTask(BhashiniPipelineTaskType type, Pipeline.BhashiniPipelineTaskConfiguration configuration) : this(type)
public BhashiniComputeTask(BhashiniTask type, Pipeline.BhashiniPipelineTaskConfiguration configuration) : this(type)
{
Configuration = new BhashiniComputeConfiguration()
Configuration = new BhashiniComputeTaskConfiguration()
{
ServiceId = configuration.ServiceId,
Language = configuration.Language,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ namespace Uralstech.UBhashini.Data.Compute
/// <summary>
/// Configuration for a computation task.
/// </summary>
public class BhashiniComputeConfiguration
public class BhashiniComputeTaskConfiguration
{
/// <summary>
/// The service to use for computation.
Expand All @@ -19,7 +19,7 @@ public class BhashiniComputeConfiguration
public string ServiceId;

/// <summary>
/// The language of the computation.
/// The language of the computation input and output.
/// </summary>
/// <remarks>
/// <seealso href="https://bhashini.gitbook.io/bhashini-apis/pipeline-compute-call/request-payload"/>
Expand Down

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Original file line number Diff line number Diff line change
@@ -1,4 +1,15 @@
using Newtonsoft.Json;
using System;
using UnityEngine;
using Uralstech.UBhashini.Exceptions;

#if UTILITIES_ENCODING_WAV_1_0_0_OR_GREATER
using Utilities.Encoding.Wav;
#endif

#if UTILITIES_AUDIO_1_0_0_OR_GREATER
using Utilities.Audio;
#endif

namespace Uralstech.UBhashini.Data.Compute
{
Expand Down Expand Up @@ -26,7 +37,7 @@ public class BhashiniInputData
public BhashiniAudioInput[] AudioData;

/// <param name="text">Text input for translation and TTS requests.</param>
/// <param name="audio">Audio input for STT requests.</param>
/// <param name="audio">Base64 encoded audio input for STT requests.</param>
public BhashiniInputData(string text = null, string audio = null)
{
if (!string.IsNullOrEmpty(text))
Expand All @@ -40,5 +51,46 @@ public BhashiniInputData(string text = null, string audio = null)
new(audio)
};
}

#if UTILITIES_ENCODING_WAV_1_0_0_OR_GREATER || UTILITIES_AUDIO_1_0_0_OR_GREATER
/// <remarks>
/// Encodes the given <see cref="AudioClip"/> to WAV* or PCM** base64.
/// <br/><br/>
/// *<see href="https://openupm.com/packages/com.utilities.encoder.wav/">Utilities.Encoding.Wav</see> and <see href="https://openupm.com/packages/com.utilities.audio/">Utilities.Audio</see> are required.
/// <br/>
/// **<see href="https://openupm.com/packages/com.utilities.audio/">Utilities.Audio</see> is required.
/// </remarks>
/// <param name="audio">Audio input for STT requests.</param>
/// <param name="audioFormat">The format to encode the audio in.</param>
public BhashiniInputData(AudioClip audio, BhashiniAudioFormat audioFormat)
{
AudioData = new BhashiniAudioInput[1]
{
new(GetBase64Audio(audio, audioFormat))
};
}

#pragma warning disable CS1998
/// <param name="clip">The clip to encode.</param>
/// <param name="audioFormat">The format to encode the audio in.</param>
/// <returns>The encoded audio.</returns>
/// <exception cref="BhashiniAudioIOException">Thrown when an unsupported audio encoding is encountered.</exception>
private string GetBase64Audio(AudioClip clip, BhashiniAudioFormat audioFormat)
{
return audioFormat switch
{
#if UTILITIES_ENCODING_WAV_1_0_0_OR_GREATER
BhashiniAudioFormat.Wav => Convert.ToBase64String(clip.EncodeToWav()),
#endif

#if UTILITIES_AUDIO_1_0_0_OR_GREATER
BhashiniAudioFormat.Pcm => Convert.ToBase64String(clip.EncodeToPCM()),
#endif

_ => throw new BhashiniAudioIOException($"Format not supported in operation!", audioFormat)
};
}
#pragma warning restore CS1998
#endif
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,6 @@ public class BhashiniComputeResponse
/// <seealso href="https://bhashini.gitbook.io/bhashini-apis/pipeline-compute-call/response-payload"/>
/// </remarks>
[JsonProperty("pipelineResponse")]
public BhashiniComputeResponseData[] TaskResults;
public BhashiniComputeResponseTask[] TaskResults;
}
}

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ namespace Uralstech.UBhashini.Data.Compute
/// <summary>
/// Response data for a computed task result.
/// </summary>
public class BhashiniComputeResponseData
public class BhashiniComputeResponseTask
{
/// <summary>
/// The task type.
Expand All @@ -15,7 +15,7 @@ public class BhashiniComputeResponseData
/// <seealso href="https://bhashini.gitbook.io/bhashini-apis/pipeline-compute-call/response-payload"/>
/// </remarks>
[JsonProperty("taskType")]
public BhashiniPipelineTaskType TaskType;
public BhashiniTask Task;

/// <summary>
/// The configuration of the task's result. Can be <see langword="null"/> for translation tasks.
Expand All @@ -24,7 +24,7 @@ public class BhashiniComputeResponseData
/// <seealso href="https://bhashini.gitbook.io/bhashini-apis/pipeline-compute-call/response-payload"/>
/// </remarks>
[JsonProperty("config")]
public BhashiniComputeResponseConfiguration TaskConfiguration;
public BhashiniComputeResponseTaskConfiguration TaskConfiguration;

/// <summary>
/// Text outputs for STT and translation tasks.
Expand Down

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ namespace Uralstech.UBhashini.Data.Compute
/// <summary>
/// The configuration of the task's result.
/// </summary>
public class BhashiniComputeResponseConfiguration
public class BhashiniComputeResponseTaskConfiguration
{
/// <summary>
/// The service used to compute the result.
Expand Down Expand Up @@ -47,7 +47,7 @@ public class BhashiniComputeResponseConfiguration
public int SampleRate;

/// <summary>
/// Additional data of an unknown format.
/// Additional data.
/// </summary>
/// <remarks>
/// <seealso href="https://bhashini.gitbook.io/bhashini-apis/pipeline-compute-call/response-payload"/>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ public class BhashiniPipelineRequestTask
/// <seealso href="https://bhashini.gitbook.io/bhashini-apis/pipeline-config-call/request-payload"/>
/// </remarks>
[JsonProperty("taskType")]
public BhashiniPipelineTaskType Type;
public BhashiniTask Type;

/// <summary>
/// Optional extra configurations for the task.
Expand All @@ -27,22 +27,22 @@ public class BhashiniPipelineRequestTask
public BhashiniPipelineRequestTaskConfiguration Configuration = null;

/// <param name="type">The type of the task.</param>
public BhashiniPipelineRequestTask(BhashiniPipelineTaskType type)
public BhashiniPipelineRequestTask(BhashiniTask type)
{
Type = type;
}

/// <param name="type">The type of the task.</param>
/// <param name="sourceLanguage">Source language for the task.</param>
/// <param name="targetLanguage">Target language for the task. Optional, only for translation.</param>
public BhashiniPipelineRequestTask(BhashiniPipelineTaskType type, string sourceLanguage, string targetLanguage = null) : this(type)
public BhashiniPipelineRequestTask(BhashiniTask type, string sourceLanguage, string targetLanguage = null) : this(type)
{
Configuration = new BhashiniPipelineRequestTaskConfiguration()
{
Language = new BhashiniLanguageData()
{
Source = sourceLanguage,
Target = targetLanguage ?? string.Empty,
Target = targetLanguage,
},
};
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ public class BhashiniPipelineConfiguration
/// <seealso href="https://bhashini.gitbook.io/bhashini-apis/pipeline-config-call/response-payload"/>
/// </remarks>
[JsonProperty("taskType")]
public BhashiniPipelineTaskType Type;
public BhashiniTask Type;

/// <summary>
/// The supported configurations.
Expand All @@ -25,5 +25,10 @@ public class BhashiniPipelineConfiguration
/// </remarks>
[JsonProperty("config")]
public BhashiniPipelineTaskConfiguration[] Configurations;

/// <summary>
/// Gets the first <see cref="BhashiniPipelineTaskConfiguration"/> in <see cref="Configurations"/>.
/// </summary>
public BhashiniPipelineTaskConfiguration First => Configurations.Length > 0 ? Configurations[0] : null;
}
}
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
using Newtonsoft.Json;
using Newtonsoft.Json.Serialization;
using System.Linq;

namespace Uralstech.UBhashini.Data.Pipeline
{
Expand Down Expand Up @@ -80,5 +81,23 @@ public class BhashiniPipelineResponse
/// </remarks>
[JsonProperty("pipelineInferenceAPIEndPoint")]
public BhashiniPipelineInferenceEndpoint InferenceEndpoint;

/// <summary>
/// Gets the first <see cref="BhashiniTask.SpeechToText"/> type <see cref="BhashiniPipelineConfiguration"/> in <see cref="PipelineConfigurations"/>.
/// </summary>
public BhashiniPipelineConfiguration SpeechToTextConfiguration => _speechToTextConfiguration ??= PipelineConfigurations.Where(config => config.Type == BhashiniTask.SpeechToText).FirstOrDefault();
private BhashiniPipelineConfiguration _speechToTextConfiguration;

/// <summary>
/// Gets the first <see cref="BhashiniTask.Translation"/> type <see cref="BhashiniPipelineConfiguration"/> in <see cref="PipelineConfigurations"/>.
/// </summary>
public BhashiniPipelineConfiguration TranslateConfiguration => _translateConfiguration ??= PipelineConfigurations.Where(config => config.Type == BhashiniTask.Translation).FirstOrDefault();
private BhashiniPipelineConfiguration _translateConfiguration;

/// <summary>
/// Gets the first <see cref="BhashiniTask.TextToSpeech"/> type <see cref="BhashiniPipelineConfiguration"/> in <see cref="PipelineConfigurations"/>.
/// </summary>
public BhashiniPipelineConfiguration TextToSpeechConfiguration => _textToSpeechConfiguration ??= PipelineConfigurations.Where(config => config.Type == BhashiniTask.TextToSpeech).FirstOrDefault();
private BhashiniPipelineConfiguration _textToSpeechConfiguration;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ public static class PipelineComputationExtensions
/// <returns>A configured <see cref="BhashiniComputeTask"/> object.</returns>
public static BhashiniComputeTask ToSpeechToTextTask(this BhashiniPipelineTaskConfiguration pipelineData, string sourceLanguage = null, BhashiniAudioFormat audioFormat = BhashiniAudioFormat.Wav, int sampleRate = 44100)
{
BhashiniComputeTask task = new(BhashiniPipelineTaskType.SpeechToText, pipelineData);
BhashiniComputeTask task = new(BhashiniTask.SpeechToText, pipelineData);
task.Configuration.AudioFormat = audioFormat;
task.Configuration.SampleRate = sampleRate;

Expand All @@ -43,7 +43,7 @@ public static BhashiniComputeTask ToSpeechToTextTask(this BhashiniPipelineTaskCo
/// <returns>A configured <see cref="BhashiniComputeTask"/> object.</returns>
public static BhashiniComputeTask ToTextToSpeechTask(this BhashiniPipelineTaskConfiguration pipelineData, BhashiniVoiceType voiceType = BhashiniVoiceType.Default, string sourceLanguage = null)
{
BhashiniComputeTask task = new(BhashiniPipelineTaskType.TextToSpeech, pipelineData);
BhashiniComputeTask task = new(BhashiniTask.TextToSpeech, pipelineData);

if (!string.IsNullOrEmpty(sourceLanguage))
task.Configuration.Language.Source = sourceLanguage;
Expand All @@ -63,7 +63,7 @@ public static BhashiniComputeTask ToTextToSpeechTask(this BhashiniPipelineTaskCo
/// <returns>A configured <see cref="BhashiniComputeTask"/> object.</returns>
public static BhashiniComputeTask ToTranslateTask(this BhashiniPipelineTaskConfiguration pipelineData, string sourceLanguage = null, string targetLanguage = null)
{
BhashiniComputeTask task = new(BhashiniPipelineTaskType.TextToSpeech, pipelineData);
BhashiniComputeTask task = new(BhashiniTask.TextToSpeech, pipelineData);

if (!string.IsNullOrEmpty(sourceLanguage))
task.Configuration.Language.Source = sourceLanguage;
Expand All @@ -81,9 +81,9 @@ public static BhashiniComputeTask ToTranslateTask(this BhashiniPipelineTaskConfi
/// <returns>The transcribed text.</returns>
public static string GetSpeechToTextResult(this BhashiniComputeResponse pipelineResponse)
{
foreach (BhashiniComputeResponseData result in pipelineResponse.TaskResults)
foreach (BhashiniComputeResponseTask result in pipelineResponse.TaskResults)
{
if (result.TaskType == BhashiniPipelineTaskType.SpeechToText)
if (result.Task == BhashiniTask.SpeechToText)
return result.TextOutputs[0].Source;
}

Expand All @@ -97,9 +97,9 @@ public static string GetSpeechToTextResult(this BhashiniComputeResponse pipeline
/// <returns>The translated text.</returns>
public static string GetTranslateResult(this BhashiniComputeResponse pipelineResponse)
{
foreach (BhashiniComputeResponseData result in pipelineResponse.TaskResults)
foreach (BhashiniComputeResponseTask result in pipelineResponse.TaskResults)
{
if (result.TaskType == BhashiniPipelineTaskType.Translation)
if (result.Task == BhashiniTask.Translation)
return result.TextOutputs[0].Target;
}

Expand All @@ -120,9 +120,9 @@ public static async Task<AudioClip> GetTextToSpeechResult(this BhashiniComputeRe
{
byte[] audioData = null;
BhashiniAudioFormat audioFormat = BhashiniAudioFormat.Default;
foreach (BhashiniComputeResponseData result in pipelineResponse.TaskResults)
foreach (BhashiniComputeResponseTask result in pipelineResponse.TaskResults)
{
if (result.TaskType == BhashiniPipelineTaskType.TextToSpeech)
if (result.Task == BhashiniTask.TextToSpeech)
{
audioData = Convert.FromBase64String(result.AudioOutputs[0].Base64Audio);
audioFormat = result.TaskConfiguration.AudioFormat;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
using System;
using Uralstech.UBhashini.Data;
using Uralstech.UBhashini.Data.Compute;

namespace Uralstech.UBhashini.Exceptions
Expand Down
Loading

0 comments on commit e6a7423

Please sign in to comment.