-- i made it Open Source so you guys can Add it Skid it I dont Care cuz this will be Discontinued local Api_Gemini67 = “" local CollectionService = game:GetService("CollectionService") local TweenService = game:GetService("TweenService") local HttpService = game:GetService("HttpService") local UserInputService = game:GetService("UserInputService") local lp = game:GetService("Players").LocalPlayer local G2L = {} local Api_Groq = "" local Api_GroqGpt = "" local Icons = loadstring(game:HttpGetAsync("https://raw.githubusercontent.com/Footagesus/Icons/main/Main-v2.lua"))() local WindUI = loadstring(game:HttpGet("https://github.com/Footagesus/WindUI/releases/latest/download/main.lua"))() local New = WindUI.Creator.New Icons.Init(New, "Icon") local currentAI = "Gemini" local function UpdateScrollingFrame() local totalHeight = 0 for _, child in ipairs(G2L["ScrollingFrame_c"]:GetChildren()) do if child:IsA("TextBox") or child:IsA("TextLabel") or child:IsA("Frame") then totalHeight = totalHeight + child.Size.Y.Offset + 5 end end G2L["ScrollingFrame_c"].CanvasSize = UDim2.new(0, 0, 0, totalHeight) local yOffset = 0 for _, child in ipairs(G2L["ScrollingFrame_c"]:GetChildren()) do if child:IsA("TextBox") or child:IsA("TextLabel") or child:IsA("Frame") then child.Position = UDim2.new(0, 5, 0, yOffset) yOffset = yOffset + child.Size.Y.Offset + 5 end end G2L["ScrollingFrame_c"].CanvasPosition = Vector2.new(0, totalHeight) end local function CallGeminiAPI(userMessage) local body = HttpService:JSONEncode({ contents = {{ parts = {{ text = userMessage }} }} }) local success, response = pcall(function() return request({ Url = "https://generativelanguage.googleapis.com/v1beta/models/gemini-2.0-flash-exp:generateContent?key=" .. Api_Gemini67, Method = "POST", Headers = { ["Content-Type"] = "application/json" }, Body = body }) end) if not success then return "Error: Request failed - " .. tostring(response) end if not response or not response.Body then return "Error: No response from server" end local decodeSuccess, data = pcall(function() return HttpService:JSONDecode(response.Body) end) if not decodeSuccess then return "Error: Invalid response format - " .. tostring(data) end if data and data.candidates and data.candidates[1] and data.candidates[1].content and data.candidates[1].content.parts and data.candidates[1].content.parts[1] and data.candidates[1].content.parts[1].text then local aiText = data.candidates[1].content.parts[1].text return aiText end if data and data.error then return "API Error: " .. (data.error.message or "Unknown error") end return "Error: Unable to parse AI response. Check console for details." end local function CallClaudeAPI(userMessage, apiKey) local body = HttpService:JSONEncode({ model = "claude-sonnet-4-5-20250929", max_tokens = 1024, messages = {{ role = "user", content = userMessage }} }) local success, response = pcall(function() return request({ Url = "https://api.anthropic.com/v1/messages", Method = "POST", Headers = { ["Content-Type"] = "application/json", ["x-api-key"] = apiKey, ["anthropic-version"] = "2023-06-01" }, Body = body }) end) if not success then return "Error: Request failed - " .. tostring(response) end if not response or not response.Body then return "Error: No response from server" end local decodeSuccess, data = pcall(function() return HttpService:JSONDecode(response.Body) end) if not decodeSuccess then return "Error: Invalid response format" end if data and data.content and data.content[1] and data.content[1].text then return data.content[1].text end if data and data.error then return "Claude Error: " .. (data.error.message or "Unknown error") end return "Error: Unable to parse Claude response" end local function CallGroqLlamaAPI(userMessage) local body = HttpService:JSONEncode({ model = "llama-3.1-8b-instant", messages = {{ role = "user", content = userMessage }}, max_tokens = 1024, temperature = 0.7 }) local success, response = pcall(function() return request({ Url = "https://api.groq.com/openai/v1/chat/completions", Method = "POST", Headers = { ["Content-Type"] = "application/json", ["Authorization"] = "Bearer " .. Api_Groq }, Body = body }) end) if not success then return "Error: Request failed - " .. tostring(response) end if not response or not response.Body then return "Error: No response from server" end local decodeSuccess, data = pcall(function() return HttpService:JSONDecode(response.Body) end) if not decodeSuccess then return "Error: Invalid response format" end if data and data.choices and data.choices[1] and data.choices[1].message and data.choices[1].message.content then return data.choices[1].message.content end if data and data.error then return "Groq Llama Error: " .. (data.error.message or "Unknown error") end return "Error: Unable to parse Groq Llama response" end local function CallGroqGptOssAPI(userMessage) local body = HttpService:JSONEncode({ model = "openai/gpt-oss-120b", messages = {{ role = "user", content = userMessage }}, max_tokens = 1024, temperature = 0.7 }) local success, response = pcall(function() return request({ Url = "https://api.groq.com/openai/v1/chat/completions", Method = "POST", Headers = { ["Content-Type"] = "application/json", ["Authorization"] = "Bearer " .. Api_GroqGpt }, Body = body }) end) if not success then return "Error: Request failed - " .. tostring(response) end if not response or not response.Body then return "Error: No response from server" end local decodeSuccess, data = pcall(function() return HttpService:JSONDecode(response.Body) end) if not decodeSuccess then return "Error: Invalid response format" end if data and data.choices and data.choices[1] and data.choices[1].message and data.choices[1].message.content then return data.choices[1].message.content end if data and data.error then return "Groq GPT-OSS Error: " .. (data.error.message or "Unknown error") end return "Error: Unable to parse Groq GPT-OSS response" end local function CallChatGPTAPI(userMessage, apiKey) local body = HttpService:JSONEncode({ model = "gpt-4o-mini", messages = {{ role = "user", content = userMessage }}, max_tokens = 1024, temperature = 0.7 }) local success, response = pcall(function() return request({ Url = "https://api.openai.com/v1/chat/completions", Method = "POST", Headers = { ["Content-Type"] = "application/json", ["Authorization"] = "Bearer " .. apiKey }, Body = body }) end) if not success then return "Error: Request failed - " .. tostring(response) end if not response or not response.Body then return "Error: No response from server" end local decodeSuccess, data = pcall(function() return HttpService:JSONDecode(response.Body) end) if not decodeSuccess then return "Error: Invalid response format" end if data and data.choices and data.choices[1] and data.choices[1].message and data.choices[1].message.content then return data.choices[1].message.content end if data and data.error then return "ChatGPT Error: " .. (data.error.message or "Unknown error") end return "Error: Unable to parse ChatGPT response" end local function CallAI(userMessage) if currentAI == "Gemini" then return CallGeminiAPI(userMessage) elseif currentAI == "Claude" then return CallClaudeAPI(userMessage, getgenv().ClaudeApi) elseif currentAI == "(Groq) Llama" then return CallGroqLlamaAPI(userMessage) elseif currentAI == "(Groq) Gpt Oss" then return CallGroqGptOssAPI(userMessage) elseif currentAI == "Gpt-4" then return CallChatGPTAPI(userMessage, getgenv().ChatGptApi) else return "Please select an AI model from the settings" end end local function AddMessage(sender, message, isUser) local messageLabel = Instance.new("TextLabel") messageLabel.Size = UDim2.new(1, -10, 0, 0) messageLabel.BackgroundTransparency = 1 messageLabel.TextColor3 = isUser and Color3.fromRGB(100, 200, 255) or Color3.fromRGB(255, 255, 255) messageLabel.FontFace = Font.new([[rbxasset://fonts/families/Inconsolata.json]], Enum.FontWeight.Regular, Enum.FontStyle.Normal) messageLabel.TextSize = 14 messageLabel.TextWrapped = true messageLabel.TextXAlignment = Enum.TextXAlignment.Left messageLabel.TextYAlignment = Enum.TextYAlignment.Top messageLabel.Text = sender .. ": " .. message messageLabel.Parent = G2L["ScrollingFrame_c"] local textBounds = game:GetService("TextService"):GetTextSize( messageLabel.Text, messageLabel.TextSize, Enum.Font.Code, Vector2.new(messageLabel.AbsoluteSize.X, math.huge) ) messageLabel.Size = UDim2.new(1, -10, 0, math.max(textBounds.Y + 10, 30)) UpdateScrollingFrame() return messageLabel end local function CreateCodeBlock(code, language) local codeFrame = Instance.new("Frame") codeFrame.Size = UDim2.new(1, -10, 0, 0) codeFrame.BackgroundColor3 = Color3.fromRGB(30, 30, 30) codeFrame.BorderSizePixel = 0 codeFrame.Parent = G2L["ScrollingFrame_c"] local codeCorner = Instance.new("UICorner", codeFrame) codeCorner.CornerRadius = UDim.new(0, 6) local codeBox = Instance.new("TextBox") codeBox.Size = UDim2.new(1, -50, 1, -10) codeBox.Position = UDim2.new(0, 5, 0, 5) codeBox.BackgroundTransparency = 1 codeBox.TextColor3 = Color3.fromRGB(0, 255, 127) codeBox.FontFace = Font.new([[rbxasset://fonts/families/Inconsolata.json]], Enum.FontWeight.Regular, Enum.FontStyle.Normal) codeBox.TextSize = 12 codeBox.TextWrapped = true codeBox.TextXAlignment = Enum.TextXAlignment.Left codeBox.TextYAlignment = Enum.TextYAlignment.Top codeBox.Text = code codeBox.TextEditable = false codeBox.ClearTextOnFocus = false codeBox.MultiLine = true codeBox.Parent = codeFrame local copyButton = Instance.new("ImageButton") copyButton.Size = UDim2.new(0, 20, 0, 20) copyButton.Position = UDim2.new(1, -50, 0, 7) copyButton.BackgroundTransparency = 1 copyButton.Parent = codeFrame local copyIcon = Icons.Image({ Icon = "external-link", Colors = {Color3.fromRGB(200, 200, 200)}, Size = UDim2.new(0, 18, 0, 18) }) copyIcon.IconFrame.Parent = copyButton copyButton.MouseButton1Click:Connect(function() setclipboard(code) copyIcon.IconFrame.ImageColor3 = Color3.fromRGB(0, 255, 127) task.wait(1) copyIcon.IconFrame.ImageColor3 = Color3.fromRGB(200, 200, 200) end) local executeButton = Instance.new("ImageButton") executeButton.Size = UDim2.new(0, 20, 0, 20) executeButton.Position = UDim2.new(1, -25, 0, 7) executeButton.BackgroundTransparency = 1 executeButton.Parent = codeFrame local executeIcon = Icons.Image({ Icon = "code", Colors = {Color3.fromRGB(200, 200, 200)}, Size = UDim2.new(0, 18, 0, 18) }) executeIcon.IconFrame.Parent = executeButton executeButton.MouseButton1Click:Connect(function() local success, err = pcall(function() loadstring(code)() end) if not success then print("Execute error:", err) end executeIcon.IconFrame.ImageColor3 = Color3.fromRGB(255, 140, 0) task.wait(1) executeIcon.IconFrame.ImageColor3 = Color3.fromRGB(200, 200, 200) end) local textBounds = game:GetService("TextService"):GetTextSize( code, 12, Enum.Font.Code, Vector2.new(codeBox.AbsoluteSize.X, math.huge) ) codeFrame.Size = UDim2.new(1, -10, 0, math.max(textBounds.Y + 20, 50)) UpdateScrollingFrame() return codeFrame end local function ExtractCodeBlocks(message) local parts = {} local lastIndex = 1 for codeStart, language, code, codeEnd in message:gmatch("()```([%w]*)\n?(.-)\n?```()") do if codeStart > lastIndex then local textBefore = message:sub(lastIndex, codeStart - 1) if textBefore:gsub("%s+", "") ~= "" then table.insert(parts, {type = "text", content = textBefore}) end end table.insert(parts, {type = "code", content = code, language = language}) lastIndex = codeEnd end if lastIndex <= #message then local textAfter = message:sub(lastIndex) if textAfter:gsub("%s+", "") ~= "" then table.insert(parts, {type = "text", content = textAfter}) end end if #parts == 0 then table.insert(parts, {type = "text", content = message}) end return parts end local function DisplayAIResponse(message) local parts = ExtractCodeBlocks(message) local senderAdded = false for i, part in ipairs(parts) do if part.type == "text" then if not senderAdded then AddMessage(currentAI, part.content, false) senderAdded = true else AddMessage("", part.content, false) end elseif part.type == "code" then CreateCodeBlock(part.content, part.language) end end end local function ShowLoadingMessage() local loadingLabel = Instance.new("TextLabel") loadingLabel.Name = "LoadingMessage" loadingLabel.Size = UDim2.new(1, -10, 0, 30) loadingLabel.BackgroundTransparency = 1 loadingLabel.TextColor3 = Color3.fromRGB(200, 200, 200) loadingLabel.FontFace = Font.new([[rbxasset://fonts/families/Inconsolata.json]], Enum.FontWeight.Regular, Enum.FontStyle.Normal) loadingLabel.TextSize = 14 loadingLabel.TextXAlignment = Enum.TextXAlignment.Left loadingLabel.TextYAlignment = Enum.TextYAlignment.Top loadingLabel.Text = currentAI .. ": ..." loadingLabel.Parent = G2L["ScrollingFrame_c"] UpdateScrollingFrame() local dots = 0 local animationRunning = true task.spawn(function() while animationRunning and loadingLabel.Parent do dots = (dots % 3) + 1 loadingLabel.Text = currentAI .. ": " .. string.rep(".", dots) task.wait(0.5) end end) return loadingLabel, function() animationRunning = false end end G2L["ScreenGui_1"] = Instance.new("ScreenGui", game:GetService("Players").LocalPlayer:WaitForChild("PlayerGui")) G2L["ScreenGui_1"]["ZIndexBehavior"] = Enum.ZIndexBehavior.Sibling G2L["ScreenGui_1"]["ResetOnSpawn"] = false CollectionService:AddTag(G2L["ScreenGui_1"], [[main]]) G2L["Frame_2"] = Instance.new("Frame", G2L["ScreenGui_1"]) G2L["Frame_2"]["BorderSizePixel"] = 0 G2L["Frame_2"]["BackgroundColor3"] = Color3.fromRGB(0, 0, 0) G2L["Frame_2"]["Size"] = UDim2.new(0, 490, 0, 294) G2L["Frame_2"]["Position"] = UDim2.new(0, 140, 0, -18) G2L["Frame_2"]["BackgroundTransparency"] = 0.5 G2L["TextButton_3"] = Instance.new("TextButton", G2L["Frame_2"]) G2L["TextButton_3"]["BorderSizePixel"] = 0 G2L["TextButton_3"]["TextSize"] = 14 G2L["TextButton_3"]["TextColor3"] = Color3.fromRGB(0, 0, 0) G2L["TextButton_3"]["BackgroundColor3"] = Color3.fromRGB(255, 0, 0) G2L["TextButton_3"]["FontFace"] = Font.new([[rbxasset://fonts/families/ComicNeueAngular.json]], Enum.FontWeight.Regular, Enum.FontStyle.Normal) G2L["TextButton_3"]["BackgroundTransparency"] = 1 G2L["TextButton_3"]["Size"] = UDim2.new(0, 18, 0, 16) G2L["TextButton_3"]["BorderColor3"] = Color3.fromRGB(255, 0, 0) G2L["TextButton_3"]["Text"] = [[X]] G2L["TextButton_3"]["Position"] = UDim2.new(0, 472, 0, 0) G2L["TextLabel_4"] = Instance.new("TextLabel", G2L["Frame_2"]) G2L["TextLabel_4"]["BorderSizePixel"] = 0 G2L["TextLabel_4"]["TextSize"] = 24 G2L["TextLabel_4"]["BackgroundColor3"] = Color3.fromRGB(255, 255, 255) G2L["TextLabel_4"]["FontFace"] = Font.new([[rbxasset://fonts/families/DenkOne.json]], Enum.FontWeight.Regular, Enum.FontStyle.Normal) G2L["TextLabel_4"]["TextColor3"] = Color3.fromRGB(0, 0, 0) G2L["TextLabel_4"]["BackgroundTransparency"] = 1 G2L["TextLabel_4"]["Size"] = UDim2.new(0, 148, 0, 22) G2L["TextLabel_4"]["Text"] = [[ChatAi]] G2L["TextLabel_4"]["Position"] = UDim2.new(0, 148, 0, -2) G2L["UICorner_5"] = Instance.new("UICorner", G2L["Frame_2"]) G2L["TextLabel4_6"] = Instance.new("TextLabel", G2L["Frame_2"]) G2L["TextLabel4_6"]["BorderSizePixel"] = 0 G2L["TextLabel4_6"]["BackgroundColor3"] = Color3.fromRGB(255, 0, 0) G2L["TextLabel4_6"]["Size"] = UDim2.new(0, 10, 0, 10) G2L["TextLabel4_6"]["Text"] = [[]] G2L["TextLabel4_6"]["Name"] = [[TextLabel4]] G2L["TextLabel4_6"]["Position"] = UDim2.new(0, 34, 0, 2) G2L["UICorner_7"] = Instance.new("UICorner", G2L["TextLabel4_6"]) G2L["TextLabel3_8"] = Instance.new("TextLabel", G2L["Frame_2"]) G2L["TextLabel3_8"]["BorderSizePixel"] = 0 G2L["TextLabel3_8"]["BackgroundColor3"] = Color3.fromRGB(255, 253, 15) G2L["TextLabel3_8"]["Size"] = UDim2.new(0, 10, 0, 10) G2L["TextLabel3_8"]["Text"] = [[]] G2L["TextLabel3_8"]["Name"] = [[TextLabel3]] G2L["TextLabel3_8"]["Position"] = UDim2.new(0, 18, 0, 2) G2L["UICorner_9"] = Instance.new("UICorner", G2L["TextLabel3_8"]) G2L["TextLabel2_a"] = Instance.new("TextLabel", G2L["Frame_2"]) G2L["TextLabel2_a"]["BorderSizePixel"] = 0 G2L["TextLabel2_a"]["BackgroundColor3"] = Color3.fromRGB(42, 255, 0) G2L["TextLabel2_a"]["Size"] = UDim2.new(0, 10, 0, 10) G2L["TextLabel2_a"]["Text"] = [[]] G2L["TextLabel2_a"]["Name"] = [[TextLabel2]] G2L["TextLabel2_a"]["Position"] = UDim2.new(0, 4, 0, 2) G2L["UICorner_b"] = Instance.new("UICorner", G2L["TextLabel2_a"]) G2L["ScrollingFrame_c"] = Instance.new("ScrollingFrame", G2L["Frame_2"]) G2L["ScrollingFrame_c"]["BorderSizePixel"] = 0 G2L["ScrollingFrame_c"]["CanvasPosition"] = Vector2.new(2.5, 208.69614) G2L["ScrollingFrame_c"]["BackgroundColor3"] = Color3.fromRGB(255, 255, 255) G2L["ScrollingFrame_c"]["Size"] = UDim2.new(0, 472, 0, 202) G2L["ScrollingFrame_c"]["ScrollBarImageColor3"] = Color3.fromRGB(0, 0, 0) G2L["ScrollingFrame_c"]["Position"] = UDim2.new(0, 14, 0, 28) G2L["ScrollingFrame_c"]["ScrollBarThickness"] = 3 G2L["ScrollingFrame_c"]["BackgroundTransparency"] = 1 G2L["Frame2_d"] = Instance.new("Frame", G2L["Frame_2"]) G2L["Frame2_d"]["BorderSizePixel"] = 0 G2L["Frame2_d"]["BackgroundColor3"] = Color3.fromRGB(255, 255, 255) G2L["Frame2_d"]["Size"] = UDim2.new(0, 482, 0, 50) G2L["Frame2_d"]["Position"] = UDim2.new(0, 4, 0, 238) G2L["Frame2_d"]["Name"] = [[Frame2]] G2L["UICorner_e"] = Instance.new("UICorner", G2L["Frame2_d"]) G2L["TextBox_f"] = Instance.new("TextBox", G2L["Frame_2"]) G2L["TextBox_f"]["CursorPosition"] = -1 G2L["TextBox_f"]["LineHeight"] = 0 G2L["TextBox_f"]["PlaceholderColor3"] = Color3.fromRGB(136, 136, 136) G2L["TextBox_f"]["BorderSizePixel"] = 2 G2L["TextBox_f"]["TextWrapped"] = true G2L["TextBox_f"]["TextSize"] = 14 G2L["TextBox_f"]["TextColor3"] = Color3.fromRGB(32, 32, 32) G2L["TextBox_f"]["BackgroundColor3"] = Color3.fromRGB(255, 255, 255) G2L["TextBox_f"]["FontFace"] = Font.new([[rbxasset://fonts/families/Inconsolata.json]], Enum.FontWeight.Regular, Enum.FontStyle.Normal) G2L["TextBox_f"]["MultiLine"] = true G2L["TextBox_f"]["ClearTextOnFocus"] = false G2L["TextBox_f"]["ClipsDescendants"] = true G2L["TextBox_f"]["PlaceholderText"] = "Ask " .. currentAI .. " anything..." G2L["TextBox_f"]["Size"] = UDim2.new(0, 448, 0, 44) G2L["TextBox_f"]["Position"] = UDim2.new(0, 4, 0, 242) G2L["TextBox_f"]["BorderColor3"] = Color3.fromRGB(20, 66, 210) G2L["TextBox_f"]["Text"] = [[]] G2L["TextBox_f"]["BackgroundTransparency"] = 0.1 G2L["UICorner_10"] = Instance.new("UICorner", G2L["TextBox_f"]) G2L["ImageButton_11"] = Instance.new("ImageButton", G2L["Frame_2"]) G2L["ImageButton_11"]["BorderSizePixel"] = 0 G2L["ImageButton_11"]["BackgroundTransparency"] = 1 G2L["ImageButton_11"]["BackgroundColor3"] = Color3.fromRGB(255, 0, 0) G2L["ImageButton_11"]["Size"] = UDim2.new(0, 28, 0, 26) G2L["ImageButton_11"]["Position"] = UDim2.new(0, 456, 0, 256) G2L["UICorner_ImageButton"] = Instance.new("UICorner", G2L["ImageButton_11"]) G2L["UIDragDetector_12"] = Instance.new("UIDragDetector", G2L["Frame_2"]) G2L["UIDragDetector_12"]["DragUDim2"] = UDim2.new(0, -11, 0, -15) G2L["ImageButton_Toggle"] = Instance.new("ImageButton", G2L["ScreenGui_1"]) G2L["ImageButton_Toggle"]["BorderSizePixel"] = 0 G2L["ImageButton_Toggle"]["BackgroundTransparency"] = 0.1 G2L["ImageButton_Toggle"]["BackgroundColor3"] = Color3.fromRGB(27, 27, 27) G2L["ImageButton_Toggle"]["Size"] = UDim2.new(0, 44, 0, 42) G2L["ImageButton_Toggle"]["Position"] = UDim2.new(0, 176, 0, -42) G2L["ImageButton_Toggle"]["Visible"] = false G2L["UICorner_Toggle"] = Instance.new("UICorner", G2L["ImageButton_Toggle"]) G2L["UICorner_Toggle"]["CornerRadius"] = UDim.new(0, 26) G2L["SettingsFrame"] = Instance.new("Frame", G2L["ScreenGui_1"]) G2L["SettingsFrame"]["BorderSizePixel"] = 0 G2L["SettingsFrame"]["BackgroundColor3"] = Color3.fromRGB(9, 9, 9) G2L["SettingsFrame"]["Size"] = UDim2.new(0, 424, 0, 262) G2L["SettingsFrame"]["Position"] = UDim2.new(0, 167, 0, -13) G2L["SettingsFrame"]["BackgroundTransparency"] = 0.3 G2L["SettingsFrame"]["Visible"] = false G2L["SettingsFrame"]["ZIndex"] = 20 G2L["SettingsUICorner"] = Instance.new("UICorner", G2L["SettingsFrame"]) G2L["SettingsUICorner"]["CornerRadius"] = UDim.new(0, 14) G2L["SettingsDragDetector"] = Instance.new("UIDragDetector", G2L["SettingsFrame"]) G2L["SettingsDot1"] = Instance.new("TextLabel", G2L["SettingsFrame"]) G2L["SettingsDot1"]["BorderSizePixel"] = 0 G2L["SettingsDot1"]["BackgroundColor3"] = Color3.fromRGB(148, 0, 255) G2L["SettingsDot1"]["Size"] = UDim2.new(0, 10, 0, 10) G2L["SettingsDot1"]["Text"] = "" G2L["SettingsDot1"]["Position"] = UDim2.new(0, 6, 0, 3) G2L["SettingsDot1"]["ZIndex"] = 21 Instance.new("UICorner", G2L["SettingsDot1"]) G2L["SettingsDot2"] = Instance.new("TextLabel", G2L["SettingsFrame"]) G2L["SettingsDot2"]["BorderSizePixel"] = 0 G2L["SettingsDot2"]["BackgroundColor3"] = Color3.fromRGB(255, 0, 0) G2L["SettingsDot2"]["Size"] = UDim2.new(0, 10, 0, 10) G2L["SettingsDot2"]["Text"] = "" G2L["SettingsDot2"]["Position"] = UDim2.new(0, 20, 0, 3) G2L["SettingsDot2"]["ZIndex"] = 21 Instance.new("UICorner", G2L["SettingsDot2"]) G2L["SettingsDot3"] = Instance.new("TextLabel", G2L["SettingsFrame"]) G2L["SettingsDot3"]["BorderSizePixel"] = 0 G2L["SettingsDot3"]["BackgroundColor3"] = Color3.fromRGB(0, 0, 0) G2L["SettingsDot3"]["Size"] = UDim2.new(0, 10, 0, 10) G2L["SettingsDot3"]["Text"] = "" G2L["SettingsDot3"]["Position"] = UDim2.new(0, 35, 0, 3) G2L["SettingsDot3"]["ZIndex"] = 21 Instance.new("UICorner", G2L["SettingsDot3"]) G2L["SettingsTitle"] = Instance.new("TextLabel", G2L["SettingsFrame"]) G2L["SettingsTitle"]["TextStrokeTransparency"] = 0 G2L["SettingsTitle"]["BorderSizePixel"] = 0 G2L["SettingsTitle"]["TextSize"] = 14 G2L["SettingsTitle"]["TextTransparency"] = 0.9 G2L["SettingsTitle"]["BackgroundColor3"] = Color3.fromRGB(255, 255, 255) G2L["SettingsTitle"]["FontFace"] = Font.new([[rbxasset://fonts/families/Inconsolata.json]], Enum.FontWeight.Regular, Enum.FontStyle.Normal) G2L["SettingsTitle"]["TextColor3"] = Color3.fromRGB(0, 0, 2) G2L["SettingsTitle"]["BackgroundTransparency"] = 1 G2L["SettingsTitle"]["Size"] = UDim2.new(0, 294, 0, 34) G2L["SettingsTitle"]["Text"] = "Script Syndicate" G2L["SettingsTitle"]["Position"] = UDim2.new(0, 58, 0, -8) G2L["SettingsTitle"]["ZIndex"] = 21 G2L["SettingsCloseButton"] = Instance.new("TextButton", G2L["SettingsFrame"]) G2L["SettingsCloseButton"]["BorderSizePixel"] = 0 G2L["SettingsCloseButton"]["TextColor3"] = Color3.fromRGB(255, 255, 255) G2L["SettingsCloseButton"]["BackgroundColor3"] = Color3.fromRGB(255, 255, 255) G2L["SettingsCloseButton"]["BackgroundTransparency"] = 1 G2L["SettingsCloseButton"]["Size"] = UDim2.new(0, 22, 0, 20) G2L["SettingsCloseButton"]["Text"] = "X" G2L["SettingsCloseButton"]["Position"] = UDim2.new(0, 402, 0, 2) G2L["SettingsCloseButton"]["ZIndex"] = 21 G2L["AISelectionFrame"] = Instance.new("Frame", G2L["SettingsFrame"]) G2L["AISelectionFrame"]["BorderSizePixel"] = 0 G2L["AISelectionFrame"]["BackgroundColor3"] = Color3.fromRGB(0, 0, 0) G2L["AISelectionFrame"]["Size"] = UDim2.new(0, 404, 0, 56) G2L["AISelectionFrame"]["Position"] = UDim2.new(0, 12, 0, 28) G2L["AISelectionFrame"]["BackgroundTransparency"] = 0.2 G2L["AISelectionFrame"]["ZIndex"] = 21 G2L["AISelectionCorner"] = Instance.new("UICorner", G2L["AISelectionFrame"]) G2L["AISelectionCorner"]["CornerRadius"] = UDim.new(0, 6) G2L["TextButton_SelectAI"] = Instance.new("TextButton", G2L["AISelectionFrame"]) G2L["TextButton_SelectAI"]["BorderSizePixel"] = 0 G2L["TextButton_SelectAI"]["TextSize"] = 14 G2L["TextButton_SelectAI"]["TextColor3"] = Color3.fromRGB(79, 210, 255) G2L["TextButton_SelectAI"]["BackgroundColor3"] = Color3.fromRGB(48, 48, 48) G2L["TextButton_SelectAI"]["FontFace"] = Font.new([[rbxasset://fonts/families/ComicNeueAngular.json]], Enum.FontWeight.Regular, Enum.FontStyle.Normal) G2L["TextButton_SelectAI"]["Size"] = UDim2.new(0, 376, 0, 26) G2L["TextButton_SelectAI"]["Text"] = "Select AI" G2L["TextButton_SelectAI"]["Position"] = UDim2.new(0, 12, 0, 16) G2L["TextButton_SelectAI"]["ZIndex"] = 22 G2L["ButtonCorner_SelectAI"] = Instance.new("UICorner", G2L["TextButton_SelectAI"]) G2L["DropdownFrame"] = Instance.new("Frame", G2L["SettingsFrame"]) G2L["DropdownFrame"]["BorderSizePixel"] = 0 G2L["DropdownFrame"]["BackgroundColor3"] = Color3.fromRGB(45, 45, 45) G2L["DropdownFrame"]["Size"] = UDim2.new(0, 376, 0, 0) G2L["DropdownFrame"]["Position"] = UDim2.new(0, 26, 0, 84) G2L["DropdownFrame"]["Visible"] = false G2L["DropdownFrame"]["ClipsDescendants"] = true G2L["DropdownFrame"]["ZIndex"] = 25 G2L["DropdownCorner"] = Instance.new("UICorner", G2L["DropdownFrame"]) G2L["DropdownCorner"]["CornerRadius"] = UDim.new(0, 5) G2L["DropdownStroke"] = Instance.new("UIStroke", G2L["DropdownFrame"]) G2L["DropdownStroke"]["Color"] = Color3.fromRGB(80, 80, 80) G2L["DropdownStroke"]["Thickness"] = 1 G2L["DropdownScroll"] = Instance.new("ScrollingFrame", G2L["DropdownFrame"]) G2L["DropdownScroll"]["BorderSizePixel"] = 0 G2L["DropdownScroll"]["BackgroundTransparency"] = 1 G2L["DropdownScroll"]["Size"] = UDim2.new(1, 0, 1, 0) G2L["DropdownScroll"]["CanvasSize"] = UDim2.new(0, 0, 0, 0) G2L["DropdownScroll"]["ScrollBarThickness"] = 4 G2L["DropdownScroll"]["ZIndex"] = 26 local settingsButton = Instance.new("ImageButton", G2L["Frame_2"]) settingsButton["BorderSizePixel"] = 0 settingsButton["BackgroundTransparency"] = 1 settingsButton["BackgroundColor3"] = Color3.fromRGB(50, 50, 50) settingsButton["Size"] = UDim2.new(0, 22, 0, 22) settingsButton["Position"] = UDim2.new(0, 445, 0, -3) settingsButton["ZIndex"] = 10 settingsButton["Image"] = "" settingsButton["ImageColor3"] = Color3.fromRGB(200, 200, 200) local settingsCorner = Instance.new("UICorner", settingsButton) settingsCorner["CornerRadius"] = UDim.new(0, 6) local dropdownOptions = {"Claude", "Gpt-4", "Gemini", "(Groq) Llama", "(Groq) Gpt Oss"} local function createDropdownOptions() local totalHeight = 0 for index, option in ipairs(dropdownOptions) do local optionButton = Instance.new("TextButton", G2L["DropdownScroll"]) optionButton["BorderSizePixel"] = 0 optionButton["BackgroundColor3"] = Color3.fromRGB(45, 45, 45) optionButton["Size"] = UDim2.new(1, -8, 0, 28) optionButton["Position"] = UDim2.new(0, 4, 0, (index - 1) * 28 + 4) optionButton["Text"] = option optionButton["TextSize"] = 12 optionButton["TextColor3"] = Color3.fromRGB(255, 255, 255) optionButton["FontFace"] = Font.new([[rbxasset://fonts/families/ComicNeueAngular.json]], Enum.FontWeight.Regular, Enum.FontStyle.Normal) optionButton["ZIndex"] = 27 local optionCorner = Instance.new("UICorner", optionButton) optionCorner["CornerRadius"] = UDim.new(0, 3) optionButton.MouseEnter:Connect(function() optionButton["BackgroundColor3"] = Color3.fromRGB(70, 70, 70) end) optionButton.MouseLeave:Connect(function() optionButton["BackgroundColor3"] = Color3.fromRGB(45, 45, 45) end) optionButton.MouseButton1Click:Connect(function() currentAI = option G2L["TextButton_SelectAI"]["Text"] = option G2L["TextBox_f"]["PlaceholderText"] = "Ask " .. option .. " anything..." G2L["DropdownFrame"]["Visible"] = false AddMessage("System", "Switched to " .. option .. " AI model", false) end) totalHeight = totalHeight + 28 end G2L["DropdownScroll"]["CanvasSize"] = UDim2.new(0, 0, 0, totalHeight + 8) end createDropdownOptions() G2L["TextButton_SelectAI"].MouseButton1Click:Connect(function() if G2L["DropdownFrame"]["Visible"] then G2L["DropdownFrame"]["Visible"] = false else G2L["DropdownFrame"]["Visible"] = true G2L["DropdownFrame"]["Size"] = UDim2.new(0, 376, 0, #dropdownOptions * 28 + 8) end end) G2L["SettingsCloseButton"].MouseButton1Click:Connect(function() local settingsDisappearInfo = TweenInfo.new(0.3, Enum.EasingStyle.Quad, Enum.EasingDirection.In) local settingsDisappearTween = TweenService:Create(G2L["SettingsFrame"], settingsDisappearInfo, {BackgroundTransparency = 1}) settingsDisappearTween:Play() settingsDisappearTween.Completed:Connect(function() G2L["SettingsFrame"]["Visible"] = false G2L["Frame_2"]["Visible"] = true G2L["Frame_2"]["BackgroundTransparency"] = 1 local mainAppearInfo = TweenInfo.new(0.3, Enum.EasingStyle.Quad, Enum.EasingDirection.Out) local mainAppearTween = TweenService:Create(G2L["Frame_2"], mainAppearInfo, {BackgroundTransparency = 0.5}) mainAppearTween:Play() end) end) settingsButton.MouseEnter:Connect(function() local hoverInfo = TweenInfo.new(0.2, Enum.EasingStyle.Quad, Enum.EasingDirection.Out) local hoverTween = TweenService:Create(settingsButton, hoverInfo, { BackgroundTransparency = 0.7, BackgroundColor3 = Color3.fromRGB(100, 100, 100) }) hoverTween:Play() end) settingsButton.MouseLeave:Connect(function() local unhoverInfo = TweenInfo.new(0.2, Enum.EasingStyle.Quad, Enum.EasingDirection.Out) local unhoverTween = TweenService:Create(settingsButton, unhoverInfo, { BackgroundTransparency = 1, BackgroundColor3 = Color3.fromRGB(50, 50, 50) }) unhoverTween:Play() end) settingsButton.MouseButton1Click:Connect(function() if not G2L["SettingsFrame"]["Visible"] then local mainDisappearInfo = TweenInfo.new(0.3, Enum.EasingStyle.Quad, Enum.EasingDirection.In) local mainDisappearTween = TweenService:Create(G2L["Frame_2"], mainDisappearInfo, {BackgroundTransparency = 1}) mainDisappearTween:Play() mainDisappearTween.Completed:Connect(function() G2L["Frame_2"]["Visible"] = false G2L["SettingsFrame"]["Visible"] = true G2L["SettingsFrame"]["BackgroundTransparency"] = 1 local settingsAppearInfo = TweenInfo.new(0.3, Enum.EasingStyle.Quad, Enum.EasingDirection.Out) local settingsAppearTween = TweenService:Create(G2L["SettingsFrame"], settingsAppearInfo, {BackgroundTransparency = 0.3}) settingsAppearTween:Play() end) end end) UserInputService.InputBegan:Connect(function(input, gameProcessed) if gameProcessed then return end if input.UserInputType == Enum.UserInputType.MouseButton1 then if G2L["DropdownFrame"]["Visible"] then local mouse = game:GetService("Players").LocalPlayer:GetMouse() local ddFrame = G2L["DropdownFrame"] local buttonSize = G2L["TextButton_SelectAI"].AbsoluteSize local buttonPos = G2L["TextButton_SelectAI"].AbsolutePosition local ddSize = ddFrame.AbsoluteSize local ddPos = ddFrame.AbsolutePosition local mouseX = mouse.X local mouseY = mouse.Y if not (mouseX >= buttonPos.X and mouseX <= buttonPos.X + buttonSize.X and mouseY >= buttonPos.Y and mouseY <= buttonPos.Y + buttonSize.Y) and not (mouseX >= ddPos.X and mouseX <= ddPos.X + ddSize.X and mouseY >= ddPos.Y and mouseY <= ddPos.Y + ddSize.Y) then G2L["DropdownFrame"]["Visible"] = false end end end end) G2L["TextButton_3"].MouseEnter:Connect(function() local hoverInfo = TweenInfo.new(0.2, Enum.EasingStyle.Quad, Enum.EasingDirection.Out) local hoverTween = TweenService:Create(G2L["TextButton_3"], hoverInfo, { BackgroundTransparency = 0.4, BackgroundColor3 = Color3.fromRGB(255, 255, 255) }) hoverTween:Play() end) G2L["TextButton_3"].MouseLeave:Connect(function() local unhoverInfo = TweenInfo.new(0.2, Enum.EasingStyle.Quad, Enum.EasingDirection.Out) local unhoverTween = TweenService:Create(G2L["TextButton_3"], unhoverInfo, { BackgroundTransparency = 1, BackgroundColor3 = Color3.fromRGB(255, 0, 0) }) unhoverTween:Play() end) G2L["TextButton_3"].MouseButton1Click:Connect(function() local disappearInfo = TweenInfo.new(0.3, Enum.EasingStyle.Quad, Enum.EasingDirection.InOut) local disappearTween = TweenService:Create(G2L["Frame_2"], disappearInfo, { BackgroundTransparency = 1, Position = UDim2.new(0.5, -245, 0.5, -147) }) disappearTween:Play() disappearTween.Completed:Connect(function() G2L["Frame_2"].Visible = false G2L["ImageButton_Toggle"].Visible = true local appearInfo = TweenInfo.new(0.3, Enum.EasingStyle.Quad, Enum.EasingDirection.Out) local appearTween = TweenService:Create(G2L["ImageButton_Toggle"], appearInfo, {Position = UDim2.new(0, 176, 0, 10)}) appearTween:Play() end) end) G2L["ImageButton_Toggle"].MouseButton1Click:Connect(function() local hideInfo = TweenInfo.new(0.3, Enum.EasingStyle.Quad, Enum.EasingDirection.In) local hideTween = TweenService:Create(G2L["ImageButton_Toggle"], hideInfo, {Position = UDim2.new(0, 176, 0, -42)}) hideTween:Play() hideTween.Completed:Connect(function() G2L["ImageButton_Toggle"].Visible = false G2L["Frame_2"].Visible = true G2L["Frame_2"].BackgroundTransparency = 1 G2L["Frame_2"].Position = UDim2.new(0.5, -245, 0.5, -147) local appearInfo = TweenInfo.new(0.3, Enum.EasingStyle.Quad, Enum.EasingDirection.Out) local appearTween = TweenService:Create(G2L["Frame_2"], appearInfo, { BackgroundTransparency = 0.5, Position = UDim2.new(0, 140, 0, -18) }) appearTween:Play() end) end) G2L["ImageButton_11"].MouseEnter:Connect(function() local hoverInfo = TweenInfo.new(0.2, Enum.EasingStyle.Quad, Enum.EasingDirection.Out) local hoverTween = TweenService:Create(G2L["ImageButton_11"], hoverInfo, { BackgroundTransparency = 0.7, BackgroundColor3 = Color3.fromRGB(255, 140, 0) }) hoverTween:Play() end) G2L["ImageButton_11"].MouseLeave:Connect(function() local unhoverInfo = TweenInfo.new(0.2, Enum.EasingStyle.Quad, Enum.EasingDirection.Out) local unhoverTween = TweenService:Create(G2L["ImageButton_11"], unhoverInfo, { BackgroundTransparency = 1, BackgroundColor3 = Color3.fromRGB(255, 0, 0) }) unhoverTween:Play() end) local sendIcon = Icons.Image({ Icon = "circle-arrow-up", Colors = {Color3.fromRGB(255, 140, 0)}, Size = UDim2.new(0, 22, 0, 22) }) sendIcon.IconFrame.Parent = G2L["ImageButton_11"] sendIcon.IconFrame.Position = UDim2.new(0.5, 0, 0.5, 0) sendIcon.IconFrame.AnchorPoint = Vector2.new(0.5, 0.5) local currentAIRequest = nil local isAIResponding = false local function UpdateSendIcon(iconName, color) if sendIcon and sendIcon.IconFrame then sendIcon.IconFrame:Destroy() end sendIcon = Icons.Image({ Icon = iconName, Colors = {color}, Size = UDim2.new(0, 22, 0, 22) }) sendIcon.IconFrame.Parent = G2L["ImageButton_11"] sendIcon.IconFrame.Position = UDim2.new(0.5, 0, 0.5, 0) sendIcon.IconFrame.AnchorPoint = Vector2.new(0.5, 0.5) end G2L["ImageButton_11"].MouseButton1Click:Connect(function() if isAIResponding then isAIResponding = false if currentAIRequest then task.cancel(currentAIRequest) currentAIRequest = nil end UpdateSendIcon("circle-arrow-up", Color3.fromRGB(255, 140, 0)) for _, child in ipairs(G2L["ScrollingFrame_c"]:GetChildren()) do if child.Name == "LoadingMessage" then child:Destroy() end end AddMessage("System", "...", false) return end local userMessage = G2L["TextBox_f"].Text if userMessage:gsub("%s+", "") == "" then return end AddMessage("You", userMessage, true) G2L["TextBox_f"].Text = "" UpdateSendIcon("circle-stop", Color3.fromRGB(255, 0, 0)) isAIResponding = true local loadingMessage, stopAnimation = ShowLoadingMessage() currentAIRequest = task.spawn(function() local aiResponse = CallAI(userMessage) if isAIResponding then stopAnimation() if loadingMessage and loadingMessage.Parent then loadingMessage:Destroy() end DisplayAIResponse(aiResponse) end isAIResponding = false currentAIRequest = nil UpdateSendIcon("circle-arrow-up", Color3.fromRGB(255, 140, 0)) end) end) G2L["TextBox_f"].FocusLost:Connect(function(enterPressed) if enterPressed and not isAIResponding then local userMessage = G2L["TextBox_f"].Text if userMessage:gsub("%s+", "") == "" then return end AddMessage("You", userMessage, true) G2L["TextBox_f"].Text = "" UpdateSendIcon("circle-stop", Color3.fromRGB(255, 0, 0)) isAIResponding = true local loadingMessage, stopAnimation = ShowLoadingMessage() currentAIRequest = task.spawn(function() local aiResponse = CallAI(userMessage) if isAIResponding then stopAnimation() if loadingMessage and loadingMessage.Parent then loadingMessage:Destroy() end DisplayAIResponse(aiResponse) end isAIResponding = false currentAIRequest = nil UpdateSendIcon("circle-arrow-up", Color3.fromRGB(255, 140, 0)) end) task.wait(0.1) G2L["TextBox_f"]:CaptureFocus() end end) local botIcon = Icons.Image({ Icon = "bot-message-square", Colors = {Color3.fromRGB(255, 255, 255)}, Size = UDim2.new(0, 30, 0, 30) }) botIcon.IconFrame.Parent = G2L["ImageButton_Toggle"] botIcon.IconFrame.Position = UDim2.new(0.5, 0, 0.5, 0) botIcon.IconFrame.AnchorPoint = Vector2.new(0.5, 0.5) local SettingIcon = Icons.Image({ Icon = "settings", Colors = {Color3.fromRGB(200, 200, 200)}, Size = UDim2.new(0, 18, 0, 18) }) SettingIcon.IconFrame.Parent = settingsButton SettingIcon.IconFrame.Position = UDim2.new(0.5, 0, 0.5, 0) SettingIcon.IconFrame.AnchorPoint = Vector2.new(0.5, 0.5) AddMessage("System", "[V2.8] Hello " .. lp.DisplayName .. "! I'm ChatAI Made by Script Syndicate! - https://discord.gg/DMB3CDrDa9\n\nChangeLogs:\n+ Improved CodeBox\n+ Added Execute Button on CodeBox\n+ Added 4 Ai Models\n\nAvailable Ai:\n• Gemini\n• Groq Gpt Oss\n• Groq Llama\n• Claude (Need Custom API - Paid)\n• ChatGPT 4o mini (Need Custom API - Paid)\nA new Ai will be added soon, stay tuned!", false) CreateCodeBlock([[ game.Players.LocalPlayer.Character.Humanoid.WalkSpeed = 50 ]], "lua") AddMessage("VelocityX", "Execute it using the icon on the top!", false) return G2L["ScreenGui_1"]