programmerdev/ai-api
0
1import gradio as gr2 3# -------------------------4# Encoded API Key (scrambled for safety)5API_KEYs = "KuXEEDOY_♣♣↨↨SOAuYYKZ►▼↑→↑h↓♦→♦FCuFKuXEEDuuGFKD"6 7def decode_key(encoded: str) -> str:8 """9 Decode the scrambled API key by reversing and XOR with 4210 """11 reversed_str = encoded[::-1]12 return "".join([chr(ord(c) ^ 42) for c in reversed_str])13 14API_KEY = decode_key(API_KEYs)15 16# -------------------------17# Lazy-load generators for different models18generators = {}19 20def get_generator(model):21 if model not in generators:22 from transformers import pipeline23 generators[model] = pipeline('text-generation', model=model)24 return generators[model]25 26# -------------------------27# Flexible Chatbot function28def chatbot_response(29 user_input,30 api_key=None,31 model="EleutherAI/gpt-neo-1.3B",32 data=None, # optional extra context33 systemprompt=None, # optional system prompt34 temperature=0.7,35 max_length=300,36 do_sample=True37):38 # Enforce API key if provided39 if API_KEY and api_key != API_KEY:40 return "❌ Forbidden: Invalid API key."41 42 # Build prompt dynamically43 prompt_parts = []44 if systemprompt:45 prompt_parts.append(f"System: {systemprompt}")46 if data:47 prompt_parts.append(f"Context: {data}")48 prompt_parts.append(f"User: {user_input}\nAI:")49 prompt = "\n".join(prompt_parts)50 51 # Generate AI response52 generator = get_generator(model)53 response = generator(prompt, max_length=max_length, do_sample=do_sample, temperature=temperature)54 try:55 ai_text = response[0]['generated_text'].split('AI:')[1].strip()56 except IndexError:57 ai_text = response[0]['generated_text'].strip()58 return ai_text59 60# -------------------------61# Gradio UI62with gr.Blocks() as demo:63 gr.Markdown("## 🤖 Islamic AI Assistant (GPT-2 & GPT-J 1.3B)")64 65 with gr.Row():66 msg = gr.Textbox(label="Your Message", placeholder="Type something...")67 key = gr.Textbox(label="API Key (if enabled)", type="password")68 69 model_selector = gr.Dropdown(70 label="Select Model",71 choices=[72 "gpt2",73 "gpt2-medium",74 "gpt2-large",75 "EleutherAI/gpt-neo-1.3B"76 ],77 value="EleutherAI/gpt-neo-1.3B"78 )79 80 output = gr.Textbox(label="AI Response", interactive=False)81 submit = gr.Button("Submit")82 83 submit.click(84 chatbot_response,85 inputs=[msg, key, model_selector],86 outputs=[output]87 )88 89# -------------------------90# Launch app91if __name__ == "__main__":92 demo.launch(93 server_name="0.0.0.0",94 server_port=7860,95 share=True96 )97 