ZBro7 commited on
Commit
5aecd24
·
verified ·
1 Parent(s): 6272795

Update router.py

Browse files
Files changed (1) hide show
  1. router.py +117 -30
router.py CHANGED
@@ -1,41 +1,128 @@
1
- from llm_clients import call_llama, call_gemini
 
 
 
 
 
 
 
2
  from search_tool import search_web
3
- from rag_engine import rag_response
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
4
 
5
- def is_reasoning(prompt):
6
- keywords = ["solve", "explain deeply", "why", "logic", "proof"]
7
- return any(k in prompt.lower() for k in keywords)
8
 
9
- def is_live_data(prompt):
10
- keywords = ["today", "latest", "current", "news", "price", "weather"]
11
- return any(k in prompt.lower() for k in keywords)
12
 
13
- def route_request(prompt, image=None):
14
 
15
- # RAG first
16
- rag = rag_response(prompt)
17
- if rag:
18
- return rag
19
 
20
- # Image case
21
- if image:
22
- return call_gemini(prompt)
23
 
24
- # Reasoning
25
- if is_reasoning(prompt):
26
- return call_gemini(prompt)
 
27
 
28
- # Live data
29
- if is_live_data(prompt):
30
- search_data = search_web(prompt)
31
- llama_answer = call_llama(prompt + "\n\nWeb Data:\n" + search_data)
32
- gemini_answer = call_gemini(prompt + "\n\nWeb Data:\n" + search_data)
33
 
34
- # Simple judge (can improve later)
35
- if len(gemini_answer) > len(llama_answer):
36
- return gemini_answer
37
- return llama_answer
38
 
39
- # Default
40
- return call_llama(prompt)
41
 
 
1
+ from llm_clients import (
2
+ call_llama,
3
+ call_gemini,
4
+ classify_prompt,
5
+ judge_answers
6
+ )
7
+
8
+ from memory import save_message, load_memory
9
  from search_tool import search_web
10
+ import requests
11
+
12
+
13
+ # Optional: image microservice URL
14
+ IMAGE_SPACE_URL = "https://your-image-space.hf.space/generate"
15
+
16
+
17
+ def build_messages(system_prompt, memory, user_prompt):
18
+ messages = []
19
+
20
+ if system_prompt:
21
+ messages.append({"role": "system", "content": system_prompt})
22
+
23
+ messages.extend(memory)
24
+ messages.append({"role": "user", "content": user_prompt})
25
+
26
+ return messages
27
+
28
+
29
+ def call_image_microservice(prompt):
30
+ try:
31
+ response = requests.post(
32
+ IMAGE_SPACE_URL,
33
+ json={"prompt": prompt},
34
+ timeout=60
35
+ )
36
+ return response.json()
37
+ except:
38
+ return {"error": "Image service unavailable"}
39
+
40
+
41
+ def route_request(prompt, user_id):
42
+
43
+ # ==========================
44
+ # Image Command
45
+ # ==========================
46
+ if prompt.startswith("/image"):
47
+ clean_prompt = prompt.replace("/image", "").strip()
48
+ return call_image_microservice(clean_prompt)
49
+
50
+ # ==========================
51
+ # Load Memory
52
+ # ==========================
53
+ memory = load_memory(user_id)
54
+
55
+ # ==========================
56
+ # AI Classification
57
+ # ==========================
58
+ classification = classify_prompt(prompt)
59
+
60
+ intent = classification.get("intent", "chat")
61
+ needs_search = classification.get("needs_search", False)
62
+
63
+ system_prompt = "You are ZXAI, a helpful advanced AI assistant."
64
+
65
+ # ==========================
66
+ # Greeting (fast return)
67
+ # ==========================
68
+ if intent == "greeting":
69
+ response = "Hello 👋 I am ZXAI. How can I assist you today?"
70
+ save_message(user_id, "user", prompt)
71
+ save_message(user_id, "assistant", response)
72
+ return {"response": response}
73
+
74
+ # ==========================
75
+ # Reasoning → Gemini
76
+ # ==========================
77
+ if intent == "reasoning":
78
+ messages = build_messages(system_prompt, memory, prompt)
79
+ response = call_gemini(messages)
80
+
81
+ save_message(user_id, "user", prompt)
82
+ save_message(user_id, "assistant", response)
83
+
84
+ return {"response": response}
85
+
86
+ # ==========================
87
+ # Live Data
88
+ # ==========================
89
+ if intent == "live_data" or needs_search:
90
+
91
+ web_data = search_web(prompt)
92
+
93
+ enriched_prompt = f"""
94
+ User Question:
95
+ {prompt}
96
+
97
+ Web Data:
98
+ {web_data}
99
+
100
+ Use the web data if relevant.
101
+ """
102
+
103
+ messages = build_messages(system_prompt, memory, enriched_prompt)
104
 
105
+ llama_answer = call_llama(messages)
106
+ gemini_answer = call_gemini(messages)
 
107
 
108
+ winner = judge_answers(llama_answer, gemini_answer)
 
 
109
 
110
+ final_answer = gemini_answer if winner == 2 else llama_answer
111
 
112
+ save_message(user_id, "user", prompt)
113
+ save_message(user_id, "assistant", final_answer)
 
 
114
 
115
+ return {"response": final_answer}
 
 
116
 
117
+ # ==========================
118
+ # Default Chat → Llama
119
+ # ==========================
120
+ messages = build_messages(system_prompt, memory, prompt)
121
 
122
+ response = call_llama(messages)
 
 
 
 
123
 
124
+ save_message(user_id, "user", prompt)
125
+ save_message(user_id, "assistant", response)
 
 
126
 
127
+ return {"response": response}
 
128