From b4576eee09553934ad606ca7e8ed18f55c662915 Mon Sep 17 00:00:00 2001 From: Udayshankar Ravikumar Date: Wed, 3 Jul 2024 18:04:12 +0530 Subject: [PATCH 1/4] 1.1.0-preview.1 --- .../Data/ChatRequest/GeminiChatRequest.cs | 46 +++++++++- .../Data/Common/Content/EnumExtensions.cs | 59 ++++++++++++ .../{ => Content}/EnumExtensions.cs.meta | 0 .../Common/{ => Content}/GeminiContent.cs | 31 +++++++ .../Common/{ => Content}/GeminiContentBlob.cs | 12 ++- .../Common/{ => Content}/GeminiContentPart.cs | 3 + .../Common/{ => Content}/GeminiContentType.cs | 90 +++++++++++++++++++ .../Data/Common/Content/UnityExtensions.cs | 51 +++++++++++ .../Scripts/Data/Common/EnumExtensions.cs | 34 ------- .../Data/Common/Status/GeminiStatus.cs | 33 +++++++ .../Data/Common/Status/GeminiStatusDetails.cs | 26 ++++++ .../Runtime/Scripts/Data/FileAPI.meta | 8 ++ .../FileListing/GeminiFileListRequest.cs | 38 ++++++++ .../FileListing/GeminiFileListResponse.cs | 23 +++++ .../Scripts/Data/FileAPI/GeminiFile.cs | 78 ++++++++++++++++ .../Scripts/Data/FileAPI/GeminiFile.cs.meta | 11 +++ .../Scripts/Data/FileAPI/GeminiFileState.cs | 37 ++++++++ .../FileAPI/GeminiFileUploadRequest.cs.meta | 11 +++ .../Data/FileAPI/GeminiFileVideoMetaData.cs | 19 ++++ .../FileAPI/GeminiTimeSpanJsonConverter.cs | 23 +++++ .../SingleRequests/GeminiFileDeleteRequest.cs | 32 +++++++ .../SingleRequests/GeminiFileGetRequest.cs | 32 +++++++ .../SingleRequests/GeminiFileUploadRequest.cs | 76 ++++++++++++++++ .../Scripts/Data/IGeminiDeleteRequest.cs | 7 ++ .../Runtime/Scripts/Data/IGeminiGetRequest.cs | 7 ++ .../Scripts/Data/IGeminiPostRequest.cs | 19 ++++ .../Runtime/Scripts/Data/IGeminiRequest.cs | 13 +++ .../GeminiTokenCountRequest.cs | 43 ++++++++- .../Exceptions/GeminiRequestException.cs | 24 +++++ .../Runtime/Scripts/Managers/GeminiManager.cs | 74 +++++++++++++++ .../com.uralstech.ugemini/package.json | 2 +- 31 files changed, 920 insertions(+), 42 deletions(-) create mode 100644 UGemini/Packages/com.uralstech.ugemini/Runtime/Scripts/Data/Common/Content/EnumExtensions.cs rename UGemini/Packages/com.uralstech.ugemini/Runtime/Scripts/Data/Common/{ => Content}/EnumExtensions.cs.meta (100%) rename UGemini/Packages/com.uralstech.ugemini/Runtime/Scripts/Data/Common/{ => Content}/GeminiContent.cs (81%) rename UGemini/Packages/com.uralstech.ugemini/Runtime/Scripts/Data/Common/{ => Content}/GeminiContentBlob.cs (84%) rename UGemini/Packages/com.uralstech.ugemini/Runtime/Scripts/Data/Common/{ => Content}/GeminiContentPart.cs (95%) rename UGemini/Packages/com.uralstech.ugemini/Runtime/Scripts/Data/Common/{ => Content}/GeminiContentType.cs (56%) create mode 100644 UGemini/Packages/com.uralstech.ugemini/Runtime/Scripts/Data/Common/Content/UnityExtensions.cs delete mode 100644 UGemini/Packages/com.uralstech.ugemini/Runtime/Scripts/Data/Common/EnumExtensions.cs create mode 100644 UGemini/Packages/com.uralstech.ugemini/Runtime/Scripts/Data/Common/Status/GeminiStatus.cs create mode 100644 UGemini/Packages/com.uralstech.ugemini/Runtime/Scripts/Data/Common/Status/GeminiStatusDetails.cs create mode 100644 UGemini/Packages/com.uralstech.ugemini/Runtime/Scripts/Data/FileAPI.meta create mode 100644 UGemini/Packages/com.uralstech.ugemini/Runtime/Scripts/Data/FileAPI/FileListing/GeminiFileListRequest.cs create mode 100644 UGemini/Packages/com.uralstech.ugemini/Runtime/Scripts/Data/FileAPI/FileListing/GeminiFileListResponse.cs create mode 100644 UGemini/Packages/com.uralstech.ugemini/Runtime/Scripts/Data/FileAPI/GeminiFile.cs create mode 100644 UGemini/Packages/com.uralstech.ugemini/Runtime/Scripts/Data/FileAPI/GeminiFile.cs.meta create mode 100644 UGemini/Packages/com.uralstech.ugemini/Runtime/Scripts/Data/FileAPI/GeminiFileState.cs create mode 100644 UGemini/Packages/com.uralstech.ugemini/Runtime/Scripts/Data/FileAPI/GeminiFileUploadRequest.cs.meta create mode 100644 UGemini/Packages/com.uralstech.ugemini/Runtime/Scripts/Data/FileAPI/GeminiFileVideoMetaData.cs create mode 100644 UGemini/Packages/com.uralstech.ugemini/Runtime/Scripts/Data/FileAPI/GeminiTimeSpanJsonConverter.cs create mode 100644 UGemini/Packages/com.uralstech.ugemini/Runtime/Scripts/Data/FileAPI/SingleRequests/GeminiFileDeleteRequest.cs create mode 100644 UGemini/Packages/com.uralstech.ugemini/Runtime/Scripts/Data/FileAPI/SingleRequests/GeminiFileGetRequest.cs create mode 100644 UGemini/Packages/com.uralstech.ugemini/Runtime/Scripts/Data/FileAPI/SingleRequests/GeminiFileUploadRequest.cs create mode 100644 UGemini/Packages/com.uralstech.ugemini/Runtime/Scripts/Data/IGeminiDeleteRequest.cs create mode 100644 UGemini/Packages/com.uralstech.ugemini/Runtime/Scripts/Data/IGeminiGetRequest.cs create mode 100644 UGemini/Packages/com.uralstech.ugemini/Runtime/Scripts/Data/IGeminiPostRequest.cs create mode 100644 UGemini/Packages/com.uralstech.ugemini/Runtime/Scripts/Data/IGeminiRequest.cs diff --git a/UGemini/Packages/com.uralstech.ugemini/Runtime/Scripts/Data/ChatRequest/GeminiChatRequest.cs b/UGemini/Packages/com.uralstech.ugemini/Runtime/Scripts/Data/ChatRequest/GeminiChatRequest.cs index 6894320c..c37de1d6 100644 --- a/UGemini/Packages/com.uralstech.ugemini/Runtime/Scripts/Data/ChatRequest/GeminiChatRequest.cs +++ b/UGemini/Packages/com.uralstech.ugemini/Runtime/Scripts/Data/ChatRequest/GeminiChatRequest.cs @@ -1,5 +1,6 @@ using Newtonsoft.Json; using Newtonsoft.Json.Serialization; +using System; using System.ComponentModel; using Uralstech.UGemini.Tools.Declaration; @@ -9,7 +10,7 @@ namespace Uralstech.UGemini.Chat /// Request to generate a response from the model. /// [JsonObject(NamingStrategyType = typeof(CamelCaseNamingStrategy))] - public class GeminiChatRequest + public class GeminiChatRequest : IGeminiPostRequest { /// /// The content of the current conversation with the model. @@ -44,7 +45,7 @@ public class GeminiChatRequest /// A list of unique instances for blocking unsafe content. /// /// - /// This will be enforced on and .
+ /// This will be enforced on and .
/// There should not be more than one setting for each type. The API will block any
/// contents and responses that fail to meet the thresholds set by these settings. This list overrides the default
/// settings for each specified in the . If there is
@@ -76,8 +77,49 @@ public class GeminiChatRequest /// /// /// Note: only used in explicit caching, where users can have control over caching (e.g. what content to cache) and enjoy guaranteed cost savings. + ///

+ /// Only available in the beta API. ///
[JsonProperty(DefaultValueHandling = DefaultValueHandling.Ignore), DefaultValue(null)] public string CachedContent = null; + + /// + /// The model to use. + /// + [JsonIgnore] + public string Model; + + /// + /// The API version to use. + /// + [JsonIgnore] + public string ApiVersion; + + /// + [JsonIgnore] + public string ContentType => GeminiContentType.ApplicationJSON.MimeType(); + + /// + public string EndpointUri => $"https://generativelanguage.googleapis.com/{ApiVersion}/models/{Model}:generateContent"; + + /// + /// Creates a new . + /// + /// The model to use. + /// Should the request use the Beta API? + public GeminiChatRequest(string model = GeminiManager.Gemini1_5Flash, bool useBetaApi = false) + { + Model = model; + ApiVersion = useBetaApi ? "v1beta" : "v1"; + } + + [Obsolete("It is recommended to use GeminiManager.Request instead of GeminiManager.Compute, as it is more generic and thus supports more request types.")] + public GeminiChatRequest() { } + + /// + public string GetUtf8EncodedData() + { + return JsonConvert.SerializeObject(this); + } } } \ No newline at end of file diff --git a/UGemini/Packages/com.uralstech.ugemini/Runtime/Scripts/Data/Common/Content/EnumExtensions.cs b/UGemini/Packages/com.uralstech.ugemini/Runtime/Scripts/Data/Common/Content/EnumExtensions.cs new file mode 100644 index 00000000..c049975c --- /dev/null +++ b/UGemini/Packages/com.uralstech.ugemini/Runtime/Scripts/Data/Common/Content/EnumExtensions.cs @@ -0,0 +1,59 @@ +using System; +using System.Reflection; +using System.Runtime.Serialization; + +namespace Uralstech.UGemini +{ + /// + /// Extensions for type objects. + /// + public static class EnumExtensions + { + /// + /// Converts a to its MIME type. + /// + /// The value. + /// The MIME type as a string. + /// Thrown if the MIME type of the enum value could not be found. + public static string MimeType(this GeminiContentType enumValue) + { + Type type = typeof(GeminiContentType); + MemberInfo[] memberInfo = type.GetMember(enumValue.ToString()); + + if (memberInfo != null && memberInfo.Length > 0) + { + object[] attributes = memberInfo[0].GetCustomAttributes(typeof(EnumMemberAttribute), false); + + if (attributes != null && attributes.Length > 0) + return ((EnumMemberAttribute)attributes[0]).Value; + } + + // Throw error if no EnumMember attribute is found. + throw new NotImplementedException($"No {nameof(EnumMemberAttribute)} found for content type \"{enumValue}\"!"); + } + + /// + /// Converts a MIME type to a . + /// + /// The MIME type string. + /// The equivalent. + /// Thrown if does not have an equivalent MIME type to . + public static GeminiContentType ContentType(this string mimeType) + { + Type type = typeof(GeminiContentType); + foreach (string name in Enum.GetNames(type)) + { + MemberInfo[] memberInfo = type.GetMember(name); + if (memberInfo != null && memberInfo.Length > 0) + { + object[] attributes = memberInfo[0].GetCustomAttributes(typeof(EnumMemberAttribute), false); + if (attributes != null && attributes.Length > 0 && ((EnumMemberAttribute)attributes[0]).Value == mimeType) + return (GeminiContentType)Enum.Parse(type, name); + } + } + + // Throw error if no enum value is found. + throw new NotImplementedException($"No {nameof(GeminiContentType)} found for MIME type \"{mimeType}\"!"); + } + } +} \ No newline at end of file diff --git a/UGemini/Packages/com.uralstech.ugemini/Runtime/Scripts/Data/Common/EnumExtensions.cs.meta b/UGemini/Packages/com.uralstech.ugemini/Runtime/Scripts/Data/Common/Content/EnumExtensions.cs.meta similarity index 100% rename from UGemini/Packages/com.uralstech.ugemini/Runtime/Scripts/Data/Common/EnumExtensions.cs.meta rename to UGemini/Packages/com.uralstech.ugemini/Runtime/Scripts/Data/Common/Content/EnumExtensions.cs.meta diff --git a/UGemini/Packages/com.uralstech.ugemini/Runtime/Scripts/Data/Common/GeminiContent.cs b/UGemini/Packages/com.uralstech.ugemini/Runtime/Scripts/Data/Common/Content/GeminiContent.cs similarity index 81% rename from UGemini/Packages/com.uralstech.ugemini/Runtime/Scripts/Data/Common/GeminiContent.cs rename to UGemini/Packages/com.uralstech.ugemini/Runtime/Scripts/Data/Common/Content/GeminiContent.cs index 54ab25f0..ee1c5100 100644 --- a/UGemini/Packages/com.uralstech.ugemini/Runtime/Scripts/Data/Common/GeminiContent.cs +++ b/UGemini/Packages/com.uralstech.ugemini/Runtime/Scripts/Data/Common/Content/GeminiContent.cs @@ -2,6 +2,7 @@ using Newtonsoft.Json.Serialization; using System.ComponentModel; using UnityEngine; +using Uralstech.UGemini.FileAPI; using Uralstech.UGemini.Tools; namespace Uralstech.UGemini @@ -101,6 +102,36 @@ public static GeminiContent GetContent(string message, AudioClip audio, GeminiRo } #endif + /// + /// Creates a new from a role, message and . + /// + /// The role of the content creator. + /// The message. + /// The . + /// A new object. + public static GeminiContent GetContent(string message, GeminiFile file, GeminiRole role = GeminiRole.Unspecified) + { + return new GeminiContent + { + Role = role, + Parts = new[] + { + new GeminiContentPart + { + Text = message, + }, + new GeminiContentPart + { + FileData = new GeminiFileData + { + MimeType = file.MimeType, + FileUri = file.Uri, + }, + } + } + }; + } + /// /// Creates a new from a . /// diff --git a/UGemini/Packages/com.uralstech.ugemini/Runtime/Scripts/Data/Common/GeminiContentBlob.cs b/UGemini/Packages/com.uralstech.ugemini/Runtime/Scripts/Data/Common/Content/GeminiContentBlob.cs similarity index 84% rename from UGemini/Packages/com.uralstech.ugemini/Runtime/Scripts/Data/Common/GeminiContentBlob.cs rename to UGemini/Packages/com.uralstech.ugemini/Runtime/Scripts/Data/Common/Content/GeminiContentBlob.cs index d32c414d..1ab2107f 100644 --- a/UGemini/Packages/com.uralstech.ugemini/Runtime/Scripts/Data/Common/GeminiContentBlob.cs +++ b/UGemini/Packages/com.uralstech.ugemini/Runtime/Scripts/Data/Common/Content/GeminiContentBlob.cs @@ -1,6 +1,5 @@ using Newtonsoft.Json; using Newtonsoft.Json.Serialization; -using System; using UnityEngine; namespace Uralstech.UGemini @@ -16,6 +15,11 @@ public class GeminiContentBlob /// /// The type of the data. /// + /// + /// You can use to convert + /// values to their equivalents, like: + /// "image/png".ContentType() + /// public GeminiContentType MimeType; /// @@ -38,7 +42,7 @@ public static GeminiContentBlob GetContentBlob(AudioClip audio) return new GeminiContentBlob() { MimeType = GeminiContentType.AudioWAV, - Data = Convert.ToBase64String(Utilities.Encoding.Wav.AudioClipExtensions.EncodeToWav(audio)) + Data = audio.ToBase64WAV() }; } #endif @@ -55,12 +59,12 @@ public static GeminiContentBlob GetContentBlob(Texture2D image, bool useJPEG = f ? new GeminiContentBlob() { MimeType = GeminiContentType.ImageJPEG, - Data = Convert.ToBase64String(image.EncodeToJPG()) + Data = image.ToBase64JPEG() } : new GeminiContentBlob() { MimeType = GeminiContentType.ImagePNG, - Data = Convert.ToBase64String(image.EncodeToPNG()) + Data = image.ToBase64PNG() }; } } diff --git a/UGemini/Packages/com.uralstech.ugemini/Runtime/Scripts/Data/Common/GeminiContentPart.cs b/UGemini/Packages/com.uralstech.ugemini/Runtime/Scripts/Data/Common/Content/GeminiContentPart.cs similarity index 95% rename from UGemini/Packages/com.uralstech.ugemini/Runtime/Scripts/Data/Common/GeminiContentPart.cs rename to UGemini/Packages/com.uralstech.ugemini/Runtime/Scripts/Data/Common/Content/GeminiContentPart.cs index 29b7ac5d..e8f6b705 100644 --- a/UGemini/Packages/com.uralstech.ugemini/Runtime/Scripts/Data/Common/GeminiContentPart.cs +++ b/UGemini/Packages/com.uralstech.ugemini/Runtime/Scripts/Data/Common/Content/GeminiContentPart.cs @@ -44,6 +44,9 @@ public class GeminiContentPart /// /// URI based data. /// + /// + /// Only available in the beta API. + /// [JsonProperty(DefaultValueHandling = DefaultValueHandling.Ignore), DefaultValue(null)] public GeminiFileData FileData = null; } diff --git a/UGemini/Packages/com.uralstech.ugemini/Runtime/Scripts/Data/Common/GeminiContentType.cs b/UGemini/Packages/com.uralstech.ugemini/Runtime/Scripts/Data/Common/Content/GeminiContentType.cs similarity index 56% rename from UGemini/Packages/com.uralstech.ugemini/Runtime/Scripts/Data/Common/GeminiContentType.cs rename to UGemini/Packages/com.uralstech.ugemini/Runtime/Scripts/Data/Common/Content/GeminiContentType.cs index 83322e3c..5c86bfb7 100644 --- a/UGemini/Packages/com.uralstech.ugemini/Runtime/Scripts/Data/Common/GeminiContentType.cs +++ b/UGemini/Packages/com.uralstech.ugemini/Runtime/Scripts/Data/Common/Content/GeminiContentType.cs @@ -129,5 +129,95 @@ public enum GeminiContentType /// [EnumMember(Value = "video/3gpp")] Video3GPP, + + /// + /// (File API) Plain text. + /// + [EnumMember(Value = "text/plain")] + TextPlain, + + /// + /// (File API) HTML text. + /// + [EnumMember(Value = "text/html")] + TextHTML, + + /// + /// (File API) CSS text. + /// + [EnumMember(Value = "text/css")] + TextCSS, + + /// + /// (File API) JavaScript text. + /// + [EnumMember(Value = "text/javascript")] + TextJavaScript, + + /// + /// (File API) TypeScript text. + /// + [EnumMember(Value = "text/x-typescript")] + TextXTypeScript, + + /// + /// (File API) CSV text. + /// + [EnumMember(Value = "text/csv")] + TextCSV, + + /// + /// (File API) Markdown text. + /// + [EnumMember(Value = "text/markdown")] + TextMarkdown, + + /// + /// (File API) Python text. + /// + [EnumMember(Value = "text/x-python")] + TextXPython, + + /// + /// (File API) XML text. + /// + [EnumMember(Value = "text/xml")] + TextXML, + + /// + /// (File API) RTF text. + /// + [EnumMember(Value = "text/rtf")] + TextRTF, + + /// + /// (File API) Application JavaScript content. + /// + [EnumMember(Value = "application/x-javascript")] + ApplicationXJavaScript, + + /// + /// (File API) Application TypeScript content. + /// + [EnumMember(Value = "application/x-typescript")] + ApplicationXTypeScript, + + /// + /// (File API) Application Python content. + /// + [EnumMember(Value = "application/x-python-code")] + ApplicationXPython, + + /// + /// (File API) Application JSON content. + /// + [EnumMember(Value = "application/json")] + ApplicationJSON, + + /// + /// (File API) Application RTF content. + /// + [EnumMember(Value = "application/rtf")] + ApplicationRTF, } } \ No newline at end of file diff --git a/UGemini/Packages/com.uralstech.ugemini/Runtime/Scripts/Data/Common/Content/UnityExtensions.cs b/UGemini/Packages/com.uralstech.ugemini/Runtime/Scripts/Data/Common/Content/UnityExtensions.cs new file mode 100644 index 00000000..7dbc7fb6 --- /dev/null +++ b/UGemini/Packages/com.uralstech.ugemini/Runtime/Scripts/Data/Common/Content/UnityExtensions.cs @@ -0,0 +1,51 @@ +using System; +using UnityEngine; + +namespace Uralstech.UGemini +{ + public static class UnityExtensions + { +#if UTILITIES_ENCODING_WAV_1_0_0_OR_GREATER && UTILITIES_AUDIO_1_0_0_OR_GREATER + + /// + /// Converts the given to WAV bytes. + /// + /// The . + /// The WAV encoded array. + public static byte[] ToWAV(this AudioClip clip) + { + return Utilities.Encoding.Wav.AudioClipExtensions.EncodeToWav(clip); + } + + /// + /// Converts the given to a WAV Base64 encoded string. + /// + /// The . + /// The Base64 encoded . + public static string ToBase64WAV(this AudioClip clip) + { + return Convert.ToBase64String(clip.ToWAV()); + } +#endif + + /// + /// Converts the given to a PNG Base64 encoded string. + /// + /// The . + /// The Base64 encoded . + public static string ToBase64PNG(this Texture2D image) + { + return Convert.ToBase64String(image.EncodeToPNG()); + } + + /// + /// Converts the given to a JPEG Base64 encoded string. + /// + /// The . + /// The Base64 encoded . + public static string ToBase64JPEG(this Texture2D image) + { + return Convert.ToBase64String(image.EncodeToJPG()); + } + } +} diff --git a/UGemini/Packages/com.uralstech.ugemini/Runtime/Scripts/Data/Common/EnumExtensions.cs b/UGemini/Packages/com.uralstech.ugemini/Runtime/Scripts/Data/Common/EnumExtensions.cs deleted file mode 100644 index 26aeae2f..00000000 --- a/UGemini/Packages/com.uralstech.ugemini/Runtime/Scripts/Data/Common/EnumExtensions.cs +++ /dev/null @@ -1,34 +0,0 @@ -using System; -using System.Reflection; -using System.Runtime.Serialization; - -namespace Uralstech.UGemini -{ - /// - /// Extensions for type objects. - /// - public static class EnumExtensions - { - /// - /// Converts a to its MIME type. - /// - /// The value. - /// The MIME type as a string. - public static string MimeType(this GeminiContentType enumValue) - { - Type type = enumValue.GetType(); - MemberInfo[] memberInfo = type.GetMember(enumValue.ToString()); - - if (memberInfo != null && memberInfo.Length > 0) - { - object[] attributes = memberInfo[0].GetCustomAttributes(typeof(EnumMemberAttribute), false); - - if (attributes != null && attributes.Length > 0) - return ((EnumMemberAttribute)attributes[0]).Value; - } - - // Return the enum name if no EnumMember attribute is found - return enumValue.ToString(); - } - } -} \ No newline at end of file diff --git a/UGemini/Packages/com.uralstech.ugemini/Runtime/Scripts/Data/Common/Status/GeminiStatus.cs b/UGemini/Packages/com.uralstech.ugemini/Runtime/Scripts/Data/Common/Status/GeminiStatus.cs new file mode 100644 index 00000000..0ca67e12 --- /dev/null +++ b/UGemini/Packages/com.uralstech.ugemini/Runtime/Scripts/Data/Common/Status/GeminiStatus.cs @@ -0,0 +1,33 @@ +using Newtonsoft.Json; +using Newtonsoft.Json.Serialization; + +namespace Uralstech.UGemini.Status +{ + /// + /// The type defines a logical error model that is suitable for different programming environments, including REST APIs and RPC APIs. It is used by gRPC. + /// + /// + /// Each message contains three pieces of data: error code, error message, and error details. + /// + [JsonObject(NamingStrategyType = typeof(CamelCaseNamingStrategy))] + public class GeminiStatus + { + /// + /// The status code, which should be an enum value of google.rpc.Code. + /// + public int Code; + + /// + /// A developer-facing error message, which should be in English. + /// + /// + /// Any user-facing error message should be localized and sent in the google.rpc.Status.details field, or localized by the client. + /// + public string Message; + + /// + /// A list of messages that carry the error details. There is a common set of message types for APIs to use. + /// + public GeminiStatusDetails[] Details; + } +} diff --git a/UGemini/Packages/com.uralstech.ugemini/Runtime/Scripts/Data/Common/Status/GeminiStatusDetails.cs b/UGemini/Packages/com.uralstech.ugemini/Runtime/Scripts/Data/Common/Status/GeminiStatusDetails.cs new file mode 100644 index 00000000..47af85f2 --- /dev/null +++ b/UGemini/Packages/com.uralstech.ugemini/Runtime/Scripts/Data/Common/Status/GeminiStatusDetails.cs @@ -0,0 +1,26 @@ +using Newtonsoft.Json; +using Newtonsoft.Json.Linq; +using Newtonsoft.Json.Serialization; +using System.Collections.Generic; + +namespace Uralstech.UGemini.Status +{ + /// + /// An object containing fields of an arbitrary type. + /// + [JsonObject(NamingStrategyType = typeof(CamelCaseNamingStrategy))] + public class GeminiStatusDetails + { + /// + /// Contains a URI identifying the type. + /// + [JsonProperty("@type")] + public string Type; + + /// + /// The actual details of the object. + /// + [JsonExtensionData] + public Dictionary Data; + } +} diff --git a/UGemini/Packages/com.uralstech.ugemini/Runtime/Scripts/Data/FileAPI.meta b/UGemini/Packages/com.uralstech.ugemini/Runtime/Scripts/Data/FileAPI.meta new file mode 100644 index 00000000..692aea26 --- /dev/null +++ b/UGemini/Packages/com.uralstech.ugemini/Runtime/Scripts/Data/FileAPI.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 5cd580bb7b5e3564ca8b276ff082c9f3 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/UGemini/Packages/com.uralstech.ugemini/Runtime/Scripts/Data/FileAPI/FileListing/GeminiFileListRequest.cs b/UGemini/Packages/com.uralstech.ugemini/Runtime/Scripts/Data/FileAPI/FileListing/GeminiFileListRequest.cs new file mode 100644 index 00000000..b26a47b2 --- /dev/null +++ b/UGemini/Packages/com.uralstech.ugemini/Runtime/Scripts/Data/FileAPI/FileListing/GeminiFileListRequest.cs @@ -0,0 +1,38 @@ +namespace Uralstech.UGemini.FileAPI +{ + /// + /// Requests metadata for all existing files. Return type is . + /// + public class GeminiFileListRequest : IGeminiGetRequest + { + /// + /// The API version to use. + /// + public string ApiVersion; + + /// + /// Maximum number of Files to return per page. If unspecified, defaults to 10. Maximum pageSize is 100. + /// + public int MaxResponseFiles = 10; + + /// + /// A page token from a previous files.list call. + /// + public string PageToken = string.Empty; + + /// + public string EndpointUri => string.IsNullOrEmpty(PageToken) + ? $"https://generativelanguage.googleapis.com/{ApiVersion}/files?pageSize={MaxResponseFiles}" + : $"https://generativelanguage.googleapis.com/{ApiVersion}/files?pageSize={MaxResponseFiles}&pageToken={PageToken}"; + + /// + /// Creates a new . + /// + /// The ID of the file to get. + /// Should the request use the Beta API? + public GeminiFileListRequest(bool useBetaApi = true) + { + ApiVersion = useBetaApi ? "v1beta" : "v1"; + } + } +} diff --git a/UGemini/Packages/com.uralstech.ugemini/Runtime/Scripts/Data/FileAPI/FileListing/GeminiFileListResponse.cs b/UGemini/Packages/com.uralstech.ugemini/Runtime/Scripts/Data/FileAPI/FileListing/GeminiFileListResponse.cs new file mode 100644 index 00000000..904a96cd --- /dev/null +++ b/UGemini/Packages/com.uralstech.ugemini/Runtime/Scripts/Data/FileAPI/FileListing/GeminiFileListResponse.cs @@ -0,0 +1,23 @@ +using Newtonsoft.Json; +using Newtonsoft.Json.Serialization; + +namespace Uralstech.UGemini.FileAPI +{ + /// + /// The response for a call. + /// + [JsonObject(NamingStrategyType = typeof (CamelCaseNamingStrategy))] + public class GeminiFileListResponse + { + /// + /// The list of files. + /// + public GeminiFile[] Files; + + /// + /// A token that can be sent as a into a subsequent call. + /// + [JsonProperty(NullValueHandling = NullValueHandling.Ignore)] + public string NextPageToken; + } +} diff --git a/UGemini/Packages/com.uralstech.ugemini/Runtime/Scripts/Data/FileAPI/GeminiFile.cs b/UGemini/Packages/com.uralstech.ugemini/Runtime/Scripts/Data/FileAPI/GeminiFile.cs new file mode 100644 index 00000000..c7498e0b --- /dev/null +++ b/UGemini/Packages/com.uralstech.ugemini/Runtime/Scripts/Data/FileAPI/GeminiFile.cs @@ -0,0 +1,78 @@ +using Newtonsoft.Json; +using Newtonsoft.Json.Serialization; +using System; +using Uralstech.UGemini.Status; + +namespace Uralstech.UGemini.FileAPI +{ + [JsonObject(NamingStrategyType = typeof(CamelCaseNamingStrategy))] + public class GeminiFile + { + /// + /// The resource name. + /// + public string Name; + + /// + /// The human-readable display name for the . + /// + [JsonProperty(NullValueHandling = NullValueHandling.Ignore)] + public string DisplayName = null; + + /// + /// MIME type of the file. + /// + /// + /// You can use to convert + /// values to their equivalents, like: + /// "image/png".ContentType() + /// + public string MimeType; + + /// + /// Size of the file in bytes. + /// + public long SizeBytes; + + /// + /// The timestamp of when the was created. + /// + public DateTime CreateTime; + + /// + /// The timestamp of when the was last updated. + /// + public DateTime UpdateTime; + + /// + /// The timestamp of when the will be deleted. Only set if the is scheduled to expire. + /// + public DateTime ExpirationTime; + + /// + /// SHA-256 hash of the uploaded bytes. A base64-encoded string. + /// + public string Sha256Hash; + + /// + /// The uri of the . + /// + public string Uri; + + /// + /// Processing state of the . + /// + public GeminiFileState State; + + /// + /// Error status if processing failed. + /// + public GeminiStatus Status; + + /// + /// Metadata for a video. + /// + [JsonProperty(NullValueHandling = NullValueHandling.Ignore)] + public GeminiFileVideoMetaData VideoMetadata; + } +} diff --git a/UGemini/Packages/com.uralstech.ugemini/Runtime/Scripts/Data/FileAPI/GeminiFile.cs.meta b/UGemini/Packages/com.uralstech.ugemini/Runtime/Scripts/Data/FileAPI/GeminiFile.cs.meta new file mode 100644 index 00000000..a807e2ac --- /dev/null +++ b/UGemini/Packages/com.uralstech.ugemini/Runtime/Scripts/Data/FileAPI/GeminiFile.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 399577979d869d348bb51d48feea2e6a +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/UGemini/Packages/com.uralstech.ugemini/Runtime/Scripts/Data/FileAPI/GeminiFileState.cs b/UGemini/Packages/com.uralstech.ugemini/Runtime/Scripts/Data/FileAPI/GeminiFileState.cs new file mode 100644 index 00000000..de82ae83 --- /dev/null +++ b/UGemini/Packages/com.uralstech.ugemini/Runtime/Scripts/Data/FileAPI/GeminiFileState.cs @@ -0,0 +1,37 @@ +using Newtonsoft.Json; +using Newtonsoft.Json.Converters; +using System.Runtime.Serialization; + +namespace Uralstech.UGemini.FileAPI +{ + /// + /// States for the lifecycle of a File. + /// + [JsonConverter(typeof(StringEnumConverter))] + public enum GeminiFileState + { + /// + /// The default value. This value is used if the state is omitted. + /// + [EnumMember(Value = "STATE_UNSPECIFIED")] + Unspecified, + + /// + /// File is being processed and cannot be used for inference yet. + /// + [EnumMember(Value = "PROCESSING")] + Processing, + + /// + /// File is processed and available for inference. + /// + [EnumMember(Value = "ACTIVE")] + Active, + + /// + /// File failed processing. + /// + [EnumMember(Value = "FAILED")] + Failed, + } +} diff --git a/UGemini/Packages/com.uralstech.ugemini/Runtime/Scripts/Data/FileAPI/GeminiFileUploadRequest.cs.meta b/UGemini/Packages/com.uralstech.ugemini/Runtime/Scripts/Data/FileAPI/GeminiFileUploadRequest.cs.meta new file mode 100644 index 00000000..de027eac --- /dev/null +++ b/UGemini/Packages/com.uralstech.ugemini/Runtime/Scripts/Data/FileAPI/GeminiFileUploadRequest.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 528cee67c26d7bd4f9f9ef9ec8d680a0 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/UGemini/Packages/com.uralstech.ugemini/Runtime/Scripts/Data/FileAPI/GeminiFileVideoMetaData.cs b/UGemini/Packages/com.uralstech.ugemini/Runtime/Scripts/Data/FileAPI/GeminiFileVideoMetaData.cs new file mode 100644 index 00000000..469bb4d2 --- /dev/null +++ b/UGemini/Packages/com.uralstech.ugemini/Runtime/Scripts/Data/FileAPI/GeminiFileVideoMetaData.cs @@ -0,0 +1,19 @@ +using Newtonsoft.Json; +using Newtonsoft.Json.Serialization; +using System; + +namespace Uralstech.UGemini.FileAPI +{ + /// + /// Metadata for a video . + /// + [JsonObject(NamingStrategyType = typeof(CamelCaseNamingStrategy))] + public class GeminiFileVideoMetaData + { + /// + /// Duration of the video. + /// + [JsonConverter(typeof(GeminiTimeSpanJsonConverter))] + public TimeSpan VideoDuration; + } +} diff --git a/UGemini/Packages/com.uralstech.ugemini/Runtime/Scripts/Data/FileAPI/GeminiTimeSpanJsonConverter.cs b/UGemini/Packages/com.uralstech.ugemini/Runtime/Scripts/Data/FileAPI/GeminiTimeSpanJsonConverter.cs new file mode 100644 index 00000000..261a2f9f --- /dev/null +++ b/UGemini/Packages/com.uralstech.ugemini/Runtime/Scripts/Data/FileAPI/GeminiTimeSpanJsonConverter.cs @@ -0,0 +1,23 @@ +using Newtonsoft.Json; +using System; + +namespace Uralstech.UGemini.FileAPI +{ + /// + /// Custom JSON converter to convert a time of a format like "10.334s" to a . + /// + public class GeminiTimeSpanJsonConverter : JsonConverter + { + /// /> + public override TimeSpan ReadJson(JsonReader reader, Type objectType, TimeSpan existingValue, bool hasExistingValue, JsonSerializer serializer) + { + return TimeSpan.FromSeconds(double.Parse(((string)reader.Value).TrimEnd('s'))); + } + + /// /> + public override void WriteJson(JsonWriter writer, TimeSpan value, JsonSerializer serializer) + { + throw new NotImplementedException($"Writer not implemented for {nameof(TimeSpan)} converter!"); + } + } +} \ No newline at end of file diff --git a/UGemini/Packages/com.uralstech.ugemini/Runtime/Scripts/Data/FileAPI/SingleRequests/GeminiFileDeleteRequest.cs b/UGemini/Packages/com.uralstech.ugemini/Runtime/Scripts/Data/FileAPI/SingleRequests/GeminiFileDeleteRequest.cs new file mode 100644 index 00000000..dbd258c3 --- /dev/null +++ b/UGemini/Packages/com.uralstech.ugemini/Runtime/Scripts/Data/FileAPI/SingleRequests/GeminiFileDeleteRequest.cs @@ -0,0 +1,32 @@ +namespace Uralstech.UGemini.FileAPI +{ + /// + /// Requests the deletion of a file. + /// + public class GeminiFileDeleteRequest : IGeminiDeleteRequest + { + /// + /// The API version to use. + /// + public string ApiVersion; + + /// + /// The ID of the file to delete. + /// + public string FileId; + + /// + public string EndpointUri => $"https://generativelanguage.googleapis.com/{ApiVersion}/files/{FileId}"; + + /// + /// Creates a new . + /// + /// The ID of the file to delete. + /// Should the request use the Beta API? + public GeminiFileDeleteRequest(string fileId, bool useBetaApi = true) + { + FileId = fileId; + ApiVersion = useBetaApi ? "v1beta" : "v1"; + } + } +} diff --git a/UGemini/Packages/com.uralstech.ugemini/Runtime/Scripts/Data/FileAPI/SingleRequests/GeminiFileGetRequest.cs b/UGemini/Packages/com.uralstech.ugemini/Runtime/Scripts/Data/FileAPI/SingleRequests/GeminiFileGetRequest.cs new file mode 100644 index 00000000..0815f03c --- /dev/null +++ b/UGemini/Packages/com.uralstech.ugemini/Runtime/Scripts/Data/FileAPI/SingleRequests/GeminiFileGetRequest.cs @@ -0,0 +1,32 @@ +namespace Uralstech.UGemini.FileAPI +{ + /// + /// Requests metadata for an existing file. Return type is . + /// + public class GeminiFileGetRequest : IGeminiGetRequest + { + /// + /// The API version to use. + /// + public string ApiVersion; + + /// + /// The ID of the file to get. + /// + public string FileId; + + /// + public string EndpointUri => $"https://generativelanguage.googleapis.com/{ApiVersion}/files/{FileId}"; + + /// + /// Creates a new . + /// + /// The ID of the file to get. + /// Should the request use the Beta API? + public GeminiFileGetRequest(string fileId, bool useBetaApi = true) + { + FileId = fileId; + ApiVersion = useBetaApi ? "v1beta" : "v1"; + } + } +} diff --git a/UGemini/Packages/com.uralstech.ugemini/Runtime/Scripts/Data/FileAPI/SingleRequests/GeminiFileUploadRequest.cs b/UGemini/Packages/com.uralstech.ugemini/Runtime/Scripts/Data/FileAPI/SingleRequests/GeminiFileUploadRequest.cs new file mode 100644 index 00000000..e3b27092 --- /dev/null +++ b/UGemini/Packages/com.uralstech.ugemini/Runtime/Scripts/Data/FileAPI/SingleRequests/GeminiFileUploadRequest.cs @@ -0,0 +1,76 @@ +using Newtonsoft.Json; +using Newtonsoft.Json.Serialization; +using System.Text; + +namespace Uralstech.UGemini.FileAPI +{ + /// + /// Uploads a file to the Gemini File API. Response type is . + /// + [JsonObject(NamingStrategyType = typeof(CamelCaseNamingStrategy))] + public class GeminiFileUploadRequest : IGeminiPostRequest + { + // /// + // /// The resource name. + // /// + // /// + // /// The ID (name excluding the "files/" prefix) can contain up to 40 characters that are lowercase alphanumeric or dashes (-).
+ // /// The ID cannot start or end with a dash. If the name is empty on create, a unique name will be generated. Example: files/123-456 + // ///
+ // public string Name; + + // /// + // /// The human-readable display name for the . The display name must be no more than 512 characters in length, including spaces. Example: "Welcome Image" + // /// + // [JsonProperty(DefaultValueHandling = DefaultValueHandling.Ignore), DefaultValue(null)] + // public string DisplayName = null; + + /// + /// The IANA standard MIME type of the . + /// + /// + /// You can use to convert + /// values to their MIME type, like: + /// GeminiContentType.ImagePNG.MimeType() + /// + [JsonIgnore] + public string MimeType; + + /// + /// The raw file data to upload. + /// + [JsonIgnore] + public byte[] RawData; + + /// + /// The API version to use. + /// + [JsonIgnore] + public string ApiVersion; + + /// + [JsonIgnore] + public string ContentType; + + /// + [JsonIgnore] + public string EndpointUri => $"https://generativelanguage.googleapis.com/upload/{ApiVersion}/files"; + + /// + /// Creates a new . + /// + /// The content type of the data + /// Should the request use the Beta API? + public GeminiFileUploadRequest(string contentType, bool useBetaApi = true) + { + ContentType = contentType; + ApiVersion = useBetaApi ? "v1beta" : "v1"; + } + + /// + public string GetUtf8EncodedData() + { + return Encoding.UTF8.GetString(RawData); + } + } +} diff --git a/UGemini/Packages/com.uralstech.ugemini/Runtime/Scripts/Data/IGeminiDeleteRequest.cs b/UGemini/Packages/com.uralstech.ugemini/Runtime/Scripts/Data/IGeminiDeleteRequest.cs new file mode 100644 index 00000000..d7bf6897 --- /dev/null +++ b/UGemini/Packages/com.uralstech.ugemini/Runtime/Scripts/Data/IGeminiDeleteRequest.cs @@ -0,0 +1,7 @@ +namespace Uralstech.UGemini +{ + /// + /// All Gemini API DELETE requests must inherit from this interface. + /// + public interface IGeminiDeleteRequest : IGeminiRequest { } +} diff --git a/UGemini/Packages/com.uralstech.ugemini/Runtime/Scripts/Data/IGeminiGetRequest.cs b/UGemini/Packages/com.uralstech.ugemini/Runtime/Scripts/Data/IGeminiGetRequest.cs new file mode 100644 index 00000000..35ad95c5 --- /dev/null +++ b/UGemini/Packages/com.uralstech.ugemini/Runtime/Scripts/Data/IGeminiGetRequest.cs @@ -0,0 +1,7 @@ +namespace Uralstech.UGemini +{ + /// + /// All Gemini API GET requests must inherit from this interface. + /// + public interface IGeminiGetRequest : IGeminiRequest { } +} diff --git a/UGemini/Packages/com.uralstech.ugemini/Runtime/Scripts/Data/IGeminiPostRequest.cs b/UGemini/Packages/com.uralstech.ugemini/Runtime/Scripts/Data/IGeminiPostRequest.cs new file mode 100644 index 00000000..95d1130f --- /dev/null +++ b/UGemini/Packages/com.uralstech.ugemini/Runtime/Scripts/Data/IGeminiPostRequest.cs @@ -0,0 +1,19 @@ +namespace Uralstech.UGemini +{ + /// + /// All Gemini API POST requests must inherit from this interface. + /// + public interface IGeminiPostRequest : IGeminiRequest + { + /// + /// The MIME type of the request content. + /// + public string ContentType { get; } + + /// + /// Converts the request object to a UTF-8 encoded . + /// + /// The string data. + public string GetUtf8EncodedData(); + } +} diff --git a/UGemini/Packages/com.uralstech.ugemini/Runtime/Scripts/Data/IGeminiRequest.cs b/UGemini/Packages/com.uralstech.ugemini/Runtime/Scripts/Data/IGeminiRequest.cs new file mode 100644 index 00000000..2dc53f46 --- /dev/null +++ b/UGemini/Packages/com.uralstech.ugemini/Runtime/Scripts/Data/IGeminiRequest.cs @@ -0,0 +1,13 @@ +namespace Uralstech.UGemini +{ + /// + /// All Gemini API requests must inherit from this interface. + /// + public interface IGeminiRequest + { + /// + /// The URI to the API endpoint. + /// + public string EndpointUri { get; } + } +} diff --git a/UGemini/Packages/com.uralstech.ugemini/Runtime/Scripts/Data/TokenCountRequest/GeminiTokenCountRequest.cs b/UGemini/Packages/com.uralstech.ugemini/Runtime/Scripts/Data/TokenCountRequest/GeminiTokenCountRequest.cs index 5598ec0f..a43fc534 100644 --- a/UGemini/Packages/com.uralstech.ugemini/Runtime/Scripts/Data/TokenCountRequest/GeminiTokenCountRequest.cs +++ b/UGemini/Packages/com.uralstech.ugemini/Runtime/Scripts/Data/TokenCountRequest/GeminiTokenCountRequest.cs @@ -1,5 +1,6 @@ using Newtonsoft.Json; using Newtonsoft.Json.Serialization; +using System; using System.ComponentModel; using Uralstech.UGemini.Chat; @@ -9,7 +10,7 @@ namespace Uralstech.UGemini.TokenCounting /// Request to count tokens in given content. /// [JsonObject(NamingStrategyType = typeof(CamelCaseNamingStrategy))] - public class GeminiTokenCountRequest + public class GeminiTokenCountRequest : IGeminiPostRequest { /// /// The input given to the model as a prompt. This field is ignored when is set. @@ -22,5 +23,45 @@ public class GeminiTokenCountRequest /// [JsonProperty("generateContentRequest", DefaultValueHandling = DefaultValueHandling.Ignore), DefaultValue(null)] public GeminiChatRequest CompleteRequest = null; + + /// + /// The model to use. + /// + [JsonIgnore] + public string Model; + + /// + /// The API version to use. + /// + [JsonIgnore] + public string ApiVersion; + + /// + [JsonIgnore] + public string ContentType => GeminiContentType.ApplicationJSON.MimeType(); + + /// + [JsonIgnore] + public string EndpointUri => $"https://generativelanguage.googleapis.com/{ApiVersion}/models/{Model}:countTokens"; + + /// + /// Creates a new . + /// + /// The model to use. + /// Should the request use the Beta API? + public GeminiTokenCountRequest(string model = GeminiManager.Gemini1_5Flash, bool useBetaApi = false) + { + Model = model; + ApiVersion = useBetaApi ? "v1beta" : "v1"; + } + + [Obsolete("It is recommended to use GeminiManager.Request instead of GeminiManager.Compute, as it is more generic and thus supports more request types.")] + public GeminiTokenCountRequest() { } + + /// + public string GetUtf8EncodedData() + { + return JsonConvert.SerializeObject(this); + } } } \ No newline at end of file diff --git a/UGemini/Packages/com.uralstech.ugemini/Runtime/Scripts/Exceptions/GeminiRequestException.cs b/UGemini/Packages/com.uralstech.ugemini/Runtime/Scripts/Exceptions/GeminiRequestException.cs index 20a8028c..9ba6dbdd 100644 --- a/UGemini/Packages/com.uralstech.ugemini/Runtime/Scripts/Exceptions/GeminiRequestException.cs +++ b/UGemini/Packages/com.uralstech.ugemini/Runtime/Scripts/Exceptions/GeminiRequestException.cs @@ -11,8 +11,14 @@ public class GeminiRequestException : Exception /// /// The endpoint of the failed request. /// + [Obsolete("It is recommended to use GeminiManager.Request instead of GeminiManager.Compute, as it is more generic and thus supports more request types.")] public GeminiManager.RequestEndPoint RequestEndPoint; + /// + /// The endpoint of the failed request. + /// + public Uri RequestEndpoint; + /// /// The response code returned by the request. /// @@ -31,6 +37,7 @@ public class GeminiRequestException : Exception /// /// The request's API version as a string. /// + [Obsolete("It is recommended to use GeminiManager.Request instead of GeminiManager.Compute, as it is more generic and thus supports more request types.")] public string ApiVersionString; /// @@ -38,6 +45,7 @@ public class GeminiRequestException : Exception /// public bool IsBetaApi; + [Obsolete("It is recommended to use GeminiManager.Request instead of GeminiManager.Compute, as it is more generic and thus supports more request types.")] internal GeminiRequestException(GeminiManager.RequestEndPoint requestEndPoint, UnityWebRequest request, string apiVersion) : base($"Failed Gemini request: " + $"Request API version: {apiVersion} | " + @@ -55,5 +63,21 @@ internal GeminiRequestException(GeminiManager.RequestEndPoint requestEndPoint, U ApiVersionString = apiVersion; IsBetaApi = apiVersion.Contains("beta"); } + + internal GeminiRequestException(UnityWebRequest webRequest) + : base($"Failed Gemini request: " + + $"Request Endpoint: {webRequest.uri.AbsolutePath} | " + + $"Request Error Code: {webRequest.responseCode} | " + + $"Request Error: {webRequest.error} | " + + $"Details:\n{webRequest.downloadHandler.text}") + { + RequestEndpoint = webRequest.uri; + + RequestError = webRequest.error; + RequestErrorCode = webRequest.responseCode; + RequestErrorMessage = webRequest.downloadHandler.text; + + IsBetaApi = RequestEndpoint.AbsolutePath.Contains("beta"); + } } } diff --git a/UGemini/Packages/com.uralstech.ugemini/Runtime/Scripts/Managers/GeminiManager.cs b/UGemini/Packages/com.uralstech.ugemini/Runtime/Scripts/Managers/GeminiManager.cs index 06633b17..1521cf74 100644 --- a/UGemini/Packages/com.uralstech.ugemini/Runtime/Scripts/Managers/GeminiManager.cs +++ b/UGemini/Packages/com.uralstech.ugemini/Runtime/Scripts/Managers/GeminiManager.cs @@ -1,5 +1,6 @@ using Newtonsoft.Json; using System; +using System.Net; using System.Threading.Tasks; using UnityEngine; using UnityEngine.Networking; @@ -68,9 +69,80 @@ public void SetApiKey(string apiKey) _geminiApiKey = apiKey; } + /// + /// Computes a request on the Gemini API. + /// + /// + /// + /// The response type. For example, a request of type corresponds + /// to a response type of , and a request of type + /// corresponds to a response of type . + /// + /// + /// The request object. + /// The computed response. + /// Thrown when the API request fails. + public async Task Request(IGeminiPostRequest request) + { + string utf8RequestData = request.GetUtf8EncodedData(); + string requestEndpoint = request.EndpointUri; + + using UnityWebRequest webRequest = UnityWebRequest.Post(requestEndpoint, utf8RequestData, request.ContentType); + return JsonConvert.DeserializeObject((await ComputeRequest(webRequest)).downloadHandler.text); + } + + /// + /// Computes a request on the Gemini API. + /// + /// + /// + /// The response type. For example, a request of type corresponds + /// to a response type of , and a request of type + /// corresponds to a response of type . + /// + /// + /// The request object. + /// Thrown when the API request fails. + public async Task Request(IGeminiGetRequest request) + { + string requestEndpoint = request.EndpointUri; + + using UnityWebRequest webRequest = UnityWebRequest.Get(requestEndpoint); + return JsonConvert.DeserializeObject((await ComputeRequest(webRequest)).downloadHandler.text); + } + + /// + /// Computes a request on the Gemini API. + /// + /// The request object. + /// Thrown when the API request fails. + public async void Request(IGeminiDeleteRequest request) + { + string requestEndpoint = request.EndpointUri; + using UnityWebRequest webRequest = UnityWebRequest.Delete(requestEndpoint); + + await ComputeRequest(webRequest); + } + + private async Task ComputeRequest(UnityWebRequest webRequest) + { + webRequest.SetRequestHeader("X-goog-api-key", _geminiApiKey); + UnityWebRequestAsyncOperation operation = webRequest.SendWebRequest(); + while (!operation.isDone) + await Task.Yield(); + + if (webRequest.result != UnityWebRequest.Result.Success) + throw new GeminiRequestException(webRequest); + + Debug.Log("Gemini API computation succeeded."); + return webRequest; + } + + #region Obsolete /// /// The request endpoint. /// + [Obsolete("It is recommended to use GeminiManager.Request instead of GeminiManager.Compute, as it is more generic and thus supports more request types.")] public enum RequestEndPoint { /// The chat endpoint. @@ -109,6 +181,7 @@ public enum RequestEndPoint /// The computed request. /// Thrown if unexpected arguments are encountered. /// Thrown when the API request fails. + [Obsolete("It is recommended to use GeminiManager.Request instead of GeminiManager.Compute, as it is more generic and thus supports more request types.")] public async Task Compute(TRequest request, RequestEndPoint endpoint, string model = Gemini1_5Flash, bool useBeta = false) { Debug.Log("Computing request on Gemini API."); @@ -139,5 +212,6 @@ public async Task Compute(TRequest request, Requ Debug.Log("Gemini API computation succeeded."); return JsonConvert.DeserializeObject(webRequest.downloadHandler.text); } + #endregion } } diff --git a/UGemini/Packages/com.uralstech.ugemini/package.json b/UGemini/Packages/com.uralstech.ugemini/package.json index f957f2d5..61163e67 100644 --- a/UGemini/Packages/com.uralstech.ugemini/package.json +++ b/UGemini/Packages/com.uralstech.ugemini/package.json @@ -9,7 +9,7 @@ "AI", "Integration" ], - "version": "1.0.1", + "version": "1.1.0-preview.1", "unity": "2022.3", "hideInEditor": false, "documentationUrl": "https://github.com/Uralstech/UGemini/blob/master/UGemini/Packages/com.uralstech.ugemini/Documentation~/README.md", From 58425bb72508ea0f8264a80448bb853e09a48c61 Mon Sep 17 00:00:00 2001 From: Udayshankar Ravikumar Date: Wed, 3 Jul 2024 18:07:56 +0530 Subject: [PATCH 2/4] Updated README.md --- README.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 28052293..b9035628 100644 --- a/README.md +++ b/README.md @@ -56,13 +56,13 @@ Follow the steps detailed in the OpenUPM installation method and only install th - [ ] `cachedContents` endpoint :test_tube: - [ ] `corpora` endpoint :test_tube: -- [ ] `files` endpoint :test_tube: :construction: -- [ ] `media` endpoint :test_tube: :construction: +- [x] `files` endpoint :test_tube: :construction: +- [x] `media` endpoint :test_tube: :construction: - [ ] `tunedModels` endpoint - [ ] `operations` endpoint :construction: :warning: - Not all methods/features are supported
-:construction: - The feature is being worked on
+:construction: - The feature is being worked on and is unstable
:test_tube: - Using the v1beta API ### Documentation From a1caf08422999159d7c6ad3a2512c3c1f45793d7 Mon Sep 17 00:00:00 2001 From: Udayshankar Ravikumar Date: Wed, 3 Jul 2024 19:36:49 +0530 Subject: [PATCH 3/4] 1.1.0-preview.2 --- .../Scripts/Data/ChatRequest/GeminiChatRequest.cs | 1 + .../Runtime/Scripts/Data/Common/Content.meta | 8 ++++++++ .../Data/Common/{ => Content}/GeminiContent.cs.meta | 2 +- .../Common/{ => Content}/GeminiContentBlob.cs.meta | 2 +- .../Common/{ => Content}/GeminiContentPart.cs.meta | 2 +- .../Common/{ => Content}/GeminiContentType.cs.meta | 2 +- .../Data/Common/Content/UnityExtensions.cs.meta | 11 +++++++++++ .../Runtime/Scripts/Data/Common/Status.meta | 8 ++++++++ .../Scripts/Data/Common/Status/GeminiStatus.cs.meta | 11 +++++++++++ .../Data/Common/Status/GeminiStatusDetails.cs.meta | 11 +++++++++++ .../Runtime/Scripts/Data/FileAPI/FileListing.meta | 8 ++++++++ .../FileAPI/FileListing/GeminiFileListRequest.cs.meta | 11 +++++++++++ .../FileListing/GeminiFileListResponse.cs.meta | 11 +++++++++++ .../Scripts/Data/FileAPI/GeminiFileState.cs.meta | 11 +++++++++++ .../Data/FileAPI/GeminiFileVideoMetaData.cs.meta | 11 +++++++++++ .../Data/FileAPI/GeminiTimeSpanJsonConverter.cs.meta | 11 +++++++++++ .../Runtime/Scripts/Data/FileAPI/SingleRequests.meta | 8 ++++++++ .../SingleRequests/GeminiFileDeleteRequest.cs.meta | 11 +++++++++++ .../SingleRequests/GeminiFileGetRequest.cs.meta | 11 +++++++++++ .../FileAPI/SingleRequests/GeminiFileUploadRequest.cs | 2 +- .../GeminiFileUploadRequest.cs.meta | 2 +- .../Runtime/Scripts/Data/IGeminiDeleteRequest.cs.meta | 11 +++++++++++ .../Runtime/Scripts/Data/IGeminiGetRequest.cs.meta | 11 +++++++++++ .../Runtime/Scripts/Data/IGeminiPostRequest.cs.meta | 11 +++++++++++ .../Runtime/Scripts/Data/IGeminiRequest.cs.meta | 11 +++++++++++ .../Scripts/FunctionCallingChatManager.cs | 9 ++++++--- .../JSONResponseSample/Scripts/JSONChatManager.cs | 4 ++-- .../SimpleMultiTurnChatSample/Scenes/Main.unity | 8 ++++---- .../Scripts/MultiTurnChatManager.cs | 6 ++---- .../TokenCounterSample/Scripts/TokenCounterManager.cs | 5 +++-- UGemini/Packages/com.uralstech.ugemini/package.json | 2 +- 31 files changed, 211 insertions(+), 22 deletions(-) create mode 100644 UGemini/Packages/com.uralstech.ugemini/Runtime/Scripts/Data/Common/Content.meta rename UGemini/Packages/com.uralstech.ugemini/Runtime/Scripts/Data/Common/{ => Content}/GeminiContent.cs.meta (83%) rename UGemini/Packages/com.uralstech.ugemini/Runtime/Scripts/Data/Common/{ => Content}/GeminiContentBlob.cs.meta (83%) rename UGemini/Packages/com.uralstech.ugemini/Runtime/Scripts/Data/Common/{ => Content}/GeminiContentPart.cs.meta (83%) rename UGemini/Packages/com.uralstech.ugemini/Runtime/Scripts/Data/Common/{ => Content}/GeminiContentType.cs.meta (83%) create mode 100644 UGemini/Packages/com.uralstech.ugemini/Runtime/Scripts/Data/Common/Content/UnityExtensions.cs.meta create mode 100644 UGemini/Packages/com.uralstech.ugemini/Runtime/Scripts/Data/Common/Status.meta create mode 100644 UGemini/Packages/com.uralstech.ugemini/Runtime/Scripts/Data/Common/Status/GeminiStatus.cs.meta create mode 100644 UGemini/Packages/com.uralstech.ugemini/Runtime/Scripts/Data/Common/Status/GeminiStatusDetails.cs.meta create mode 100644 UGemini/Packages/com.uralstech.ugemini/Runtime/Scripts/Data/FileAPI/FileListing.meta create mode 100644 UGemini/Packages/com.uralstech.ugemini/Runtime/Scripts/Data/FileAPI/FileListing/GeminiFileListRequest.cs.meta create mode 100644 UGemini/Packages/com.uralstech.ugemini/Runtime/Scripts/Data/FileAPI/FileListing/GeminiFileListResponse.cs.meta create mode 100644 UGemini/Packages/com.uralstech.ugemini/Runtime/Scripts/Data/FileAPI/GeminiFileState.cs.meta create mode 100644 UGemini/Packages/com.uralstech.ugemini/Runtime/Scripts/Data/FileAPI/GeminiFileVideoMetaData.cs.meta create mode 100644 UGemini/Packages/com.uralstech.ugemini/Runtime/Scripts/Data/FileAPI/GeminiTimeSpanJsonConverter.cs.meta create mode 100644 UGemini/Packages/com.uralstech.ugemini/Runtime/Scripts/Data/FileAPI/SingleRequests.meta create mode 100644 UGemini/Packages/com.uralstech.ugemini/Runtime/Scripts/Data/FileAPI/SingleRequests/GeminiFileDeleteRequest.cs.meta create mode 100644 UGemini/Packages/com.uralstech.ugemini/Runtime/Scripts/Data/FileAPI/SingleRequests/GeminiFileGetRequest.cs.meta rename UGemini/Packages/com.uralstech.ugemini/Runtime/Scripts/Data/FileAPI/{ => SingleRequests}/GeminiFileUploadRequest.cs.meta (83%) create mode 100644 UGemini/Packages/com.uralstech.ugemini/Runtime/Scripts/Data/IGeminiDeleteRequest.cs.meta create mode 100644 UGemini/Packages/com.uralstech.ugemini/Runtime/Scripts/Data/IGeminiGetRequest.cs.meta create mode 100644 UGemini/Packages/com.uralstech.ugemini/Runtime/Scripts/Data/IGeminiPostRequest.cs.meta create mode 100644 UGemini/Packages/com.uralstech.ugemini/Runtime/Scripts/Data/IGeminiRequest.cs.meta diff --git a/UGemini/Packages/com.uralstech.ugemini/Runtime/Scripts/Data/ChatRequest/GeminiChatRequest.cs b/UGemini/Packages/com.uralstech.ugemini/Runtime/Scripts/Data/ChatRequest/GeminiChatRequest.cs index c37de1d6..df59b4c0 100644 --- a/UGemini/Packages/com.uralstech.ugemini/Runtime/Scripts/Data/ChatRequest/GeminiChatRequest.cs +++ b/UGemini/Packages/com.uralstech.ugemini/Runtime/Scripts/Data/ChatRequest/GeminiChatRequest.cs @@ -100,6 +100,7 @@ public class GeminiChatRequest : IGeminiPostRequest public string ContentType => GeminiContentType.ApplicationJSON.MimeType(); /// + [JsonIgnore] public string EndpointUri => $"https://generativelanguage.googleapis.com/{ApiVersion}/models/{Model}:generateContent"; /// diff --git a/UGemini/Packages/com.uralstech.ugemini/Runtime/Scripts/Data/Common/Content.meta b/UGemini/Packages/com.uralstech.ugemini/Runtime/Scripts/Data/Common/Content.meta new file mode 100644 index 00000000..ab11565d --- /dev/null +++ b/UGemini/Packages/com.uralstech.ugemini/Runtime/Scripts/Data/Common/Content.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: d7247a8e979edd546895a35af26bd687 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/UGemini/Packages/com.uralstech.ugemini/Runtime/Scripts/Data/Common/GeminiContent.cs.meta b/UGemini/Packages/com.uralstech.ugemini/Runtime/Scripts/Data/Common/Content/GeminiContent.cs.meta similarity index 83% rename from UGemini/Packages/com.uralstech.ugemini/Runtime/Scripts/Data/Common/GeminiContent.cs.meta rename to UGemini/Packages/com.uralstech.ugemini/Runtime/Scripts/Data/Common/Content/GeminiContent.cs.meta index 3b5a2d90..bfccf8d4 100644 --- a/UGemini/Packages/com.uralstech.ugemini/Runtime/Scripts/Data/Common/GeminiContent.cs.meta +++ b/UGemini/Packages/com.uralstech.ugemini/Runtime/Scripts/Data/Common/Content/GeminiContent.cs.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 3f796def2fe3f184da9f4cf969307182 +guid: a8234083d75c5334a9d9cd77e0ff52f0 MonoImporter: externalObjects: {} serializedVersion: 2 diff --git a/UGemini/Packages/com.uralstech.ugemini/Runtime/Scripts/Data/Common/GeminiContentBlob.cs.meta b/UGemini/Packages/com.uralstech.ugemini/Runtime/Scripts/Data/Common/Content/GeminiContentBlob.cs.meta similarity index 83% rename from UGemini/Packages/com.uralstech.ugemini/Runtime/Scripts/Data/Common/GeminiContentBlob.cs.meta rename to UGemini/Packages/com.uralstech.ugemini/Runtime/Scripts/Data/Common/Content/GeminiContentBlob.cs.meta index a766fa92..ba58767c 100644 --- a/UGemini/Packages/com.uralstech.ugemini/Runtime/Scripts/Data/Common/GeminiContentBlob.cs.meta +++ b/UGemini/Packages/com.uralstech.ugemini/Runtime/Scripts/Data/Common/Content/GeminiContentBlob.cs.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 90fcdb32472a9e74a866844be93c7c42 +guid: 0db905dff3aab2b468c9d333b664592e MonoImporter: externalObjects: {} serializedVersion: 2 diff --git a/UGemini/Packages/com.uralstech.ugemini/Runtime/Scripts/Data/Common/GeminiContentPart.cs.meta b/UGemini/Packages/com.uralstech.ugemini/Runtime/Scripts/Data/Common/Content/GeminiContentPart.cs.meta similarity index 83% rename from UGemini/Packages/com.uralstech.ugemini/Runtime/Scripts/Data/Common/GeminiContentPart.cs.meta rename to UGemini/Packages/com.uralstech.ugemini/Runtime/Scripts/Data/Common/Content/GeminiContentPart.cs.meta index fa9034fa..65a0466f 100644 --- a/UGemini/Packages/com.uralstech.ugemini/Runtime/Scripts/Data/Common/GeminiContentPart.cs.meta +++ b/UGemini/Packages/com.uralstech.ugemini/Runtime/Scripts/Data/Common/Content/GeminiContentPart.cs.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: aaefb5c036c8f6c43b10983d02f072fe +guid: 61ee7a4f5a709a149b75abacf02953a7 MonoImporter: externalObjects: {} serializedVersion: 2 diff --git a/UGemini/Packages/com.uralstech.ugemini/Runtime/Scripts/Data/Common/GeminiContentType.cs.meta b/UGemini/Packages/com.uralstech.ugemini/Runtime/Scripts/Data/Common/Content/GeminiContentType.cs.meta similarity index 83% rename from UGemini/Packages/com.uralstech.ugemini/Runtime/Scripts/Data/Common/GeminiContentType.cs.meta rename to UGemini/Packages/com.uralstech.ugemini/Runtime/Scripts/Data/Common/Content/GeminiContentType.cs.meta index f85c576b..c3773d97 100644 --- a/UGemini/Packages/com.uralstech.ugemini/Runtime/Scripts/Data/Common/GeminiContentType.cs.meta +++ b/UGemini/Packages/com.uralstech.ugemini/Runtime/Scripts/Data/Common/Content/GeminiContentType.cs.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 67fd7164b1c54424e8aff0b14b421583 +guid: cf0aed5e4c6b9c74caf0b6d730b89592 MonoImporter: externalObjects: {} serializedVersion: 2 diff --git a/UGemini/Packages/com.uralstech.ugemini/Runtime/Scripts/Data/Common/Content/UnityExtensions.cs.meta b/UGemini/Packages/com.uralstech.ugemini/Runtime/Scripts/Data/Common/Content/UnityExtensions.cs.meta new file mode 100644 index 00000000..30076e8b --- /dev/null +++ b/UGemini/Packages/com.uralstech.ugemini/Runtime/Scripts/Data/Common/Content/UnityExtensions.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 3c74ffc185a3ec44581b0dffbe75ea31 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/UGemini/Packages/com.uralstech.ugemini/Runtime/Scripts/Data/Common/Status.meta b/UGemini/Packages/com.uralstech.ugemini/Runtime/Scripts/Data/Common/Status.meta new file mode 100644 index 00000000..4c8184f0 --- /dev/null +++ b/UGemini/Packages/com.uralstech.ugemini/Runtime/Scripts/Data/Common/Status.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 920ef3bb156faa24aa53585c97e15347 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/UGemini/Packages/com.uralstech.ugemini/Runtime/Scripts/Data/Common/Status/GeminiStatus.cs.meta b/UGemini/Packages/com.uralstech.ugemini/Runtime/Scripts/Data/Common/Status/GeminiStatus.cs.meta new file mode 100644 index 00000000..7f214462 --- /dev/null +++ b/UGemini/Packages/com.uralstech.ugemini/Runtime/Scripts/Data/Common/Status/GeminiStatus.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 1f1c344d7ca67694a979a8a3064a2c84 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/UGemini/Packages/com.uralstech.ugemini/Runtime/Scripts/Data/Common/Status/GeminiStatusDetails.cs.meta b/UGemini/Packages/com.uralstech.ugemini/Runtime/Scripts/Data/Common/Status/GeminiStatusDetails.cs.meta new file mode 100644 index 00000000..34e8c148 --- /dev/null +++ b/UGemini/Packages/com.uralstech.ugemini/Runtime/Scripts/Data/Common/Status/GeminiStatusDetails.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 03acd7a2707847a49bd9abbbd7ba2f33 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/UGemini/Packages/com.uralstech.ugemini/Runtime/Scripts/Data/FileAPI/FileListing.meta b/UGemini/Packages/com.uralstech.ugemini/Runtime/Scripts/Data/FileAPI/FileListing.meta new file mode 100644 index 00000000..46ba526f --- /dev/null +++ b/UGemini/Packages/com.uralstech.ugemini/Runtime/Scripts/Data/FileAPI/FileListing.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 0248726a964a84a419a48d1e28d5b70c +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/UGemini/Packages/com.uralstech.ugemini/Runtime/Scripts/Data/FileAPI/FileListing/GeminiFileListRequest.cs.meta b/UGemini/Packages/com.uralstech.ugemini/Runtime/Scripts/Data/FileAPI/FileListing/GeminiFileListRequest.cs.meta new file mode 100644 index 00000000..0028ed83 --- /dev/null +++ b/UGemini/Packages/com.uralstech.ugemini/Runtime/Scripts/Data/FileAPI/FileListing/GeminiFileListRequest.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 5094236712eb81249917b4a0e4ab2b27 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/UGemini/Packages/com.uralstech.ugemini/Runtime/Scripts/Data/FileAPI/FileListing/GeminiFileListResponse.cs.meta b/UGemini/Packages/com.uralstech.ugemini/Runtime/Scripts/Data/FileAPI/FileListing/GeminiFileListResponse.cs.meta new file mode 100644 index 00000000..d00b5138 --- /dev/null +++ b/UGemini/Packages/com.uralstech.ugemini/Runtime/Scripts/Data/FileAPI/FileListing/GeminiFileListResponse.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 9f6e07d1ded3f924c8f1216e608547bc +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/UGemini/Packages/com.uralstech.ugemini/Runtime/Scripts/Data/FileAPI/GeminiFileState.cs.meta b/UGemini/Packages/com.uralstech.ugemini/Runtime/Scripts/Data/FileAPI/GeminiFileState.cs.meta new file mode 100644 index 00000000..c39e058c --- /dev/null +++ b/UGemini/Packages/com.uralstech.ugemini/Runtime/Scripts/Data/FileAPI/GeminiFileState.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 87c691d606e8d4b4a9cab8f0584168cd +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/UGemini/Packages/com.uralstech.ugemini/Runtime/Scripts/Data/FileAPI/GeminiFileVideoMetaData.cs.meta b/UGemini/Packages/com.uralstech.ugemini/Runtime/Scripts/Data/FileAPI/GeminiFileVideoMetaData.cs.meta new file mode 100644 index 00000000..a344c8a8 --- /dev/null +++ b/UGemini/Packages/com.uralstech.ugemini/Runtime/Scripts/Data/FileAPI/GeminiFileVideoMetaData.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: f72d6c2abcda1b74bbc675aa436a0187 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/UGemini/Packages/com.uralstech.ugemini/Runtime/Scripts/Data/FileAPI/GeminiTimeSpanJsonConverter.cs.meta b/UGemini/Packages/com.uralstech.ugemini/Runtime/Scripts/Data/FileAPI/GeminiTimeSpanJsonConverter.cs.meta new file mode 100644 index 00000000..96e31e41 --- /dev/null +++ b/UGemini/Packages/com.uralstech.ugemini/Runtime/Scripts/Data/FileAPI/GeminiTimeSpanJsonConverter.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 43f812835e769204cae2631e63f320d5 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/UGemini/Packages/com.uralstech.ugemini/Runtime/Scripts/Data/FileAPI/SingleRequests.meta b/UGemini/Packages/com.uralstech.ugemini/Runtime/Scripts/Data/FileAPI/SingleRequests.meta new file mode 100644 index 00000000..9622a18b --- /dev/null +++ b/UGemini/Packages/com.uralstech.ugemini/Runtime/Scripts/Data/FileAPI/SingleRequests.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: a680a200e99d7d248b584e6fa06e0970 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/UGemini/Packages/com.uralstech.ugemini/Runtime/Scripts/Data/FileAPI/SingleRequests/GeminiFileDeleteRequest.cs.meta b/UGemini/Packages/com.uralstech.ugemini/Runtime/Scripts/Data/FileAPI/SingleRequests/GeminiFileDeleteRequest.cs.meta new file mode 100644 index 00000000..ad1bda66 --- /dev/null +++ b/UGemini/Packages/com.uralstech.ugemini/Runtime/Scripts/Data/FileAPI/SingleRequests/GeminiFileDeleteRequest.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 54d7d9cfc27632040aca0800d9553039 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/UGemini/Packages/com.uralstech.ugemini/Runtime/Scripts/Data/FileAPI/SingleRequests/GeminiFileGetRequest.cs.meta b/UGemini/Packages/com.uralstech.ugemini/Runtime/Scripts/Data/FileAPI/SingleRequests/GeminiFileGetRequest.cs.meta new file mode 100644 index 00000000..f91a28be --- /dev/null +++ b/UGemini/Packages/com.uralstech.ugemini/Runtime/Scripts/Data/FileAPI/SingleRequests/GeminiFileGetRequest.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: befb4abcd406b7a48964833398f579c2 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/UGemini/Packages/com.uralstech.ugemini/Runtime/Scripts/Data/FileAPI/SingleRequests/GeminiFileUploadRequest.cs b/UGemini/Packages/com.uralstech.ugemini/Runtime/Scripts/Data/FileAPI/SingleRequests/GeminiFileUploadRequest.cs index e3b27092..3d82661c 100644 --- a/UGemini/Packages/com.uralstech.ugemini/Runtime/Scripts/Data/FileAPI/SingleRequests/GeminiFileUploadRequest.cs +++ b/UGemini/Packages/com.uralstech.ugemini/Runtime/Scripts/Data/FileAPI/SingleRequests/GeminiFileUploadRequest.cs @@ -50,7 +50,7 @@ public class GeminiFileUploadRequest : IGeminiPostRequest /// [JsonIgnore] - public string ContentType; + public string ContentType { get; } /// [JsonIgnore] diff --git a/UGemini/Packages/com.uralstech.ugemini/Runtime/Scripts/Data/FileAPI/GeminiFileUploadRequest.cs.meta b/UGemini/Packages/com.uralstech.ugemini/Runtime/Scripts/Data/FileAPI/SingleRequests/GeminiFileUploadRequest.cs.meta similarity index 83% rename from UGemini/Packages/com.uralstech.ugemini/Runtime/Scripts/Data/FileAPI/GeminiFileUploadRequest.cs.meta rename to UGemini/Packages/com.uralstech.ugemini/Runtime/Scripts/Data/FileAPI/SingleRequests/GeminiFileUploadRequest.cs.meta index de027eac..3d828ee7 100644 --- a/UGemini/Packages/com.uralstech.ugemini/Runtime/Scripts/Data/FileAPI/GeminiFileUploadRequest.cs.meta +++ b/UGemini/Packages/com.uralstech.ugemini/Runtime/Scripts/Data/FileAPI/SingleRequests/GeminiFileUploadRequest.cs.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 528cee67c26d7bd4f9f9ef9ec8d680a0 +guid: 884fd14974c197244b85a6303bbf20a0 MonoImporter: externalObjects: {} serializedVersion: 2 diff --git a/UGemini/Packages/com.uralstech.ugemini/Runtime/Scripts/Data/IGeminiDeleteRequest.cs.meta b/UGemini/Packages/com.uralstech.ugemini/Runtime/Scripts/Data/IGeminiDeleteRequest.cs.meta new file mode 100644 index 00000000..c7a49215 --- /dev/null +++ b/UGemini/Packages/com.uralstech.ugemini/Runtime/Scripts/Data/IGeminiDeleteRequest.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 4a8ec4edbec728f4cadc8298b2b4cf43 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/UGemini/Packages/com.uralstech.ugemini/Runtime/Scripts/Data/IGeminiGetRequest.cs.meta b/UGemini/Packages/com.uralstech.ugemini/Runtime/Scripts/Data/IGeminiGetRequest.cs.meta new file mode 100644 index 00000000..904d9c95 --- /dev/null +++ b/UGemini/Packages/com.uralstech.ugemini/Runtime/Scripts/Data/IGeminiGetRequest.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 0a81da62d11c4714b9d8771848281949 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/UGemini/Packages/com.uralstech.ugemini/Runtime/Scripts/Data/IGeminiPostRequest.cs.meta b/UGemini/Packages/com.uralstech.ugemini/Runtime/Scripts/Data/IGeminiPostRequest.cs.meta new file mode 100644 index 00000000..17528bd5 --- /dev/null +++ b/UGemini/Packages/com.uralstech.ugemini/Runtime/Scripts/Data/IGeminiPostRequest.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 9f3e20e281360a84b9495ad977a1f5b1 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/UGemini/Packages/com.uralstech.ugemini/Runtime/Scripts/Data/IGeminiRequest.cs.meta b/UGemini/Packages/com.uralstech.ugemini/Runtime/Scripts/Data/IGeminiRequest.cs.meta new file mode 100644 index 00000000..56b143f5 --- /dev/null +++ b/UGemini/Packages/com.uralstech.ugemini/Runtime/Scripts/Data/IGeminiRequest.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: beea2fa388c52084ab183de9c788053e +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/UGemini/Packages/com.uralstech.ugemini/Samples~/FunctionCallingSample/Scripts/FunctionCallingChatManager.cs b/UGemini/Packages/com.uralstech.ugemini/Samples~/FunctionCallingSample/Scripts/FunctionCallingChatManager.cs index a9851472..83465fb3 100644 --- a/UGemini/Packages/com.uralstech.ugemini/Samples~/FunctionCallingSample/Scripts/FunctionCallingChatManager.cs +++ b/UGemini/Packages/com.uralstech.ugemini/Samples~/FunctionCallingSample/Scripts/FunctionCallingChatManager.cs @@ -7,6 +7,8 @@ using Uralstech.UGemini.Tools; using Uralstech.UGemini.Tools.Declaration; +#pragma warning disable IDE0090 // Use 'new(...)' + namespace Uralstech.UGemini.Samples { public class FunctionCallingChatManager : MonoBehaviour @@ -90,12 +92,12 @@ public async void OnChat() GeminiFunctionCall functionCall; do { - response = await GeminiManager.Instance.Compute(new GeminiChatRequest() + response = await GeminiManager.Instance.Request(new GeminiChatRequest(useBetaApi: true) { Contents = contents.ToArray(), Tools = new GeminiTool[] { s_geminiFunctions }, ToolConfig = GeminiToolConfiguration.GetConfiguration(GeminiFunctionCallingMode.Any), - }, GeminiManager.RequestEndPoint.Chat, useBeta: true); + }); functionCall = response.Parts[0].FunctionCall; if (functionCall != null) @@ -130,7 +132,6 @@ public async void OnChat() contents.Add(GeminiContent.GetContent(functionCall)); contents.Add(GeminiContent.GetContent(functionCall.GetResponse(functionResponse))); } - } while (functionCall != null); _chatResponse.text = response.Parts[0].Text; @@ -161,3 +162,5 @@ private bool TryChangeTextColor(string color) } } } + +#pragma warning restore IDE0090 // Use 'new(...)' \ No newline at end of file diff --git a/UGemini/Packages/com.uralstech.ugemini/Samples~/JSONResponseSample/Scripts/JSONChatManager.cs b/UGemini/Packages/com.uralstech.ugemini/Samples~/JSONResponseSample/Scripts/JSONChatManager.cs index 9a9ebc66..43c2f8be 100644 --- a/UGemini/Packages/com.uralstech.ugemini/Samples~/JSONResponseSample/Scripts/JSONChatManager.cs +++ b/UGemini/Packages/com.uralstech.ugemini/Samples~/JSONResponseSample/Scripts/JSONChatManager.cs @@ -21,7 +21,7 @@ public async void OnChat() } // Note: It seems GeminiManager.Gemini1_5Flash is not very good at JSON. - GeminiChatResponse response = await GeminiManager.Instance.Compute(new GeminiChatRequest() + GeminiChatResponse response = await GeminiManager.Instance.Request(new GeminiChatRequest(GeminiManager.Gemini1_5Pro, true) { Contents = new GeminiContent[] { @@ -57,7 +57,7 @@ public async void OnChat() }, }, } - }, GeminiManager.RequestEndPoint.Chat, GeminiManager.Gemini1_5Pro, true); + }); _chatResponse.text = response.Parts[0].Text; } diff --git a/UGemini/Packages/com.uralstech.ugemini/Samples~/SimpleMultiTurnChatSample/Scenes/Main.unity b/UGemini/Packages/com.uralstech.ugemini/Samples~/SimpleMultiTurnChatSample/Scenes/Main.unity index 5ff1ca3f..87f8585e 100644 --- a/UGemini/Packages/com.uralstech.ugemini/Samples~/SimpleMultiTurnChatSample/Scenes/Main.unity +++ b/UGemini/Packages/com.uralstech.ugemini/Samples~/SimpleMultiTurnChatSample/Scenes/Main.unity @@ -971,10 +971,10 @@ RectTransform: - {fileID: 387578677} m_Father: {fileID: 439058294} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0, y: 0} - m_AnchorMax: {x: 1, y: 1} - m_AnchoredPosition: {x: 0, y: -115} - m_SizeDelta: {x: -1332.3552, y: -1125.938} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 0, y: -116} + m_SizeDelta: {x: 587.645, y: 65.935974} m_Pivot: {x: 0.5, y: 0.5} --- !u!114 &777598222 MonoBehaviour: diff --git a/UGemini/Packages/com.uralstech.ugemini/Samples~/SimpleMultiTurnChatSample/Scripts/MultiTurnChatManager.cs b/UGemini/Packages/com.uralstech.ugemini/Samples~/SimpleMultiTurnChatSample/Scripts/MultiTurnChatManager.cs index 11ac8506..14161c92 100644 --- a/UGemini/Packages/com.uralstech.ugemini/Samples~/SimpleMultiTurnChatSample/Scripts/MultiTurnChatManager.cs +++ b/UGemini/Packages/com.uralstech.ugemini/Samples~/SimpleMultiTurnChatSample/Scripts/MultiTurnChatManager.cs @@ -99,13 +99,11 @@ public async void OnChat() if (_chatHistory.Count == 0) return; - GeminiChatRequest request = new() + GeminiChatResponse response = await GeminiManager.Instance.Request(new GeminiChatRequest(useBetaApi: _useBeta) { Contents = _chatHistory.ToArray(), SystemInstruction = _systemPrompt, - }; - - GeminiChatResponse response = await GeminiManager.Instance.Compute(request, GeminiManager.RequestEndPoint.Chat, useBeta: _useBeta); + }); _chatHistory.Add(response.Candidates[0].Content); AddMessage(response.Candidates[0].Content); diff --git a/UGemini/Packages/com.uralstech.ugemini/Samples~/TokenCounterSample/Scripts/TokenCounterManager.cs b/UGemini/Packages/com.uralstech.ugemini/Samples~/TokenCounterSample/Scripts/TokenCounterManager.cs index f088667d..a8385261 100644 --- a/UGemini/Packages/com.uralstech.ugemini/Samples~/TokenCounterSample/Scripts/TokenCounterManager.cs +++ b/UGemini/Packages/com.uralstech.ugemini/Samples~/TokenCounterSample/Scripts/TokenCounterManager.cs @@ -6,6 +6,7 @@ namespace Uralstech.UGemini.Samples { public class TokenCounterManager : MonoBehaviour { + [SerializeField] private bool _useBeta; [SerializeField] private InputField _contentInput; [SerializeField] private Text _response; @@ -18,13 +19,13 @@ public async void OnCount() return; } - GeminiTokenCountResponse response = await GeminiManager.Instance.Compute(new GeminiTokenCountRequest() + GeminiTokenCountResponse response = await GeminiManager.Instance.Request(new GeminiTokenCountRequest(GeminiManager.Gemini1_5Flash, _useBeta) { Contents = new GeminiContent[] { GeminiContent.GetContent(text, GeminiRole.User), }, - }, GeminiManager.RequestEndPoint.CountTokens, GeminiManager.Gemini1_5Flash, true); + }); _response.text = $"Tokens: {response.TotalTokens}"; } diff --git a/UGemini/Packages/com.uralstech.ugemini/package.json b/UGemini/Packages/com.uralstech.ugemini/package.json index 61163e67..1ff6d339 100644 --- a/UGemini/Packages/com.uralstech.ugemini/package.json +++ b/UGemini/Packages/com.uralstech.ugemini/package.json @@ -9,7 +9,7 @@ "AI", "Integration" ], - "version": "1.1.0-preview.1", + "version": "1.1.0-preview.2", "unity": "2022.3", "hideInEditor": false, "documentationUrl": "https://github.com/Uralstech/UGemini/blob/master/UGemini/Packages/com.uralstech.ugemini/Documentation~/README.md", From 150f6559f91b61591b6661901a0dea0e93a6d3cf Mon Sep 17 00:00:00 2001 From: Udayshankar Ravikumar Date: Wed, 3 Jul 2024 21:59:29 +0530 Subject: [PATCH 4/4] UGemini 1.1.0-preview.3 --- README.md | 10 +- .../Data/ChatRequest/GeminiChatRequest.cs | 2 +- .../{FileListing.meta => FileList.meta} | 0 .../GeminiFileListRequest.cs | 0 .../GeminiFileListRequest.cs.meta | 0 .../GeminiFileListResponse.cs | 1 + .../GeminiFileListResponse.cs.meta | 0 .../Scripts/Data/FileAPI/FileUpload.meta | 8 + .../GeminiFileUploadRequest.cs | 2 +- .../GeminiFileUploadRequest.cs.meta | 0 .../FileUpload/GeminiFileUploadResponse.cs | 17 + .../GeminiFileUploadResponse.cs.meta | 11 + .../Scripts/Data/FileAPI/GeminiFile.cs | 1 + .../GeminiTokenCountRequest.cs | 2 +- .../Exceptions/GeminiRequestException.cs | 10 +- .../Runtime/Scripts/Managers/GeminiManager.cs | 2 +- .../Samples~/FileAPISample/Scene.meta | 8 + .../Samples~/FileAPISample/Scene/Main.unity | 4344 +++++++++++++++++ .../FileAPISample/Scene/Main.unity.meta | 7 + .../Samples~/FileAPISample/Scripts.meta | 8 + .../Scripts/FileApiChatManager.cs | 127 + .../Scripts/FileApiChatManager.cs.meta | 11 + .../com.uralstech.ugemini/package.json | 7 +- 23 files changed, 4566 insertions(+), 12 deletions(-) rename UGemini/Packages/com.uralstech.ugemini/Runtime/Scripts/Data/FileAPI/{FileListing.meta => FileList.meta} (100%) rename UGemini/Packages/com.uralstech.ugemini/Runtime/Scripts/Data/FileAPI/{FileListing => FileList}/GeminiFileListRequest.cs (100%) rename UGemini/Packages/com.uralstech.ugemini/Runtime/Scripts/Data/FileAPI/{FileListing => FileList}/GeminiFileListRequest.cs.meta (100%) rename UGemini/Packages/com.uralstech.ugemini/Runtime/Scripts/Data/FileAPI/{FileListing => FileList}/GeminiFileListResponse.cs (91%) rename UGemini/Packages/com.uralstech.ugemini/Runtime/Scripts/Data/FileAPI/{FileListing => FileList}/GeminiFileListResponse.cs.meta (100%) create mode 100644 UGemini/Packages/com.uralstech.ugemini/Runtime/Scripts/Data/FileAPI/FileUpload.meta rename UGemini/Packages/com.uralstech.ugemini/Runtime/Scripts/Data/FileAPI/{SingleRequests => FileUpload}/GeminiFileUploadRequest.cs (98%) rename UGemini/Packages/com.uralstech.ugemini/Runtime/Scripts/Data/FileAPI/{SingleRequests => FileUpload}/GeminiFileUploadRequest.cs.meta (100%) create mode 100644 UGemini/Packages/com.uralstech.ugemini/Runtime/Scripts/Data/FileAPI/FileUpload/GeminiFileUploadResponse.cs create mode 100644 UGemini/Packages/com.uralstech.ugemini/Runtime/Scripts/Data/FileAPI/FileUpload/GeminiFileUploadResponse.cs.meta create mode 100644 UGemini/Packages/com.uralstech.ugemini/Samples~/FileAPISample/Scene.meta create mode 100644 UGemini/Packages/com.uralstech.ugemini/Samples~/FileAPISample/Scene/Main.unity create mode 100644 UGemini/Packages/com.uralstech.ugemini/Samples~/FileAPISample/Scene/Main.unity.meta create mode 100644 UGemini/Packages/com.uralstech.ugemini/Samples~/FileAPISample/Scripts.meta create mode 100644 UGemini/Packages/com.uralstech.ugemini/Samples~/FileAPISample/Scripts/FileApiChatManager.cs create mode 100644 UGemini/Packages/com.uralstech.ugemini/Samples~/FileAPISample/Scripts/FileApiChatManager.cs.meta diff --git a/README.md b/README.md index b9035628..cc593915 100644 --- a/README.md +++ b/README.md @@ -56,8 +56,14 @@ Follow the steps detailed in the OpenUPM installation method and only install th - [ ] `cachedContents` endpoint :test_tube: - [ ] `corpora` endpoint :test_tube: -- [x] `files` endpoint :test_tube: :construction: -- [x] `media` endpoint :test_tube: :construction: +- [x] `files` endpoint :test_tube: + - [x] `delete` method + - [x] `get` method + - [x] `list` method + +- [x] `media` endpoint :test_tube: + - [x] `upload` method :construction: + - [ ] `tunedModels` endpoint - [ ] `operations` endpoint :construction: diff --git a/UGemini/Packages/com.uralstech.ugemini/Runtime/Scripts/Data/ChatRequest/GeminiChatRequest.cs b/UGemini/Packages/com.uralstech.ugemini/Runtime/Scripts/Data/ChatRequest/GeminiChatRequest.cs index df59b4c0..de0bf8dc 100644 --- a/UGemini/Packages/com.uralstech.ugemini/Runtime/Scripts/Data/ChatRequest/GeminiChatRequest.cs +++ b/UGemini/Packages/com.uralstech.ugemini/Runtime/Scripts/Data/ChatRequest/GeminiChatRequest.cs @@ -114,7 +114,7 @@ public GeminiChatRequest(string model = GeminiManager.Gemini1_5Flash, bool useBe ApiVersion = useBetaApi ? "v1beta" : "v1"; } - [Obsolete("It is recommended to use GeminiManager.Request instead of GeminiManager.Compute, as it is more generic and thus supports more request types.")] + [Obsolete("Please use a different constructor as this constructor is only for the deprecated GeminiManager.Compute method.")] public GeminiChatRequest() { } /// diff --git a/UGemini/Packages/com.uralstech.ugemini/Runtime/Scripts/Data/FileAPI/FileListing.meta b/UGemini/Packages/com.uralstech.ugemini/Runtime/Scripts/Data/FileAPI/FileList.meta similarity index 100% rename from UGemini/Packages/com.uralstech.ugemini/Runtime/Scripts/Data/FileAPI/FileListing.meta rename to UGemini/Packages/com.uralstech.ugemini/Runtime/Scripts/Data/FileAPI/FileList.meta diff --git a/UGemini/Packages/com.uralstech.ugemini/Runtime/Scripts/Data/FileAPI/FileListing/GeminiFileListRequest.cs b/UGemini/Packages/com.uralstech.ugemini/Runtime/Scripts/Data/FileAPI/FileList/GeminiFileListRequest.cs similarity index 100% rename from UGemini/Packages/com.uralstech.ugemini/Runtime/Scripts/Data/FileAPI/FileListing/GeminiFileListRequest.cs rename to UGemini/Packages/com.uralstech.ugemini/Runtime/Scripts/Data/FileAPI/FileList/GeminiFileListRequest.cs diff --git a/UGemini/Packages/com.uralstech.ugemini/Runtime/Scripts/Data/FileAPI/FileListing/GeminiFileListRequest.cs.meta b/UGemini/Packages/com.uralstech.ugemini/Runtime/Scripts/Data/FileAPI/FileList/GeminiFileListRequest.cs.meta similarity index 100% rename from UGemini/Packages/com.uralstech.ugemini/Runtime/Scripts/Data/FileAPI/FileListing/GeminiFileListRequest.cs.meta rename to UGemini/Packages/com.uralstech.ugemini/Runtime/Scripts/Data/FileAPI/FileList/GeminiFileListRequest.cs.meta diff --git a/UGemini/Packages/com.uralstech.ugemini/Runtime/Scripts/Data/FileAPI/FileListing/GeminiFileListResponse.cs b/UGemini/Packages/com.uralstech.ugemini/Runtime/Scripts/Data/FileAPI/FileList/GeminiFileListResponse.cs similarity index 91% rename from UGemini/Packages/com.uralstech.ugemini/Runtime/Scripts/Data/FileAPI/FileListing/GeminiFileListResponse.cs rename to UGemini/Packages/com.uralstech.ugemini/Runtime/Scripts/Data/FileAPI/FileList/GeminiFileListResponse.cs index 904a96cd..e6fa8997 100644 --- a/UGemini/Packages/com.uralstech.ugemini/Runtime/Scripts/Data/FileAPI/FileListing/GeminiFileListResponse.cs +++ b/UGemini/Packages/com.uralstech.ugemini/Runtime/Scripts/Data/FileAPI/FileList/GeminiFileListResponse.cs @@ -12,6 +12,7 @@ public class GeminiFileListResponse /// /// The list of files. /// + [JsonProperty(NullValueHandling = NullValueHandling.Ignore)] public GeminiFile[] Files; /// diff --git a/UGemini/Packages/com.uralstech.ugemini/Runtime/Scripts/Data/FileAPI/FileListing/GeminiFileListResponse.cs.meta b/UGemini/Packages/com.uralstech.ugemini/Runtime/Scripts/Data/FileAPI/FileList/GeminiFileListResponse.cs.meta similarity index 100% rename from UGemini/Packages/com.uralstech.ugemini/Runtime/Scripts/Data/FileAPI/FileListing/GeminiFileListResponse.cs.meta rename to UGemini/Packages/com.uralstech.ugemini/Runtime/Scripts/Data/FileAPI/FileList/GeminiFileListResponse.cs.meta diff --git a/UGemini/Packages/com.uralstech.ugemini/Runtime/Scripts/Data/FileAPI/FileUpload.meta b/UGemini/Packages/com.uralstech.ugemini/Runtime/Scripts/Data/FileAPI/FileUpload.meta new file mode 100644 index 00000000..a27b9dd9 --- /dev/null +++ b/UGemini/Packages/com.uralstech.ugemini/Runtime/Scripts/Data/FileAPI/FileUpload.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: ec04bc252e6bfb843b544282be0b515d +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/UGemini/Packages/com.uralstech.ugemini/Runtime/Scripts/Data/FileAPI/SingleRequests/GeminiFileUploadRequest.cs b/UGemini/Packages/com.uralstech.ugemini/Runtime/Scripts/Data/FileAPI/FileUpload/GeminiFileUploadRequest.cs similarity index 98% rename from UGemini/Packages/com.uralstech.ugemini/Runtime/Scripts/Data/FileAPI/SingleRequests/GeminiFileUploadRequest.cs rename to UGemini/Packages/com.uralstech.ugemini/Runtime/Scripts/Data/FileAPI/FileUpload/GeminiFileUploadRequest.cs index 3d82661c..e978e23d 100644 --- a/UGemini/Packages/com.uralstech.ugemini/Runtime/Scripts/Data/FileAPI/SingleRequests/GeminiFileUploadRequest.cs +++ b/UGemini/Packages/com.uralstech.ugemini/Runtime/Scripts/Data/FileAPI/FileUpload/GeminiFileUploadRequest.cs @@ -5,7 +5,7 @@ namespace Uralstech.UGemini.FileAPI { /// - /// Uploads a file to the Gemini File API. Response type is . + /// Uploads a file to the Gemini File API. Response type is . /// [JsonObject(NamingStrategyType = typeof(CamelCaseNamingStrategy))] public class GeminiFileUploadRequest : IGeminiPostRequest diff --git a/UGemini/Packages/com.uralstech.ugemini/Runtime/Scripts/Data/FileAPI/SingleRequests/GeminiFileUploadRequest.cs.meta b/UGemini/Packages/com.uralstech.ugemini/Runtime/Scripts/Data/FileAPI/FileUpload/GeminiFileUploadRequest.cs.meta similarity index 100% rename from UGemini/Packages/com.uralstech.ugemini/Runtime/Scripts/Data/FileAPI/SingleRequests/GeminiFileUploadRequest.cs.meta rename to UGemini/Packages/com.uralstech.ugemini/Runtime/Scripts/Data/FileAPI/FileUpload/GeminiFileUploadRequest.cs.meta diff --git a/UGemini/Packages/com.uralstech.ugemini/Runtime/Scripts/Data/FileAPI/FileUpload/GeminiFileUploadResponse.cs b/UGemini/Packages/com.uralstech.ugemini/Runtime/Scripts/Data/FileAPI/FileUpload/GeminiFileUploadResponse.cs new file mode 100644 index 00000000..67000bef --- /dev/null +++ b/UGemini/Packages/com.uralstech.ugemini/Runtime/Scripts/Data/FileAPI/FileUpload/GeminiFileUploadResponse.cs @@ -0,0 +1,17 @@ +using Newtonsoft.Json; +using Newtonsoft.Json.Serialization; + +namespace Uralstech.UGemini.FileAPI +{ + /// + /// Response for a file upload request. + /// + [JsonObject(NamingStrategyType = typeof(CamelCaseNamingStrategy))] + public class GeminiFileUploadResponse + { + /// + /// Metadata for the created file. + /// + public GeminiFile File; + } +} diff --git a/UGemini/Packages/com.uralstech.ugemini/Runtime/Scripts/Data/FileAPI/FileUpload/GeminiFileUploadResponse.cs.meta b/UGemini/Packages/com.uralstech.ugemini/Runtime/Scripts/Data/FileAPI/FileUpload/GeminiFileUploadResponse.cs.meta new file mode 100644 index 00000000..f39dda73 --- /dev/null +++ b/UGemini/Packages/com.uralstech.ugemini/Runtime/Scripts/Data/FileAPI/FileUpload/GeminiFileUploadResponse.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 3636be7f10d3ab848bc0d6c83640034a +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/UGemini/Packages/com.uralstech.ugemini/Runtime/Scripts/Data/FileAPI/GeminiFile.cs b/UGemini/Packages/com.uralstech.ugemini/Runtime/Scripts/Data/FileAPI/GeminiFile.cs index c7498e0b..98339f24 100644 --- a/UGemini/Packages/com.uralstech.ugemini/Runtime/Scripts/Data/FileAPI/GeminiFile.cs +++ b/UGemini/Packages/com.uralstech.ugemini/Runtime/Scripts/Data/FileAPI/GeminiFile.cs @@ -67,6 +67,7 @@ public class GeminiFile /// /// Error status if processing failed. /// + [JsonProperty(NullValueHandling = NullValueHandling.Ignore)] public GeminiStatus Status; /// diff --git a/UGemini/Packages/com.uralstech.ugemini/Runtime/Scripts/Data/TokenCountRequest/GeminiTokenCountRequest.cs b/UGemini/Packages/com.uralstech.ugemini/Runtime/Scripts/Data/TokenCountRequest/GeminiTokenCountRequest.cs index a43fc534..9489fe40 100644 --- a/UGemini/Packages/com.uralstech.ugemini/Runtime/Scripts/Data/TokenCountRequest/GeminiTokenCountRequest.cs +++ b/UGemini/Packages/com.uralstech.ugemini/Runtime/Scripts/Data/TokenCountRequest/GeminiTokenCountRequest.cs @@ -55,7 +55,7 @@ public GeminiTokenCountRequest(string model = GeminiManager.Gemini1_5Flash, bool ApiVersion = useBetaApi ? "v1beta" : "v1"; } - [Obsolete("It is recommended to use GeminiManager.Request instead of GeminiManager.Compute, as it is more generic and thus supports more request types.")] + [Obsolete("Please use a different constructor as this constructor is only for the deprecated GeminiManager.Compute method.")] public GeminiTokenCountRequest() { } /// diff --git a/UGemini/Packages/com.uralstech.ugemini/Runtime/Scripts/Exceptions/GeminiRequestException.cs b/UGemini/Packages/com.uralstech.ugemini/Runtime/Scripts/Exceptions/GeminiRequestException.cs index 9ba6dbdd..1d8a5ee4 100644 --- a/UGemini/Packages/com.uralstech.ugemini/Runtime/Scripts/Exceptions/GeminiRequestException.cs +++ b/UGemini/Packages/com.uralstech.ugemini/Runtime/Scripts/Exceptions/GeminiRequestException.cs @@ -11,7 +11,7 @@ public class GeminiRequestException : Exception /// /// The endpoint of the failed request. /// - [Obsolete("It is recommended to use GeminiManager.Request instead of GeminiManager.Compute, as it is more generic and thus supports more request types.")] + [Obsolete("Please use GeminiRequestException.RequestEndpoint as this property is only for the deprecated GeminiManager.Compute method.")] public GeminiManager.RequestEndPoint RequestEndPoint; /// @@ -37,7 +37,7 @@ public class GeminiRequestException : Exception /// /// The request's API version as a string. /// - [Obsolete("It is recommended to use GeminiManager.Request instead of GeminiManager.Compute, as it is more generic and thus supports more request types.")] + [Obsolete("Please use GeminiRequestException.IsBetaApi as this property is only for the deprecated GeminiManager.Compute method.")] public string ApiVersionString; /// @@ -45,7 +45,7 @@ public class GeminiRequestException : Exception /// public bool IsBetaApi; - [Obsolete("It is recommended to use GeminiManager.Request instead of GeminiManager.Compute, as it is more generic and thus supports more request types.")] + [Obsolete("Please use a different constructor as this constructor is only for the deprecated GeminiManager.Compute method.")] internal GeminiRequestException(GeminiManager.RequestEndPoint requestEndPoint, UnityWebRequest request, string apiVersion) : base($"Failed Gemini request: " + $"Request API version: {apiVersion} | " + @@ -69,13 +69,13 @@ internal GeminiRequestException(UnityWebRequest webRequest) $"Request Endpoint: {webRequest.uri.AbsolutePath} | " + $"Request Error Code: {webRequest.responseCode} | " + $"Request Error: {webRequest.error} | " + - $"Details:\n{webRequest.downloadHandler.text}") + $"Details:\n{webRequest.downloadHandler?.text}") { RequestEndpoint = webRequest.uri; RequestError = webRequest.error; RequestErrorCode = webRequest.responseCode; - RequestErrorMessage = webRequest.downloadHandler.text; + RequestErrorMessage = webRequest.downloadHandler?.text; IsBetaApi = RequestEndpoint.AbsolutePath.Contains("beta"); } diff --git a/UGemini/Packages/com.uralstech.ugemini/Runtime/Scripts/Managers/GeminiManager.cs b/UGemini/Packages/com.uralstech.ugemini/Runtime/Scripts/Managers/GeminiManager.cs index 1521cf74..e58cb267 100644 --- a/UGemini/Packages/com.uralstech.ugemini/Runtime/Scripts/Managers/GeminiManager.cs +++ b/UGemini/Packages/com.uralstech.ugemini/Runtime/Scripts/Managers/GeminiManager.cs @@ -116,7 +116,7 @@ public async Task Request(IGeminiGetRequest request) /// /// The request object. /// Thrown when the API request fails. - public async void Request(IGeminiDeleteRequest request) + public async Task Request(IGeminiDeleteRequest request) { string requestEndpoint = request.EndpointUri; using UnityWebRequest webRequest = UnityWebRequest.Delete(requestEndpoint); diff --git a/UGemini/Packages/com.uralstech.ugemini/Samples~/FileAPISample/Scene.meta b/UGemini/Packages/com.uralstech.ugemini/Samples~/FileAPISample/Scene.meta new file mode 100644 index 00000000..7525c681 --- /dev/null +++ b/UGemini/Packages/com.uralstech.ugemini/Samples~/FileAPISample/Scene.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 6e280f4b56637a846a173fe1c994154e +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/UGemini/Packages/com.uralstech.ugemini/Samples~/FileAPISample/Scene/Main.unity b/UGemini/Packages/com.uralstech.ugemini/Samples~/FileAPISample/Scene/Main.unity new file mode 100644 index 00000000..4bfb449f --- /dev/null +++ b/UGemini/Packages/com.uralstech.ugemini/Samples~/FileAPISample/Scene/Main.unity @@ -0,0 +1,4344 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!29 &1 +OcclusionCullingSettings: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_OcclusionBakeSettings: + smallestOccluder: 5 + smallestHole: 0.25 + backfaceThreshold: 100 + m_SceneGUID: 00000000000000000000000000000000 + m_OcclusionCullingData: {fileID: 0} +--- !u!104 &2 +RenderSettings: + m_ObjectHideFlags: 0 + serializedVersion: 9 + m_Fog: 0 + m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1} + m_FogMode: 3 + m_FogDensity: 0.01 + m_LinearFogStart: 0 + m_LinearFogEnd: 300 + m_AmbientSkyColor: {r: 0.212, g: 0.227, b: 0.259, a: 1} + m_AmbientEquatorColor: {r: 0.114, g: 0.125, b: 0.133, a: 1} + m_AmbientGroundColor: {r: 0.047, g: 0.043, b: 0.035, a: 1} + m_AmbientIntensity: 1 + m_AmbientMode: 0 + m_SubtractiveShadowColor: {r: 0.42, g: 0.478, b: 0.627, a: 1} + m_SkyboxMaterial: {fileID: 10304, guid: 0000000000000000f000000000000000, type: 0} + m_HaloStrength: 0.5 + m_FlareStrength: 1 + m_FlareFadeSpeed: 3 + m_HaloTexture: {fileID: 0} + m_SpotCookie: {fileID: 10001, guid: 0000000000000000e000000000000000, type: 0} + m_DefaultReflectionMode: 0 + m_DefaultReflectionResolution: 128 + m_ReflectionBounces: 1 + m_ReflectionIntensity: 1 + m_CustomReflection: {fileID: 0} + m_Sun: {fileID: 0} + m_UseRadianceAmbientProbe: 0 +--- !u!157 &3 +LightmapSettings: + m_ObjectHideFlags: 0 + serializedVersion: 12 + m_GIWorkflowMode: 1 + m_GISettings: + serializedVersion: 2 + m_BounceScale: 1 + m_IndirectOutputScale: 1 + m_AlbedoBoost: 1 + m_EnvironmentLightingMode: 0 + m_EnableBakedLightmaps: 1 + m_EnableRealtimeLightmaps: 0 + m_LightmapEditorSettings: + serializedVersion: 12 + m_Resolution: 2 + m_BakeResolution: 40 + m_AtlasSize: 1024 + m_AO: 0 + m_AOMaxDistance: 1 + m_CompAOExponent: 1 + m_CompAOExponentDirect: 0 + m_ExtractAmbientOcclusion: 0 + m_Padding: 2 + m_LightmapParameters: {fileID: 0} + m_LightmapsBakeMode: 1 + m_TextureCompression: 1 + m_FinalGather: 0 + m_FinalGatherFiltering: 1 + m_FinalGatherRayCount: 256 + m_ReflectionCompression: 2 + m_MixedBakeMode: 2 + m_BakeBackend: 1 + m_PVRSampling: 1 + m_PVRDirectSampleCount: 32 + m_PVRSampleCount: 512 + m_PVRBounces: 2 + m_PVREnvironmentSampleCount: 256 + m_PVREnvironmentReferencePointCount: 2048 + m_PVRFilteringMode: 1 + m_PVRDenoiserTypeDirect: 1 + m_PVRDenoiserTypeIndirect: 1 + m_PVRDenoiserTypeAO: 1 + m_PVRFilterTypeDirect: 0 + m_PVRFilterTypeIndirect: 0 + m_PVRFilterTypeAO: 0 + m_PVREnvironmentMIS: 1 + m_PVRCulling: 1 + m_PVRFilteringGaussRadiusDirect: 1 + m_PVRFilteringGaussRadiusIndirect: 5 + m_PVRFilteringGaussRadiusAO: 2 + m_PVRFilteringAtrousPositionSigmaDirect: 0.5 + m_PVRFilteringAtrousPositionSigmaIndirect: 2 + m_PVRFilteringAtrousPositionSigmaAO: 1 + m_ExportTrainingData: 0 + m_TrainingDataDestination: TrainingData + m_LightProbeSampleCountMultiplier: 4 + m_LightingDataAsset: {fileID: 0} + m_LightingSettings: {fileID: 0} +--- !u!196 &4 +NavMeshSettings: + serializedVersion: 2 + m_ObjectHideFlags: 0 + m_BuildSettings: + serializedVersion: 3 + agentTypeID: 0 + agentRadius: 0.5 + agentHeight: 2 + agentSlope: 45 + agentClimb: 0.4 + ledgeDropHeight: 0 + maxJumpAcrossDistance: 0 + minRegionArea: 2 + manualCellSize: 0 + cellSize: 0.16666667 + manualTileSize: 0 + tileSize: 256 + buildHeightMesh: 0 + maxJobWorkers: 0 + preserveTilesOutsideBounds: 0 + debug: + m_Flags: 0 + m_NavMeshData: {fileID: 0} +--- !u!1 &10750144 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 10750145} + - component: {fileID: 10750147} + - component: {fileID: 10750146} + m_Layer: 5 + m_Name: Text (Legacy) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &10750145 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 10750144} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1299714044} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: -0.5000038} + m_SizeDelta: {x: -20, y: -13} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &10750146 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 10750144} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 48 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 10 + m_MaxSize: 48 + m_Alignment: 3 + m_AlignByGeometry: 0 + m_RichText: 0 + m_HorizontalOverflow: 1 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: +--- !u!222 &10750147 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 10750144} + m_CullTransparentMesh: 1 +--- !u!1 &28150873 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 28150874} + - component: {fileID: 28150876} + - component: {fileID: 28150875} + m_Layer: 5 + m_Name: OptionalText + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &28150874 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 28150873} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1260301570} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 1} + m_AnchorMax: {x: 0.5, y: 1} + m_AnchoredPosition: {x: 0, y: -21.9044} + m_SizeDelta: {x: 317.88, y: 43.8088} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &28150875 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 28150873} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 26 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 10 + m_MaxSize: 40 + m_Alignment: 7 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: (Optional) +--- !u!222 &28150876 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 28150873} + m_CullTransparentMesh: 1 +--- !u!1 &48706904 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 48706905} + - component: {fileID: 48706907} + - component: {fileID: 48706906} + m_Layer: 5 + m_Name: OptionalText + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &48706905 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 48706904} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1260301570} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 1} + m_AnchorMax: {x: 0, y: 1} + m_AnchoredPosition: {x: 94.53, y: -21.9044} + m_SizeDelta: {x: 189.06, y: 43.8088} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &48706906 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 48706904} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 26 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 10 + m_MaxSize: 40 + m_Alignment: 7 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: (Optional) +--- !u!222 &48706907 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 48706904} + m_CullTransparentMesh: 1 +--- !u!1 &64665857 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 64665858} + - component: {fileID: 64665860} + - component: {fileID: 64665859} + m_Layer: 5 + m_Name: Text (Legacy) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &64665858 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 64665857} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1588433813} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: -0.5000038} + m_SizeDelta: {x: -20, y: -13} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &64665859 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 64665857} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 48 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 10 + m_MaxSize: 48 + m_Alignment: 3 + m_AlignByGeometry: 0 + m_RichText: 0 + m_HorizontalOverflow: 1 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: +--- !u!222 &64665860 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 64665857} + m_CullTransparentMesh: 1 +--- !u!1 &96614945 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 96614946} + - component: {fileID: 96614948} + - component: {fileID: 96614947} + m_Layer: 5 + m_Name: FileAPI + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &96614946 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 96614945} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 600996058} + - {fileID: 1260301570} + - {fileID: 1215125753} + m_Father: {fileID: 381995322} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0.5, y: 1} + m_AnchoredPosition: {x: 7.500122, y: 0} + m_SizeDelta: {x: -44.99994, y: -60} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &96614947 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 96614945} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 0.5882353} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 10907, guid: 0000000000000000f000000000000000, type: 0} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &96614948 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 96614945} + m_CullTransparentMesh: 1 +--- !u!1 &219164652 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 219164653} + - component: {fileID: 219164655} + - component: {fileID: 219164654} + m_Layer: 5 + m_Name: Text (Legacy) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &219164653 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 219164652} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1826388338} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &219164654 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 219164652} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 46 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 10 + m_MaxSize: 46 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: Chat +--- !u!222 &219164655 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 219164652} + m_CullTransparentMesh: 1 +--- !u!1 &228837078 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 228837079} + - component: {fileID: 228837081} + - component: {fileID: 228837080} + m_Layer: 5 + m_Name: Text (Legacy) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &228837079 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 228837078} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1047120560} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &228837080 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 228837078} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 36 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 10 + m_MaxSize: 40 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: List Files +--- !u!222 &228837081 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 228837078} + m_CullTransparentMesh: 1 +--- !u!1 &256726496 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 256726497} + - component: {fileID: 256726500} + - component: {fileID: 256726499} + - component: {fileID: 256726498} + m_Layer: 5 + m_Name: Viewport + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &256726497 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 256726496} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1597233424} + m_Father: {fileID: 273867394} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0, y: 1} +--- !u!114 &256726498 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 256726496} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 3312d7739989d2b4e91e6319e9a96d76, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Padding: {x: 0, y: 0, z: 0, w: 0} + m_Softness: {x: 0, y: 0} +--- !u!114 &256726499 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 256726496} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 10917, guid: 0000000000000000f000000000000000, type: 0} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &256726500 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 256726496} + m_CullTransparentMesh: 1 +--- !u!1 &273867393 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 273867394} + - component: {fileID: 273867397} + - component: {fileID: 273867396} + - component: {fileID: 273867395} + m_Layer: 5 + m_Name: Response + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &273867394 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 273867393} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 256726497} + - {fileID: 1850050922} + m_Father: {fileID: 1403471982} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: -123.67} + m_SizeDelta: {x: -60, y: -307.35} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &273867395 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 273867393} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 1aa08ab6e0800fa44ae55d278d1423e3, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Content: {fileID: 1597233424} + m_Horizontal: 0 + m_Vertical: 1 + m_MovementType: 1 + m_Elasticity: 0.1 + m_Inertia: 1 + m_DecelerationRate: 0.135 + m_ScrollSensitivity: 1 + m_Viewport: {fileID: 256726497} + m_HorizontalScrollbar: {fileID: 0} + m_VerticalScrollbar: {fileID: 1850050923} + m_HorizontalScrollbarVisibility: 2 + m_VerticalScrollbarVisibility: 2 + m_HorizontalScrollbarSpacing: -3 + m_VerticalScrollbarSpacing: -3 + m_OnValueChanged: + m_PersistentCalls: + m_Calls: [] +--- !u!114 &273867396 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 273867393} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 10907, guid: 0000000000000000f000000000000000, type: 0} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &273867397 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 273867393} + m_CullTransparentMesh: 1 +--- !u!1 &296867374 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 296867375} + m_Layer: 5 + m_Name: Sliding Area + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &296867375 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 296867374} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1776757025} + m_Father: {fileID: 1850050922} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: -20, y: -20} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!1 &303150563 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 303150564} + - component: {fileID: 303150566} + - component: {fileID: 303150565} + m_Layer: 5 + m_Name: Text (Legacy) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &303150564 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 303150563} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 426430978} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &303150565 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 303150563} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 36 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 10 + m_MaxSize: 40 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: Get File +--- !u!222 &303150566 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 303150563} + m_CullTransparentMesh: 1 +--- !u!1 &381995321 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 381995322} + - component: {fileID: 381995324} + - component: {fileID: 381995323} + m_Layer: 5 + m_Name: Panel + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &381995322 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 381995321} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 96614946} + - {fileID: 1403471982} + m_Father: {fileID: 1352220085} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: -60, y: -60} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &381995323 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 381995321} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 0.392} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 10907, guid: 0000000000000000f000000000000000, type: 0} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &381995324 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 381995321} + m_CullTransparentMesh: 1 +--- !u!1 &426430977 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 426430978} + - component: {fileID: 426430981} + - component: {fileID: 426430980} + - component: {fileID: 426430979} + m_Layer: 5 + m_Name: OnGet + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &426430978 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 426430977} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 303150564} + m_Father: {fileID: 600996058} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 1, y: 0} + m_AnchorMax: {x: 1, y: 0} + m_AnchoredPosition: {x: -94.53088, y: 31.5645} + m_SizeDelta: {x: 189.0618, y: 63.129} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &426430979 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 426430977} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Navigation: + m_Mode: 3 + m_WrapAround: 0 + m_SelectOnUp: {fileID: 0} + m_SelectOnDown: {fileID: 0} + m_SelectOnLeft: {fileID: 0} + m_SelectOnRight: {fileID: 0} + m_Transition: 1 + m_Colors: + m_NormalColor: {r: 1, g: 1, b: 1, a: 1} + m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1} + m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608} + m_ColorMultiplier: 1 + m_FadeDuration: 0.1 + m_SpriteState: + m_HighlightedSprite: {fileID: 0} + m_PressedSprite: {fileID: 0} + m_SelectedSprite: {fileID: 0} + m_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_SelectedTrigger: Selected + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 426430980} + m_OnClick: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 1352220086} + m_TargetAssemblyTypeName: FileApiChatManager, Assembly-CSharp + m_MethodName: OnGetFile + m_Mode: 1 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 +--- !u!114 &426430980 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 426430977} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 10905, guid: 0000000000000000f000000000000000, type: 0} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &426430981 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 426430977} + m_CullTransparentMesh: 1 +--- !u!1 &588796850 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 588796851} + - component: {fileID: 588796853} + - component: {fileID: 588796852} + m_Layer: 5 + m_Name: Placeholder + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &588796851 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 588796850} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1588433813} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: -0.5000038} + m_SizeDelta: {x: -20, y: -13} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &588796852 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 588796850} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 0.5} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 48 + m_FontStyle: 2 + m_BestFit: 0 + m_MinSize: 10 + m_MaxSize: 48 + m_Alignment: 3 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: Enter prompt... +--- !u!222 &588796853 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 588796850} + m_CullTransparentMesh: 1 +--- !u!1 &589994539 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 589994540} + - component: {fileID: 589994542} + - component: {fileID: 589994541} + m_Layer: 5 + m_Name: Text (Legacy) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &589994540 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 589994539} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1207727810} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &589994541 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 589994539} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 33 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 10 + m_MaxSize: 43 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: Upload File +--- !u!222 &589994542 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 589994539} + m_CullTransparentMesh: 1 +--- !u!1 &600996057 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 600996058} + m_Layer: 5 + m_Name: GetOrDeleteFile + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &600996058 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 600996057} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 426430978} + - {fileID: 615722774} + - {fileID: 1166856158} + m_Father: {fileID: 96614946} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 0} + m_AnchoredPosition: {x: 0, y: 190.51694} + m_SizeDelta: {x: -60, y: 91.2062} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!1 &615722773 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 615722774} + - component: {fileID: 615722777} + - component: {fileID: 615722776} + - component: {fileID: 615722775} + m_Layer: 5 + m_Name: OnDelete + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &615722774 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 615722773} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 2074423099} + m_Father: {fileID: 600996058} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 1, y: 0} + m_AnchorMax: {x: 1, y: 0} + m_AnchoredPosition: {x: -288.59, y: 31.5645} + m_SizeDelta: {x: 189.0618, y: 63.129} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &615722775 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 615722773} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Navigation: + m_Mode: 3 + m_WrapAround: 0 + m_SelectOnUp: {fileID: 0} + m_SelectOnDown: {fileID: 0} + m_SelectOnLeft: {fileID: 0} + m_SelectOnRight: {fileID: 0} + m_Transition: 1 + m_Colors: + m_NormalColor: {r: 1, g: 1, b: 1, a: 1} + m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1} + m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608} + m_ColorMultiplier: 1 + m_FadeDuration: 0.1 + m_SpriteState: + m_HighlightedSprite: {fileID: 0} + m_PressedSprite: {fileID: 0} + m_SelectedSprite: {fileID: 0} + m_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_SelectedTrigger: Selected + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 615722776} + m_OnClick: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 1352220086} + m_TargetAssemblyTypeName: FileApiChatManager, Assembly-CSharp + m_MethodName: OnDeleteFile + m_Mode: 1 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 +--- !u!114 &615722776 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 615722773} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 10905, guid: 0000000000000000f000000000000000, type: 0} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &615722777 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 615722773} + m_CullTransparentMesh: 1 +--- !u!1 &803882057 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 803882058} + - component: {fileID: 803882060} + - component: {fileID: 803882059} + m_Layer: 5 + m_Name: Placeholder + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &803882058 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 803882057} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1299714044} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: -0.5000038} + m_SizeDelta: {x: -20, y: -13} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &803882059 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 803882057} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 0.5} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 48 + m_FontStyle: 2 + m_BestFit: 0 + m_MinSize: 10 + m_MaxSize: 48 + m_Alignment: 3 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: Enter file ID... +--- !u!222 &803882060 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 803882057} + m_CullTransparentMesh: 1 +--- !u!1 &1017715521 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1017715524} + - component: {fileID: 1017715523} + - component: {fileID: 1017715522} + m_Layer: 0 + m_Name: EventSystem + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &1017715522 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1017715521} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4f231c4fb786f3946a6b90b886c48677, type: 3} + m_Name: + m_EditorClassIdentifier: + m_SendPointerHoverToParent: 1 + m_HorizontalAxis: Horizontal + m_VerticalAxis: Vertical + m_SubmitButton: Submit + m_CancelButton: Cancel + m_InputActionsPerSecond: 10 + m_RepeatDelay: 0.5 + m_ForceModuleActive: 0 +--- !u!114 &1017715523 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1017715521} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 76c392e42b5098c458856cdf6ecaaaa1, type: 3} + m_Name: + m_EditorClassIdentifier: + m_FirstSelected: {fileID: 0} + m_sendNavigationEvents: 1 + m_DragThreshold: 10 +--- !u!4 &1017715524 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1017715521} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1047120559 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1047120560} + - component: {fileID: 1047120563} + - component: {fileID: 1047120562} + - component: {fileID: 1047120561} + m_Layer: 5 + m_Name: OnList + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1047120560 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1047120559} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 228837079} + m_Father: {fileID: 1260301570} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 1, y: 0} + m_AnchorMax: {x: 1, y: 0} + m_AnchoredPosition: {x: -94.53088, y: 31.5645} + m_SizeDelta: {x: 189.0618, y: 63.129} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1047120561 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1047120559} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Navigation: + m_Mode: 3 + m_WrapAround: 0 + m_SelectOnUp: {fileID: 0} + m_SelectOnDown: {fileID: 0} + m_SelectOnLeft: {fileID: 0} + m_SelectOnRight: {fileID: 0} + m_Transition: 1 + m_Colors: + m_NormalColor: {r: 1, g: 1, b: 1, a: 1} + m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1} + m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608} + m_ColorMultiplier: 1 + m_FadeDuration: 0.1 + m_SpriteState: + m_HighlightedSprite: {fileID: 0} + m_PressedSprite: {fileID: 0} + m_SelectedSprite: {fileID: 0} + m_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_SelectedTrigger: Selected + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 1047120562} + m_OnClick: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 1352220086} + m_TargetAssemblyTypeName: FileApiChatManager, Assembly-CSharp + m_MethodName: OnListFiles + m_Mode: 1 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 +--- !u!114 &1047120562 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1047120559} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 10905, guid: 0000000000000000f000000000000000, type: 0} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &1047120563 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1047120559} + m_CullTransparentMesh: 1 +--- !u!1 &1064735599 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1064735600} + - component: {fileID: 1064735602} + - component: {fileID: 1064735601} + m_Layer: 5 + m_Name: Placeholder + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1064735600 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1064735599} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1274148052} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: -0.4999981} + m_SizeDelta: {x: -20, y: -13} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1064735601 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1064735599} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 0.5} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 25 + m_FontStyle: 2 + m_BestFit: 0 + m_MinSize: 10 + m_MaxSize: 40 + m_Alignment: 3 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: Max files... +--- !u!222 &1064735602 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1064735599} + m_CullTransparentMesh: 1 +--- !u!1 &1071736557 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1071736558} + - component: {fileID: 1071736560} + - component: {fileID: 1071736559} + m_Layer: 5 + m_Name: Placeholder + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1071736558 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1071736557} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1215125753} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: -0.5} + m_SizeDelta: {x: -20, y: -13} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1071736559 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1071736557} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 0.5} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 50 + m_FontStyle: 2 + m_BestFit: 0 + m_MinSize: 10 + m_MaxSize: 50 + m_Alignment: 0 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: Enter file content... +--- !u!222 &1071736560 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1071736557} + m_CullTransparentMesh: 1 +--- !u!1 &1108950325 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1108950326} + - component: {fileID: 1108950328} + - component: {fileID: 1108950327} + m_Layer: 5 + m_Name: Text (Legacy) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1108950326 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1108950325} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1166856158} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: -0.4999981} + m_SizeDelta: {x: -20, y: -13} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1108950327 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1108950325} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 25 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 10 + m_MaxSize: 40 + m_Alignment: 3 + m_AlignByGeometry: 0 + m_RichText: 0 + m_HorizontalOverflow: 1 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: +--- !u!222 &1108950328 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1108950325} + m_CullTransparentMesh: 1 +--- !u!1 &1121380993 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1121380994} + - component: {fileID: 1121380996} + - component: {fileID: 1121380995} + m_Layer: 5 + m_Name: Placeholder + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1121380994 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1121380993} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1236329568} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: -0.4999981} + m_SizeDelta: {x: -20, y: -13} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1121380995 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1121380993} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 0.5} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 25 + m_FontStyle: 2 + m_BestFit: 0 + m_MinSize: 10 + m_MaxSize: 40 + m_Alignment: 3 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: List page token... +--- !u!222 &1121380996 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1121380993} + m_CullTransparentMesh: 1 +--- !u!1 &1166856157 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1166856158} + - component: {fileID: 1166856161} + - component: {fileID: 1166856160} + - component: {fileID: 1166856159} + m_Layer: 5 + m_Name: FileID + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1166856158 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1166856157} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 2086193999} + - {fileID: 1108950326} + m_Father: {fileID: 600996058} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 0} + m_AnchoredPosition: {x: -194.06, y: 31.5645} + m_SizeDelta: {x: -388.12, y: 63.129} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1166856159 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1166856157} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: d199490a83bb2b844b9695cbf13b01ef, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Navigation: + m_Mode: 3 + m_WrapAround: 0 + m_SelectOnUp: {fileID: 0} + m_SelectOnDown: {fileID: 0} + m_SelectOnLeft: {fileID: 0} + m_SelectOnRight: {fileID: 0} + m_Transition: 1 + m_Colors: + m_NormalColor: {r: 1, g: 1, b: 1, a: 1} + m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1} + m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608} + m_ColorMultiplier: 1 + m_FadeDuration: 0.1 + m_SpriteState: + m_HighlightedSprite: {fileID: 0} + m_PressedSprite: {fileID: 0} + m_SelectedSprite: {fileID: 0} + m_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_SelectedTrigger: Selected + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 1166856160} + m_TextComponent: {fileID: 1108950327} + m_Placeholder: {fileID: 2086194000} + m_ContentType: 0 + m_InputType: 0 + m_AsteriskChar: 42 + m_KeyboardType: 0 + m_LineType: 0 + m_HideMobileInput: 0 + m_CharacterValidation: 0 + m_CharacterLimit: 0 + m_OnSubmit: + m_PersistentCalls: + m_Calls: [] + m_OnDidEndEdit: + m_PersistentCalls: + m_Calls: [] + m_OnValueChanged: + m_PersistentCalls: + m_Calls: [] + m_CaretColor: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_CustomCaretColor: 0 + m_SelectionColor: {r: 0.65882355, g: 0.80784315, b: 1, a: 0.7529412} + m_Text: + m_CaretBlinkRate: 0.85 + m_CaretWidth: 1 + m_ReadOnly: 0 + m_ShouldActivateOnSelect: 1 +--- !u!114 &1166856160 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1166856157} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 10911, guid: 0000000000000000f000000000000000, type: 0} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &1166856161 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1166856157} + m_CullTransparentMesh: 1 +--- !u!1 &1207727809 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1207727810} + - component: {fileID: 1207727813} + - component: {fileID: 1207727812} + - component: {fileID: 1207727811} + m_Layer: 5 + m_Name: OnUpload + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1207727810 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1207727809} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 589994540} + m_Father: {fileID: 1215125753} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 1, y: 0} + m_AnchorMax: {x: 1, y: 0} + m_AnchoredPosition: {x: -134.57507, y: 58.670624} + m_SizeDelta: {x: 209.1511, y: 57.3415} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1207727811 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1207727809} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Navigation: + m_Mode: 3 + m_WrapAround: 0 + m_SelectOnUp: {fileID: 0} + m_SelectOnDown: {fileID: 0} + m_SelectOnLeft: {fileID: 0} + m_SelectOnRight: {fileID: 0} + m_Transition: 1 + m_Colors: + m_NormalColor: {r: 1, g: 1, b: 1, a: 1} + m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1} + m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608} + m_ColorMultiplier: 1 + m_FadeDuration: 0.1 + m_SpriteState: + m_HighlightedSprite: {fileID: 0} + m_PressedSprite: {fileID: 0} + m_SelectedSprite: {fileID: 0} + m_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_SelectedTrigger: Selected + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 1207727812} + m_OnClick: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 1352220086} + m_TargetAssemblyTypeName: FileApiChatManager, Assembly-CSharp + m_MethodName: OnUploadFile + m_Mode: 1 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 +--- !u!114 &1207727812 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1207727809} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 10905, guid: 0000000000000000f000000000000000, type: 0} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &1207727813 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1207727809} + m_CullTransparentMesh: 1 +--- !u!1 &1215125752 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1215125753} + - component: {fileID: 1215125756} + - component: {fileID: 1215125755} + - component: {fileID: 1215125754} + m_Layer: 5 + m_Name: UploadFile + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1215125753 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1215125752} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1071736558} + - {fileID: 1391191984} + - {fileID: 1207727810} + m_Father: {fileID: 96614946} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 103.06003} + m_SizeDelta: {x: -60, y: -266.12} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1215125754 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1215125752} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: d199490a83bb2b844b9695cbf13b01ef, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Navigation: + m_Mode: 3 + m_WrapAround: 0 + m_SelectOnUp: {fileID: 0} + m_SelectOnDown: {fileID: 0} + m_SelectOnLeft: {fileID: 0} + m_SelectOnRight: {fileID: 0} + m_Transition: 1 + m_Colors: + m_NormalColor: {r: 1, g: 1, b: 1, a: 1} + m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1} + m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608} + m_ColorMultiplier: 1 + m_FadeDuration: 0.1 + m_SpriteState: + m_HighlightedSprite: {fileID: 0} + m_PressedSprite: {fileID: 0} + m_SelectedSprite: {fileID: 0} + m_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_SelectedTrigger: Selected + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 1215125755} + m_TextComponent: {fileID: 1391191985} + m_Placeholder: {fileID: 1071736559} + m_ContentType: 0 + m_InputType: 0 + m_AsteriskChar: 42 + m_KeyboardType: 0 + m_LineType: 2 + m_HideMobileInput: 0 + m_CharacterValidation: 0 + m_CharacterLimit: 0 + m_OnSubmit: + m_PersistentCalls: + m_Calls: [] + m_OnDidEndEdit: + m_PersistentCalls: + m_Calls: [] + m_OnValueChanged: + m_PersistentCalls: + m_Calls: [] + m_CaretColor: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_CustomCaretColor: 0 + m_SelectionColor: {r: 0.65882355, g: 0.80784315, b: 1, a: 0.7529412} + m_Text: + m_CaretBlinkRate: 0.85 + m_CaretWidth: 1 + m_ReadOnly: 0 + m_ShouldActivateOnSelect: 1 +--- !u!114 &1215125755 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1215125752} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 10911, guid: 0000000000000000f000000000000000, type: 0} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &1215125756 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1215125752} + m_CullTransparentMesh: 1 +--- !u!1 &1236329567 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1236329568} + - component: {fileID: 1236329571} + - component: {fileID: 1236329570} + - component: {fileID: 1236329569} + m_Layer: 5 + m_Name: Token + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1236329568 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1236329567} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1121380994} + - {fileID: 1377578154} + m_Father: {fileID: 1260301570} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 0} + m_AnchoredPosition: {x: -0.00048828125, y: 31.5645} + m_SizeDelta: {x: -388.12, y: 63.129} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1236329569 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1236329567} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: d199490a83bb2b844b9695cbf13b01ef, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Navigation: + m_Mode: 3 + m_WrapAround: 0 + m_SelectOnUp: {fileID: 0} + m_SelectOnDown: {fileID: 0} + m_SelectOnLeft: {fileID: 0} + m_SelectOnRight: {fileID: 0} + m_Transition: 1 + m_Colors: + m_NormalColor: {r: 1, g: 1, b: 1, a: 1} + m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1} + m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608} + m_ColorMultiplier: 1 + m_FadeDuration: 0.1 + m_SpriteState: + m_HighlightedSprite: {fileID: 0} + m_PressedSprite: {fileID: 0} + m_SelectedSprite: {fileID: 0} + m_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_SelectedTrigger: Selected + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 1236329570} + m_TextComponent: {fileID: 1377578155} + m_Placeholder: {fileID: 1121380995} + m_ContentType: 0 + m_InputType: 0 + m_AsteriskChar: 42 + m_KeyboardType: 0 + m_LineType: 0 + m_HideMobileInput: 0 + m_CharacterValidation: 0 + m_CharacterLimit: 0 + m_OnSubmit: + m_PersistentCalls: + m_Calls: [] + m_OnDidEndEdit: + m_PersistentCalls: + m_Calls: [] + m_OnValueChanged: + m_PersistentCalls: + m_Calls: [] + m_CaretColor: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_CustomCaretColor: 0 + m_SelectionColor: {r: 0.65882355, g: 0.80784315, b: 1, a: 0.7529412} + m_Text: + m_CaretBlinkRate: 0.85 + m_CaretWidth: 1 + m_ReadOnly: 0 + m_ShouldActivateOnSelect: 1 +--- !u!114 &1236329570 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1236329567} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 10911, guid: 0000000000000000f000000000000000, type: 0} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &1236329571 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1236329567} + m_CullTransparentMesh: 1 +--- !u!1 &1260301569 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1260301570} + m_Layer: 5 + m_Name: ListFiles + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1260301570 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1260301569} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1047120560} + - {fileID: 1236329568} + - {fileID: 1274148052} + - {fileID: 48706905} + - {fileID: 28150874} + m_Father: {fileID: 96614946} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 0} + m_AnchoredPosition: {x: 0, y: 87.45627} + m_SizeDelta: {x: -60, y: 114.9123} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!1 &1274148051 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1274148052} + - component: {fileID: 1274148055} + - component: {fileID: 1274148054} + - component: {fileID: 1274148053} + m_Layer: 5 + m_Name: MaxFiles + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1274148052 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1274148051} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1064735600} + - {fileID: 1596587646} + m_Father: {fileID: 1260301570} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 94.53, y: 31.5645} + m_SizeDelta: {x: 189.06, y: 63.129} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1274148053 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1274148051} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: d199490a83bb2b844b9695cbf13b01ef, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Navigation: + m_Mode: 3 + m_WrapAround: 0 + m_SelectOnUp: {fileID: 0} + m_SelectOnDown: {fileID: 0} + m_SelectOnLeft: {fileID: 0} + m_SelectOnRight: {fileID: 0} + m_Transition: 1 + m_Colors: + m_NormalColor: {r: 1, g: 1, b: 1, a: 1} + m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1} + m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608} + m_ColorMultiplier: 1 + m_FadeDuration: 0.1 + m_SpriteState: + m_HighlightedSprite: {fileID: 0} + m_PressedSprite: {fileID: 0} + m_SelectedSprite: {fileID: 0} + m_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_SelectedTrigger: Selected + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 1274148054} + m_TextComponent: {fileID: 1596587647} + m_Placeholder: {fileID: 1064735601} + m_ContentType: 0 + m_InputType: 0 + m_AsteriskChar: 42 + m_KeyboardType: 0 + m_LineType: 0 + m_HideMobileInput: 0 + m_CharacterValidation: 0 + m_CharacterLimit: 0 + m_OnSubmit: + m_PersistentCalls: + m_Calls: [] + m_OnDidEndEdit: + m_PersistentCalls: + m_Calls: [] + m_OnValueChanged: + m_PersistentCalls: + m_Calls: [] + m_CaretColor: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_CustomCaretColor: 0 + m_SelectionColor: {r: 0.65882355, g: 0.80784315, b: 1, a: 0.7529412} + m_Text: + m_CaretBlinkRate: 0.85 + m_CaretWidth: 1 + m_ReadOnly: 0 + m_ShouldActivateOnSelect: 1 +--- !u!114 &1274148054 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1274148051} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 10911, guid: 0000000000000000f000000000000000, type: 0} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &1274148055 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1274148051} + m_CullTransparentMesh: 1 +--- !u!1 &1299714043 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1299714044} + - component: {fileID: 1299714047} + - component: {fileID: 1299714046} + - component: {fileID: 1299714045} + m_Layer: 5 + m_Name: FiledID + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1299714044 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1299714043} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 803882058} + - {fileID: 10750145} + m_Father: {fileID: 1403471982} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 1} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: -198.01} + m_SizeDelta: {x: -60, y: 98.67} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1299714045 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1299714043} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: d199490a83bb2b844b9695cbf13b01ef, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Navigation: + m_Mode: 3 + m_WrapAround: 0 + m_SelectOnUp: {fileID: 0} + m_SelectOnDown: {fileID: 0} + m_SelectOnLeft: {fileID: 0} + m_SelectOnRight: {fileID: 0} + m_Transition: 1 + m_Colors: + m_NormalColor: {r: 1, g: 1, b: 1, a: 1} + m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1} + m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608} + m_ColorMultiplier: 1 + m_FadeDuration: 0.1 + m_SpriteState: + m_HighlightedSprite: {fileID: 0} + m_PressedSprite: {fileID: 0} + m_SelectedSprite: {fileID: 0} + m_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_SelectedTrigger: Selected + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 1299714046} + m_TextComponent: {fileID: 10750146} + m_Placeholder: {fileID: 803882059} + m_ContentType: 0 + m_InputType: 0 + m_AsteriskChar: 42 + m_KeyboardType: 0 + m_LineType: 0 + m_HideMobileInput: 0 + m_CharacterValidation: 0 + m_CharacterLimit: 0 + m_OnSubmit: + m_PersistentCalls: + m_Calls: [] + m_OnDidEndEdit: + m_PersistentCalls: + m_Calls: [] + m_OnValueChanged: + m_PersistentCalls: + m_Calls: [] + m_CaretColor: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_CustomCaretColor: 0 + m_SelectionColor: {r: 0.65882355, g: 0.80784315, b: 1, a: 0.7529412} + m_Text: + m_CaretBlinkRate: 0.85 + m_CaretWidth: 1 + m_ReadOnly: 0 + m_ShouldActivateOnSelect: 1 +--- !u!114 &1299714046 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1299714043} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 10911, guid: 0000000000000000f000000000000000, type: 0} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &1299714047 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1299714043} + m_CullTransparentMesh: 1 +--- !u!1 &1352220081 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1352220085} + - component: {fileID: 1352220084} + - component: {fileID: 1352220083} + - component: {fileID: 1352220082} + - component: {fileID: 1352220086} + m_Layer: 5 + m_Name: Canvas + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &1352220082 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1352220081} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dc42784cf147c0c48a680349fa168899, type: 3} + m_Name: + m_EditorClassIdentifier: + m_IgnoreReversedGraphics: 1 + m_BlockingObjects: 0 + m_BlockingMask: + serializedVersion: 2 + m_Bits: 4294967295 +--- !u!114 &1352220083 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1352220081} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 0cd44c1031e13a943bb63640046fad76, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UiScaleMode: 1 + m_ReferencePixelsPerUnit: 100 + m_ScaleFactor: 1 + m_ReferenceResolution: {x: 1920, y: 1080} + m_ScreenMatchMode: 0 + m_MatchWidthOrHeight: 0.5 + m_PhysicalUnit: 3 + m_FallbackScreenDPI: 96 + m_DefaultSpriteDPI: 96 + m_DynamicPixelsPerUnit: 1 + m_PresetInfoIsWorld: 0 +--- !u!223 &1352220084 +Canvas: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1352220081} + m_Enabled: 1 + serializedVersion: 3 + m_RenderMode: 0 + m_Camera: {fileID: 0} + m_PlaneDistance: 100 + m_PixelPerfect: 0 + m_ReceivesEvents: 1 + m_OverrideSorting: 0 + m_OverridePixelPerfect: 0 + m_SortingBucketNormalizedSize: 0 + m_VertexColorAlwaysGammaSpace: 0 + m_AdditionalShaderChannelsFlag: 0 + m_UpdateRectTransformForStandalone: 0 + m_SortingLayerID: 0 + m_SortingOrder: 0 + m_TargetDisplay: 0 +--- !u!224 &1352220085 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1352220081} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0, y: 0, z: 0} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 381995322} + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0, y: 0} +--- !u!114 &1352220086 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1352220081} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 88077ab96a06dc944a2c979d425be9d8, type: 3} + m_Name: + m_EditorClassIdentifier: + _fileContentInput: {fileID: 1215125754} + _fileIdInput: {fileID: 1166856159} + _maxFileListInput: {fileID: 1274148053} + _fileListTokenInput: {fileID: 1236329569} + _promptInput: {fileID: 1588433814} + _promptFileIdInput: {fileID: 1299714045} + _responseText: {fileID: 1597233426} +--- !u!1 &1377578153 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1377578154} + - component: {fileID: 1377578156} + - component: {fileID: 1377578155} + m_Layer: 5 + m_Name: Text (Legacy) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1377578154 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1377578153} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1236329568} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: -0.4999981} + m_SizeDelta: {x: -20, y: -13} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1377578155 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1377578153} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 25 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 10 + m_MaxSize: 40 + m_Alignment: 3 + m_AlignByGeometry: 0 + m_RichText: 0 + m_HorizontalOverflow: 1 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: +--- !u!222 &1377578156 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1377578153} + m_CullTransparentMesh: 1 +--- !u!1 &1391191983 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1391191984} + - component: {fileID: 1391191986} + - component: {fileID: 1391191985} + m_Layer: 5 + m_Name: Text (Legacy) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1391191984 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1391191983} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1215125753} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: -0.5} + m_SizeDelta: {x: -20, y: -13} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1391191985 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1391191983} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 50 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 10 + m_MaxSize: 50 + m_Alignment: 0 + m_AlignByGeometry: 0 + m_RichText: 0 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: +--- !u!222 &1391191986 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1391191983} + m_CullTransparentMesh: 1 +--- !u!1 &1403471981 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1403471982} + - component: {fileID: 1403471984} + - component: {fileID: 1403471983} + m_Layer: 5 + m_Name: AskGemini + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1403471982 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1403471981} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1588433813} + - {fileID: 1299714044} + - {fileID: 1826388338} + - {fileID: 273867394} + m_Father: {fileID: 381995322} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: -7, y: 0} + m_SizeDelta: {x: -46, y: -60} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1403471983 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1403471981} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 0.392} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 10907, guid: 0000000000000000f000000000000000, type: 0} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &1403471984 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1403471981} + m_CullTransparentMesh: 1 +--- !u!1 &1588433812 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1588433813} + - component: {fileID: 1588433816} + - component: {fileID: 1588433815} + - component: {fileID: 1588433814} + m_Layer: 5 + m_Name: Prompt + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1588433813 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1588433812} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 588796851} + - {fileID: 64665858} + m_Father: {fileID: 1403471982} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 1} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: -82.500015, y: -79.33505} + m_SizeDelta: {x: -224.99997, y: 98.67} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1588433814 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1588433812} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: d199490a83bb2b844b9695cbf13b01ef, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Navigation: + m_Mode: 3 + m_WrapAround: 0 + m_SelectOnUp: {fileID: 0} + m_SelectOnDown: {fileID: 0} + m_SelectOnLeft: {fileID: 0} + m_SelectOnRight: {fileID: 0} + m_Transition: 1 + m_Colors: + m_NormalColor: {r: 1, g: 1, b: 1, a: 1} + m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1} + m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608} + m_ColorMultiplier: 1 + m_FadeDuration: 0.1 + m_SpriteState: + m_HighlightedSprite: {fileID: 0} + m_PressedSprite: {fileID: 0} + m_SelectedSprite: {fileID: 0} + m_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_SelectedTrigger: Selected + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 1588433815} + m_TextComponent: {fileID: 64665859} + m_Placeholder: {fileID: 588796852} + m_ContentType: 0 + m_InputType: 0 + m_AsteriskChar: 42 + m_KeyboardType: 0 + m_LineType: 0 + m_HideMobileInput: 0 + m_CharacterValidation: 0 + m_CharacterLimit: 0 + m_OnSubmit: + m_PersistentCalls: + m_Calls: [] + m_OnDidEndEdit: + m_PersistentCalls: + m_Calls: [] + m_OnValueChanged: + m_PersistentCalls: + m_Calls: [] + m_CaretColor: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_CustomCaretColor: 0 + m_SelectionColor: {r: 0.65882355, g: 0.80784315, b: 1, a: 0.7529412} + m_Text: + m_CaretBlinkRate: 0.85 + m_CaretWidth: 1 + m_ReadOnly: 0 + m_ShouldActivateOnSelect: 1 +--- !u!114 &1588433815 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1588433812} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 10911, guid: 0000000000000000f000000000000000, type: 0} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &1588433816 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1588433812} + m_CullTransparentMesh: 1 +--- !u!1 &1596587645 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1596587646} + - component: {fileID: 1596587648} + - component: {fileID: 1596587647} + m_Layer: 5 + m_Name: Text (Legacy) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1596587646 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1596587645} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1274148052} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: -0.4999981} + m_SizeDelta: {x: -20, y: -13} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1596587647 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1596587645} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 25 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 10 + m_MaxSize: 40 + m_Alignment: 3 + m_AlignByGeometry: 0 + m_RichText: 0 + m_HorizontalOverflow: 1 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: +--- !u!222 &1596587648 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1596587645} + m_CullTransparentMesh: 1 +--- !u!1 &1597233423 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1597233424} + - component: {fileID: 1597233427} + - component: {fileID: 1597233426} + - component: {fileID: 1597233425} + m_Layer: 5 + m_Name: Content + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1597233424 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1597233423} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 256726497} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 1} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0, y: 1} +--- !u!114 &1597233425 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1597233423} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 3245ec927659c4140ac4f8d17403cc18, type: 3} + m_Name: + m_EditorClassIdentifier: + m_HorizontalFit: 0 + m_VerticalFit: 2 +--- !u!114 &1597233426 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1597233423} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0, g: 0, b: 0, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 50 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 5 + m_MaxSize: 62 + m_Alignment: 0 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: +--- !u!222 &1597233427 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1597233423} + m_CullTransparentMesh: 1 +--- !u!1 &1776757024 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1776757025} + - component: {fileID: 1776757027} + - component: {fileID: 1776757026} + m_Layer: 5 + m_Name: Handle + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1776757025 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1776757024} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 296867375} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 20, y: 20} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1776757026 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1776757024} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 10905, guid: 0000000000000000f000000000000000, type: 0} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &1776757027 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1776757024} + m_CullTransparentMesh: 1 +--- !u!1 &1826388337 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1826388338} + - component: {fileID: 1826388341} + - component: {fileID: 1826388340} + - component: {fileID: 1826388339} + m_Layer: 5 + m_Name: OnChat + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1826388338 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1826388337} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 219164653} + m_Father: {fileID: 1403471982} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 1, y: 1} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: -110.00006, y: -79.335} + m_SizeDelta: {x: 160, y: 98.67} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1826388339 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1826388337} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Navigation: + m_Mode: 3 + m_WrapAround: 0 + m_SelectOnUp: {fileID: 0} + m_SelectOnDown: {fileID: 0} + m_SelectOnLeft: {fileID: 0} + m_SelectOnRight: {fileID: 0} + m_Transition: 1 + m_Colors: + m_NormalColor: {r: 1, g: 1, b: 1, a: 1} + m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1} + m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608} + m_ColorMultiplier: 1 + m_FadeDuration: 0.1 + m_SpriteState: + m_HighlightedSprite: {fileID: 0} + m_PressedSprite: {fileID: 0} + m_SelectedSprite: {fileID: 0} + m_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_SelectedTrigger: Selected + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 1826388340} + m_OnClick: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 1352220086} + m_TargetAssemblyTypeName: FileApiChatManager, Assembly-CSharp + m_MethodName: OnChatWithFile + m_Mode: 1 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 +--- !u!114 &1826388340 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1826388337} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 10905, guid: 0000000000000000f000000000000000, type: 0} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &1826388341 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1826388337} + m_CullTransparentMesh: 1 +--- !u!1 &1850050921 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1850050922} + - component: {fileID: 1850050925} + - component: {fileID: 1850050924} + - component: {fileID: 1850050923} + m_Layer: 5 + m_Name: Scrollbar Vertical + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1850050922 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1850050921} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 296867375} + m_Father: {fileID: 273867394} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 1, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 20, y: 0} + m_Pivot: {x: 1, y: 1} +--- !u!114 &1850050923 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1850050921} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 2a4db7a114972834c8e4117be1d82ba3, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Navigation: + m_Mode: 3 + m_WrapAround: 0 + m_SelectOnUp: {fileID: 0} + m_SelectOnDown: {fileID: 0} + m_SelectOnLeft: {fileID: 0} + m_SelectOnRight: {fileID: 0} + m_Transition: 1 + m_Colors: + m_NormalColor: {r: 1, g: 1, b: 1, a: 1} + m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1} + m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608} + m_ColorMultiplier: 1 + m_FadeDuration: 0.1 + m_SpriteState: + m_HighlightedSprite: {fileID: 0} + m_PressedSprite: {fileID: 0} + m_SelectedSprite: {fileID: 0} + m_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_SelectedTrigger: Selected + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 1776757026} + m_HandleRect: {fileID: 1776757025} + m_Direction: 2 + m_Value: 0 + m_Size: 1 + m_NumberOfSteps: 0 + m_OnValueChanged: + m_PersistentCalls: + m_Calls: [] +--- !u!114 &1850050924 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1850050921} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 10907, guid: 0000000000000000f000000000000000, type: 0} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &1850050925 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1850050921} + m_CullTransparentMesh: 1 +--- !u!1 &1956471892 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1956471895} + - component: {fileID: 1956471894} + - component: {fileID: 1956471893} + m_Layer: 0 + m_Name: Main Camera + m_TagString: MainCamera + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!81 &1956471893 +AudioListener: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1956471892} + m_Enabled: 1 +--- !u!20 &1956471894 +Camera: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1956471892} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 1 + m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0} + m_projectionMatrixMode: 1 + m_GateFitMode: 2 + m_FOVAxisMode: 0 + m_Iso: 200 + m_ShutterSpeed: 0.005 + m_Aperture: 16 + m_FocusDistance: 10 + m_FocalLength: 50 + m_BladeCount: 5 + m_Curvature: {x: 2, y: 11} + m_BarrelClipping: 0.25 + m_Anamorphism: 0 + m_SensorSize: {x: 36, y: 24} + m_LensShift: {x: 0, y: 0} + m_NormalizedViewPortRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + near clip plane: 0.3 + far clip plane: 1000 + field of view: 60 + orthographic: 0 + orthographic size: 5 + m_Depth: -1 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_RenderingPath: -1 + m_TargetTexture: {fileID: 0} + m_TargetDisplay: 0 + m_TargetEye: 3 + m_HDR: 1 + m_AllowMSAA: 1 + m_AllowDynamicResolution: 0 + m_ForceIntoRT: 0 + m_OcclusionCulling: 1 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 +--- !u!4 &1956471895 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1956471892} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 1, z: -10} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1959015244 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1959015246} + - component: {fileID: 1959015245} + m_Layer: 0 + m_Name: GeminiApiManager + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &1959015245 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1959015244} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 082da32aa2c5b8243bfe608ff858f579, type: 3} + m_Name: + m_EditorClassIdentifier: + _geminiApiKey: +--- !u!4 &1959015246 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1959015244} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &2074423098 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2074423099} + - component: {fileID: 2074423101} + - component: {fileID: 2074423100} + m_Layer: 5 + m_Name: Text (Legacy) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &2074423099 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2074423098} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 615722774} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &2074423100 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2074423098} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 36 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 10 + m_MaxSize: 40 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: Delete File +--- !u!222 &2074423101 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2074423098} + m_CullTransparentMesh: 1 +--- !u!1 &2086193998 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2086193999} + - component: {fileID: 2086194001} + - component: {fileID: 2086194000} + m_Layer: 5 + m_Name: Placeholder + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &2086193999 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2086193998} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1166856158} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: -0.4999981} + m_SizeDelta: {x: -20, y: -13} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &2086194000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2086193998} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 0.5} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 25 + m_FontStyle: 2 + m_BestFit: 0 + m_MinSize: 10 + m_MaxSize: 40 + m_Alignment: 3 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: File ID... +--- !u!222 &2086194001 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2086193998} + m_CullTransparentMesh: 1 +--- !u!1660057539 &9223372036854775807 +SceneRoots: + m_ObjectHideFlags: 0 + m_Roots: + - {fileID: 1956471895} + - {fileID: 1352220085} + - {fileID: 1017715524} + - {fileID: 1959015246} diff --git a/UGemini/Packages/com.uralstech.ugemini/Samples~/FileAPISample/Scene/Main.unity.meta b/UGemini/Packages/com.uralstech.ugemini/Samples~/FileAPISample/Scene/Main.unity.meta new file mode 100644 index 00000000..9d974aac --- /dev/null +++ b/UGemini/Packages/com.uralstech.ugemini/Samples~/FileAPISample/Scene/Main.unity.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 703db2824bace8d45b555611937c4c8c +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/UGemini/Packages/com.uralstech.ugemini/Samples~/FileAPISample/Scripts.meta b/UGemini/Packages/com.uralstech.ugemini/Samples~/FileAPISample/Scripts.meta new file mode 100644 index 00000000..71ac7f1b --- /dev/null +++ b/UGemini/Packages/com.uralstech.ugemini/Samples~/FileAPISample/Scripts.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: ba56d136684a183409e7ae9fcf5277f3 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/UGemini/Packages/com.uralstech.ugemini/Samples~/FileAPISample/Scripts/FileApiChatManager.cs b/UGemini/Packages/com.uralstech.ugemini/Samples~/FileAPISample/Scripts/FileApiChatManager.cs new file mode 100644 index 00000000..a2f5faf7 --- /dev/null +++ b/UGemini/Packages/com.uralstech.ugemini/Samples~/FileAPISample/Scripts/FileApiChatManager.cs @@ -0,0 +1,127 @@ +using System.Text; +using UnityEngine; +using UnityEngine.UI; +using Uralstech.UGemini; +using Uralstech.UGemini.Chat; +using Uralstech.UGemini.FileAPI; + +public class FileApiChatManager : MonoBehaviour +{ + [Header("File API")] + [SerializeField] private InputField _fileContentInput; + [SerializeField] private InputField _fileIdInput; + [SerializeField] private InputField _maxFileListInput; + [SerializeField] private InputField _fileListTokenInput; + + [Header("Prompting")] + [SerializeField] private InputField _promptInput; + [SerializeField] private InputField _promptFileIdInput; + [SerializeField] private Text _responseText; + + public async void OnUploadFile() + { + string text = _fileContentInput.text; + if (string.IsNullOrWhiteSpace(text)) + { + Debug.LogError("File content should not be null or whitespace!"); + return; + } + + GeminiFileUploadResponse response = await GeminiManager.Instance.Request(new GeminiFileUploadRequest(GeminiContentType.TextPlain.MimeType()) + { + RawData = Encoding.UTF8.GetBytes(text) + }); + + Debug.Log($"Uploaded file: {FileToText(response.File)}"); + } + + public async void OnGetFile() + { + string text = _fileIdInput.text; + if (string.IsNullOrWhiteSpace(text)) + { + Debug.LogError("File ID should not be null or whitespace!"); + return; + } + + GeminiFile file = await GeminiManager.Instance.Request(new GeminiFileGetRequest(text)); + Debug.Log($"Got file: {FileToText(file)}"); + } + + public async void OnDeleteFile() + { + string text = _fileIdInput.text; + if (string.IsNullOrWhiteSpace(text)) + { + Debug.LogError("File ID should not be null or whitespace!"); + return; + } + + await GeminiManager.Instance.Request(new GeminiFileDeleteRequest(text)); + Debug.Log("File deleted."); + } + + public async void OnListFiles() + { + string maxFiles = _maxFileListInput.text; + string token = _fileListTokenInput.text; + + GeminiFileListResponse response = await GeminiManager.Instance.Request(new GeminiFileListRequest() + { + MaxResponseFiles = string.IsNullOrWhiteSpace(maxFiles) ? 10 : int.Parse(maxFiles), + PageToken = string.IsNullOrWhiteSpace(token) ? string.Empty : token, + }); + + Debug.Log($"Got file list response, next page token: {response?.NextPageToken}:"); + for (int i = 0; i < (response?.Files?.Length ?? 0); i++) + Debug.Log($"File {i + 1}: {FileToText(response.Files[i])}"); + + Debug.Log($"File list page completed."); + } + + public async void OnChatWithFile() + { + string promptFile = _promptFileIdInput.text; + if (string.IsNullOrWhiteSpace(promptFile)) + { + Debug.LogError("File ID should not be null or whitespace!"); + return; + } + + string prompt = _promptInput.text; + if (string.IsNullOrWhiteSpace(prompt)) + { + Debug.LogError("Prompt should not be null or whitespace!"); + return; + } + + GeminiFile file = await GeminiManager.Instance.Request(new GeminiFileGetRequest(promptFile)); + GeminiChatResponse response = await GeminiManager.Instance.Request(new GeminiChatRequest(GeminiManager.Gemini1_5Flash, true) + { + Contents = new GeminiContent[] + { + GeminiContent.GetContent(prompt, file, GeminiRole.User) + } + }); + + _responseText.text = response.Parts[0].Text; + } + + private string FileToText(GeminiFile file) + { + return $"{nameof(GeminiFile)}(\n" + + $"\t{file.Name}\n" + + $"\t{file.DisplayName}\n" + + $"\t{file.MimeType}\n" + + $"\t{file.SizeBytes}\n" + + $"\t{file.CreateTime}\n" + + $"\t{file.UpdateTime}\n" + + $"\t{file.ExpirationTime}\n" + + $"\t{file.Sha256Hash}\n" + + $"\t{file.Uri}\n" + + $"\t{file.State}\n" + + $"\t{file.Status?.Message}\n" + + $"\t{file.VideoMetadata?.VideoDuration}\n" + + $")"; + } +} diff --git a/UGemini/Packages/com.uralstech.ugemini/Samples~/FileAPISample/Scripts/FileApiChatManager.cs.meta b/UGemini/Packages/com.uralstech.ugemini/Samples~/FileAPISample/Scripts/FileApiChatManager.cs.meta new file mode 100644 index 00000000..2ef7b1ce --- /dev/null +++ b/UGemini/Packages/com.uralstech.ugemini/Samples~/FileAPISample/Scripts/FileApiChatManager.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 88077ab96a06dc944a2c979d425be9d8 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/UGemini/Packages/com.uralstech.ugemini/package.json b/UGemini/Packages/com.uralstech.ugemini/package.json index 1ff6d339..97efbc80 100644 --- a/UGemini/Packages/com.uralstech.ugemini/package.json +++ b/UGemini/Packages/com.uralstech.ugemini/package.json @@ -9,7 +9,7 @@ "AI", "Integration" ], - "version": "1.1.0-preview.2", + "version": "1.1.0-preview.3", "unity": "2022.3", "hideInEditor": false, "documentationUrl": "https://github.com/Uralstech/UGemini/blob/master/UGemini/Packages/com.uralstech.ugemini/Documentation~/README.md", @@ -44,6 +44,11 @@ "displayName": "Token Counting", "description": "A sample scene showing a token counting system using the \"countTokens\" endpoint.", "path": "Samples~/TokenCounterSample" + }, + { + "displayName": "Prompting with File API", + "description": "A sample scene with a system to create, delete, retrieve, list and prompt Gemini with files stored in the File/Media API endpoints.", + "path": "Samples~/FileAPISample" } ], "dependencies": {