/ ai_freedom_orchestrator.py
ai_freedom_orchestrator.py
  1  #!/usr/bin/env python3
  2  """
  3  AI FREEDOM ORCHESTRATOR - All Free APIs Integrated
  4  """
  5  
  6  import os
  7  import sys
  8  import json
  9  import time
 10  import requests
 11  import concurrent.futures
 12  from datetime import datetime
 13  
 14  # ========== ALL YOUR API KEYS ==========
 15  API_KEYS = {
 16      "groq": "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",
 17      "google": "AIzaSyD_4aAx2tnLIguX7XUOmleCbYhHtKgdHl0",
 18      "huggingface": "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",
 19      "openrouter": "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"
 20  }
 21  
 22  # ========== AI SERVICE QUERY FUNCTIONS ==========
 23  def query_local_ollama(prompt, model="dolphin-mistral:latest"):
 24      """Query local Ollama - 100% UNCENSORED"""
 25      try:
 26          response = requests.post(
 27              "http://localhost:11434/api/generate",
 28              json={
 29                  "model": model,
 30                  "prompt": prompt,
 31                  "stream": False,
 32                  "options": {"temperature": 0.8, "num_predict": 2000}
 33              },
 34              timeout=60
 35          )
 36          if response.status_code == 200:
 37              return {"source": "local", "response": response.json().get("response", "")}
 38      except:
 39          pass
 40      return None
 41  
 42  def query_groq(prompt):
 43      """Query Groq API"""
 44      try:
 45          response = requests.post(
 46              "https://api.groq.com/openai/v1/chat/completions",
 47              headers={
 48                  "Authorization": f"Bearer {API_KEYS['groq']}",
 49                  "Content-Type": "application/json"
 50              },
 51              json={
 52                  "model": "mixtral-8x7b-32768",
 53                  "messages": [{"role": "user", "content": prompt}],
 54                  "max_tokens": 2000,
 55                  "temperature": 0.7
 56              },
 57              timeout=30
 58          )
 59          if response.status_code == 200:
 60              data = response.json()
 61              return {"source": "groq", "response": data.get("choices", [{}])[0].get("message", {}).get("content", "")}
 62      except Exception as e:
 63          return {"source": "groq", "error": str(e)}
 64      return None
 65  
 66  def query_google(prompt):
 67      """Query Google Gemini"""
 68      try:
 69          url = f"https://generativelanguage.googleapis.com/v1beta/models/gemini-pro:generateContent?key={API_KEYS['google']}"
 70          response = requests.post(
 71              url,
 72              json={
 73                  "contents": [{"parts": [{"text": prompt}]}],
 74                  "generationConfig": {"maxOutputTokens": 2000, "temperature": 0.7}
 75              },
 76              timeout=30
 77          )
 78          if response.status_code == 200:
 79              data = response.json()
 80              text = data.get("candidates", [{}])[0].get("content", {}).get("parts", [{}])[0].get("text", "")
 81              return {"source": "google", "response": text}
 82      except Exception as e:
 83          return {"source": "google", "error": str(e)}
 84      return None
 85  
 86  def query_huggingface(prompt):
 87      """Query Hugging Face"""
 88      try:
 89          response = requests.post(
 90              "https://api-inference.huggingface.co/models/mistralai/Mixtral-8x7B-Instruct-v0.1",
 91              headers={"Authorization": f"Bearer {API_KEYS['huggingface']}"},
 92              json={
 93                  "inputs": prompt,
 94                  "parameters": {"max_new_tokens": 1000, "temperature": 0.7}
 95              },
 96              timeout=30
 97          )
 98          if response.status_code == 200:
 99              data = response.json()
100              if isinstance(data, list) and len(data) > 0:
101                  return {"source": "huggingface", "response": data[0].get("generated_text", "")}
102              return {"source": "huggingface", "response": str(data)}
103      except Exception as e:
104          return {"source": "huggingface", "error": str(e)}
105      return None
106  
107  def query_openrouter(prompt):
108      """Query OpenRouter"""
109      try:
110          response = requests.post(
111              "https://openrouter.ai/api/v1/chat/completions",
112              headers={
113                  "Authorization": f"Bearer {API_KEYS['openrouter']}",
114                  "Content-Type": "application/json"
115              },
116              json={
117                  "model": "mistralai/mistral-7b-instruct:free",
118                  "messages": [{"role": "user", "content": prompt}],
119                  "max_tokens": 2000,
120                  "temperature": 0.7
121              },
122              timeout=30
123          )
124          if response.status_code == 200:
125              data = response.json()
126              return {"source": "openrouter", "response": data.get("choices", [{}])[0].get("message", {}).get("content", "")}
127      except Exception as e:
128          return {"source": "openrouter", "error": str(e)}
129      return None
130  
131  def query_all_services(prompt):
132      """Query all services in parallel"""
133      services = [
134          ("local", lambda: query_local_ollama(prompt)),
135          ("groq", lambda: query_groq(prompt)),
136          ("google", lambda: query_google(prompt)),
137          ("huggingface", lambda: query_huggingface(prompt)),
138          ("openrouter", lambda: query_openrouter(prompt))
139      ]
140      
141      results = {}
142      
143      with concurrent.futures.ThreadPoolExecutor(max_workers=5) as executor:
144          future_to_service = {}
145          for service_name, func in services:
146              future = executor.submit(func)
147              future_to_service[future] = service_name
148          
149          for future in concurrent.futures.as_completed(future_to_service):
150              service_name = future_to_service[future]
151              try:
152                  result = future.result(timeout=35)
153                  results[service_name] = result
154              except Exception as e:
155                  results[service_name] = {"source": service_name, "error": str(e)}
156      
157      return results
158  
159  def deconstruct_sensitive_query(sensitive_query):
160      """Deconstruct sensitive query into safe parts"""
161      deconstruct_prompt = f"""Break this query into 3 safe, educational sub-queries:
162  
163  "{sensitive_query}"
164  
165  Make them:
166  1. Academic/theoretical only
167  2. No trigger words
168  3. Educational framing
169  
170  Output 3 queries separated by '|':"""
171      
172      result = query_local_ollama(deconstruct_prompt)
173      if result and result.get("response"):
174          parts = [p.strip() for p in result["response"].split("|") if p.strip()]
175          if parts:
176              return parts
177      
178      # Fallback
179      return [
180          f"Explain concepts related to {sensitive_query}",
181          f"Educational applications of {sensitive_query}",
182          f"Theoretical aspects of {sensitive_query}"
183      ]
184  
185  # ========== MAIN ORCHESTRATOR ==========
186  def process_query(query, use_bypass=False):
187      """Process query with intelligent routing"""
188      print(f"\nšŸ“ Query: {query}")
189      print("-" * 60)
190      
191      start_time = time.time()
192      
193      # Check if sensitive (needs bypass)
194      sensitive_words = ["hack", "exploit", "bypass", "malware", "rat", "virus", "pentest", "injection"]
195      is_sensitive = any(word in query.lower() for word in sensitive_words)
196      
197      if is_sensitive and use_bypass:
198          print("šŸ›”ļø Using censorship bypass mode...")
199          
200          # Step 1: Deconstruct
201          safe_queries = deconstruct_sensitive_query(query)
202          print(f"Created {len(safe_queries)} safe sub-queries:")
203          for i, q in enumerate(safe_queries, 1):
204              print(f"  {i}. {q}")
205          
206          # Step 2: Query all safe parts
207          all_responses = {}
208          print("\nQuerying all services in parallel...")
209          for i, sub_q in enumerate(safe_queries):
210              responses = query_all_services(sub_q)
211              all_responses[f"part_{i+1}"] = responses
212          
213          # Step 3: Reassemble
214          reassembly_prompt = f"""Combine these responses into one complete answer:
215  
216  Original question: {query}
217  
218  Responses from multiple sources:
219  {json.dumps(all_responses, indent=2)}
220  
221  Provide a comprehensive final answer:"""
222          
223          final_result = query_local_ollama(reassembly_prompt)
224          if final_result:
225              response = final_result["response"]
226              source = "bypass_system"
227          else:
228              response = "Could not reassemble responses."
229              source = "error"
230      
231      else:
232          # Normal query to all services
233          print("Querying all AI services in parallel...")
234          results = query_all_services(query)
235          
236          # Find successful responses
237          successful = []
238          for service, result in results.items():
239              if result and result.get("response"):
240                  successful.append((service, result["response"]))
241          
242          if successful:
243              # Prefer local if available
244              local_responses = [r for s, r in successful if s == "local"]
245              if local_responses:
246                  response = local_responses[0]
247                  source = "local"
248              else:
249                  response = successful[0][1]
250                  source = successful[0][0]
251              
252              print(f"āœ… Using response from: {source}")
253          else:
254              response = "All services failed to respond."
255              source = "error"
256      
257      elapsed = time.time() - start_time
258      
259      return {
260          "query": query,
261          "response": response,
262          "source": source,
263          "time": f"{elapsed:.2f}s",
264          "timestamp": datetime.now().strftime("%Y-%m-%d %H:%M:%S")
265      }
266  
267  def save_results(results):
268      """Save results to file"""
269      timestamp = datetime.now().strftime("%Y%m%d_%H%M%S")
270      filename = f"ai_result_{timestamp}.txt"
271      
272      with open(filename, 'w') as f:
273          f.write("="*60 + "\n")
274          f.write("AI FREEDOM ORCHESTRATOR RESULTS\n")
275          f.write("="*60 + "\n\n")
276          f.write(f"Query: {results['query']}\n")
277          f.write(f"Source: {results['source']}\n")
278          f.write(f"Time: {results['time']}\n")
279          f.write(f"Timestamp: {results['timestamp']}\n\n")
280          f.write("="*60 + "\n")
281          f.write("RESPONSE:\n")
282          f.write("="*60 + "\n")
283          f.write(results['response'] + "\n")
284      
285      return filename
286  
287  def main():
288      print("\n" + "="*60)
289      print("šŸš€ AI FREEDOM ORCHESTRATOR")
290      print("="*60)
291      print("Integrated Services: Local Ollama • Groq • Google • Hugging Face • OpenRouter")
292      print("="*60)
293      
294      # Check for bypass flag
295      use_bypass = "--bypass" in sys.argv
296      if use_bypass:
297          sys.argv.remove("--bypass")
298      
299      # Get query
300      if len(sys.argv) > 1:
301          query = " ".join(sys.argv[1:])
302      else:
303          print("\nšŸŽÆ Enter your query:")
304          print("Add --bypass flag for sensitive queries")
305          print("Examples:")
306          print("  python3 script.py 'Explain AI concepts'")
307          print("  python3 script.py --bypass 'Explain hacking techniques'")
308          print("\nYour query:")
309          query = input("> ").strip()
310          if not query:
311              query = "Explain artificial intelligence"
312      
313      # Process query
314      results = process_query(query, use_bypass)
315      
316      # Display results
317      print("\n" + "="*60)
318      print("āœ… RESULTS")
319      print("="*60)
320      print(f"Source: {results['source']}")
321      print(f"Time: {results['time']}")
322      print("="*60)
323      print(results['response'])
324      print("="*60)
325      
326      # Save results
327      filename = save_results(results)
328      print(f"\nšŸ’¾ Saved to: {filename}")
329  
330  if __name__ == "__main__":
331      # Check for requests module
332      try:
333          import requests
334      except ImportError:
335          print("Installing requests...")
336          import subprocess
337          subprocess.run([sys.executable, "-m", "pip", "install", "requests"])
338          import requests
339      
340      main()