Upload files to "/"

هذا الالتزام موجود في:
2026-06-10 18:41:43 +00:00
التزام a8fff6bb6c
4 ملفات معدلة مع 162 إضافات و0 حذوفات

1
.env Normal file
عرض الملف

@@ -0,0 +1 @@
AUTH_TOKEN="b8f6b49e-999e-4643-a1d8-9c6f43b445e2.VBRq5IvEjWMOZOAzKLFvKcM54DR6G4L-"

2
.gitignore مباع Normal file
عرض الملف

@@ -0,0 +1,2 @@
venv
.env

159
main.py Normal file
عرض الملف

@@ -0,0 +1,159 @@
import requests
import json
import time
import sys
import os
from dotenv import load_dotenv
load_dotenv()
# === CONFIGURATION ===
AUTH_TOKEN = os.getenv("AUTH_TOKEN")
BASE_URL = "https://chat.cumin.dev/api"
HEADERS = {
"Authorization": f"Bearer {AUTH_TOKEN}",
"Content-Type": "application/json"
}
# Fixed initial prompt (R&D assistant, Arabic only)
INITIAL_PROMPT = """You are an expert R&D assistant specialized in AI, Machine Learning, and LLMs. Provide 3-5 creative, underexplored research directions. For each idea: short title, brief explanation, why it's promising (with novelty evidence), and at least one reference to a paper or source. Be concise but insightful. Reply only in Arabic."""
def create_conversation(title="AI R&D Session"):
url = f"{BASE_URL}/conversations"
payload = {"title": title}
resp = requests.post(url, headers=HEADERS, json=payload)
if resp.status_code in (200, 201):
conv_id = resp.json().get("id")
print(f"[✓] New conversation created: {conv_id}")
return conv_id
else:
print(f"[✗] Failed to create conversation: {resp.status_code} - {resp.text}")
return None
def send_message(conv_id, text):
url = f"{BASE_URL}/conversations/{conv_id}/chat"
payload = {"message": text, "files": []}
resp = requests.post(url, headers=HEADERS, json=payload)
if resp.status_code == 200:
return True
else:
print(f"[✗] Send failed: {resp.text}")
return False
def get_conversation(conv_id):
url = f"{BASE_URL}/conversations/{conv_id}"
resp = requests.get(url, headers=HEADERS)
if resp.status_code == 200:
return resp.json()
else:
print(f"[✗] Failed to fetch conversation: {resp.text}")
return None
def get_last_assistant_reply(conv_data):
if not conv_data or "messages" not in conv_data:
return None
for msg in reversed(conv_data["messages"]):
if msg.get("role") == "assistant":
return msg.get("content")
return None
def wait_for_assistant_reply(conv_id, last_msg_count, timeout=40, poll_interval=2):
start = time.time()
while time.time() - start < timeout:
conv = get_conversation(conv_id)
if conv and "messages" in conv:
if len(conv["messages"]) > last_msg_count:
new_msg = conv["messages"][-1]
if new_msg["role"] == "assistant":
return new_msg["content"]
time.sleep(poll_interval)
print("[!] Timeout waiting for assistant reply.")
return None
def initialize_conversation(conv_id):
"""Send the initial R&D prompt and return the assistant's first reply."""
print("\n[→] Sending initial R&D prompt (Arabic only)...")
if not send_message(conv_id, INITIAL_PROMPT):
return None
print("[→] Waiting for assistant to generate ideas...")
conv_data = get_conversation(conv_id)
if not conv_data:
return None
msg_count = len(conv_data.get("messages", []))
reply = wait_for_assistant_reply(conv_id, msg_count)
return reply
# === MAIN LOOP ===
def main():
print("\n" + "="*60)
print("R&D ASSISTANT (AI/ML/LLM) Arabic responses only")
print("Commands: /new -> start a fresh conversation (with initial prompt)")
print(" /exit -> quit")
print("="*60 + "\n")
conv_id = None
choice = input("Start a new conversation? (y/n): ").strip().lower()
if choice == 'y':
conv_id = create_conversation()
if not conv_id:
print("Could not create conversation. Exiting.")
sys.exit(1)
# Send the initial Arabic R&D prompt automatically
first_reply = initialize_conversation(conv_id)
if first_reply:
print("\n" + "="*60)
print("ASSISTANT'S INITIAL RESPONSE (Arabic):")
print("="*60)
print(first_reply)
else:
print("[!] Could not get initial response. You can still chat.")
else:
conv_id = input("Paste an existing conversation ID: ").strip()
print(f"[i] Using existing conversation: {conv_id}")
# Interactive loop (continue conversation)
while True:
user_input = input("\nYou: ").strip()
if not user_input:
continue
if user_input == "/exit":
print("Goodbye!")
break
if user_input == "/new":
print("\n[!] Creating a fresh conversation...")
new_id = create_conversation()
if new_id:
conv_id = new_id
# Send initial prompt for the new conversation too
first_reply = initialize_conversation(conv_id)
if first_reply:
print("\n" + "="*60)
print("ASSISTANT'S INITIAL RESPONSE (Arabic):")
print("="*60)
print(first_reply)
else:
print("[!] No initial response. Continue chatting.")
else:
print("[✗] Failed to create new conversation. Staying in current.")
continue
# Normal message
if not send_message(conv_id, user_input):
continue
# Wait for reply
conv_data = get_conversation(conv_id)
if not conv_data:
continue
msg_count = len(conv_data.get("messages", []))
print("Assistant is thinking...", end="", flush=True)
reply = wait_for_assistant_reply(conv_id, msg_count)
print("\r" + " " * 30 + "\r", end="")
if reply:
print(f"\nAssistant (Arabic): {reply}")
else:
print("\nAssistant: (No response)")
if __name__ == "__main__":
main()

ثنائية
requirements.txt Normal file

ملف ثنائي غير معروض.