ChatAi Open Source Code
Key RequiredUniversal

ChatAi Open Source Code

Universal ScriptLuaUXLuaUX 2.1M views 403 executesUpdated Oct 11, 2025
4.3/ 5(22 votes)
19386% Positive
Lua Script•1148 lines (41817 chars)
-- 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"]

Features & Information

Completely Keyless Free ChatAi you can Talk a New Update will come where you can talk Ai Grok. Claude. ChatGpt.
#ChstAi#Free Keyless#Universal#Op Universal Script

Community Comments (17)

Im_kenIm_kenOct 11, 2025

Nice script, can be used to create scripts

Replying to @Im_ken
LuaUXLuaUXOct 11, 2025

@Im_ken thanks Its Currently not Done yet its actually for Premium For my Server Early Access but I js Leak it to the ScriptBlox Lmao

Replying to @LuaUX
Im_kenIm_kenOct 12, 2025

@LuaUX Add copy feature 😃

Replying to @Im_ken
LuaUXLuaUXOct 12, 2025

@Im_ken it has in the Top of the CodeBox

hiperionhiperionOct 11, 2025

unsupport xeno?

Replying to @hiperion
LuaUXLuaUXOct 11, 2025

@hiperion yes Low Unc Doesnt support as Cuz Your Executor doesnt support Request

Replying to @LuaUX
MuyeMuyeOct 11, 2025

@LuaUX Approved by muye-hub team, Malware scanning team.

hiperionhiperionOct 11, 2025

ok

deleteddeletedOct 11, 2025

x-goog-api-key is "AIzaSyA6mUCD1O_vwLa2lmf16QwQyrw5bgWUXz0" Lol

byprolbyprolOct 11, 2025

API will be patched by google btw

ReactorCoreDevReactorCoreDevOct 11, 2025

Dawg yall really broke the script? Get a life.

abuabab70abuabab70Oct 15, 2025

Guys don't use this it sucks the ai cant respond

SmoxHubSmoxHubOct 17, 2025

This is nice :) vertex approved!

iplaywarzone5iplaywarzone5Oct 18, 2025

chatgpt made this for u aswell didnt it?

Replying to @iplaywarzone5
LuaUXLuaUXOct 19, 2025

@iplaywarzone5 im not like you Making Scripts With Ai

dandushdandushOct 21, 2025

you know what would be sick? if you would also make it so that very unexperienced people could just ask it for stuff and then it will also send the game's build layout and if the ai for example responds asking for a certain module script you would decompile and give it that.

Simple_CreatorSimple_CreatorFeb 24, 2026

broken script for xeno

More Scripts for Universal Scripts