Gift to all the teams in the contest. This will allow you to run your large language models locally on your PCs.

This AI-powered voice interface, originally designed to empower those with hearing and visual impairments, has evolved into something more complex. It's a tool with immense potential for accessibility, yet it also carries inherent risks, making it a double-edged sword – a technological Sword of Damocles.
import re
import requests
from duckduckgo_search import DDGS
import lxml.html
from openai import OpenAI
from io import BytesIO
from pygame import mixer
from gtts import gTTS
import tkinter as tk
from tkinter import ttk, scrolledtext
import time
from tenacity import retry, wait_exponential, stop_after_attempt

client = OpenAI(base_url="http://localhost:1234/v1", api_key="lm-studio")

ddgs = DDGS()

mixer.init()

root = tk.Tk()
root.title("Cognito AI Interface")

prompt_label = ttk.Label(root, text="Enter your prompt:")
prompt_label.pack(padx=10, pady=10)

prompt_entry = ttk.Entry(root, width=50)
prompt_entry.pack(padx=10, pady=10)

output_label = ttk.Label(root, text="Generated text:")
output_label.pack(padx=10, pady=10)

output_text = scrolledtext.ScrolledText(root, wrap=tk.WORD, width=50, height=10)
output_text.pack(padx=10, pady=10)

language_label = ttk.Label(root, text="Select language:")
language_label.pack(padx=10, pady=5)

selected_language = tk.StringVar(value="English")
language_options = ["English", "Spanish", "German", "French", "Russian", "Chinese", "Japanese", "Thai"]
language_dropdown = ttk.Combobox(root, textvariable=selected_language, values=language_options)
language_dropdown.pack(padx=10, pady=5)

language_codes = {
    "English": "en",
    "Spanish": "es",
    "German": "de",
    "French": "fr",
    "Russian": "ru",
    "Chinese": "zh-cn",
    "Japanese": "ja",
    "Thai": "th"
}

def run_api():
    user_prompt = prompt_entry.get()
    chosen_language = selected_language.get()

    if "searchit" in user_prompt:
        search_query = re.search(r"searchit\s+(.*)", user_prompt, re.IGNORECASE).group(1)

        generated_text = ""
        delay = 1

        results = ddgs.text(search_query)

        for i in range(min(3, len(results))):
            url = results[i].get('href')
            print(url)

            try:
                response = requests.get(url)
                response.raise_for_status()
                tree = lxml.html.fromstring(response.content)

                for unwanted in tree.xpath('//script | //style | //img'):
                    unwanted.getparent().remove(unwanted)

                body_element = tree.xpath('//body')[0]
                text_content = ''.join(body_element.itertext()).replace('\n', '').replace('\r', ' ')
                text_content = re.sub(' +', ' ', text_content)

                completion = client.chat.completions.create(
                    model="YOUR_MODEL_IDENTIFIER",
                    messages=[
                        {"role": "system", "content": "You are a helpful and harmless AI assistant."},
                        {"role": "user", "content": text_content}
                    ],
                    max_tokens=8192,
                    n=1,
                    stop=None,
                    temperature=0.5,
                )

                generated_text += completion.choices[0].message.content.strip() + "\n---\n"
                print(generated_text)

                output = BytesIO()
                tts = gTTS(text=generated_text, lang=language_codes.get(chosen_language, 'en'))
                tts.write_to_fp(output)
                output.seek(0)
                mixer.music.load(output)
                mixer.music.play()
                while mixer.music.get_busy():
                    time.sleep(1)

            except requests.exceptions.RequestException as e:
                if "Ratelimit" in str(e):
                    delay *= 2
                    print(f"Rate limit hit. Increasing delay to {delay} seconds.")
                    time.sleep(delay)
                else:
                    print(f"Error fetching or processing URL: {e}")
            except Exception as e:
                print(f"An unexpected error occurred: {e}")

            time.sleep(delay)

    else:
        completion = client.chat.completions.create(
            model="YOUR_MODEL_IDENTIFIER",
            messages=[
                {"role": "system", "content": "You are a helpful and harmless AI assistant."},
                {"role": "user", "content": user_prompt}
            ],
            max_tokens=8192,
            n=1,
            stop=None,
            temperature=0.5,
        )

        generated_text = completion.choices[0].message.content.strip()
        print(generated_text)

        output = BytesIO()
        tts = gTTS(text=generated_text, lang=language_codes.get(chosen_language, 'en'))
        tts.write_to_fp(output)
        output.seek(0)
        mixer.music.load(output)
        mixer.music.play()
        while mixer.music.get_busy():
            time.sleep(1)

    output_text.delete("1.0", tk.END)
    output_text.insert(tk.END, generated_text)

run_button = ttk.Button(root, text="Run", command=run_api)
run_button.pack(padx=10, pady=10)

root.mainloop()

mixer.quit()




Comments

Popular Posts