rkihacker commited on
Commit
db3a9bd
·
verified ·
1 Parent(s): ad6e5e4

Update main.py

Browse files
Files changed (1) hide show
  1. main.py +47 -4
main.py CHANGED
@@ -22,10 +22,24 @@ with open("model_map.json", "r", encoding="utf-8") as f:
22
  MODEL_PROMPTS = json.load(f)
23
 
24
  # Request schema
 
 
 
 
 
 
 
 
 
 
 
 
 
25
  class Message(BaseModel):
26
  role: str
27
- content: str
28
 
 
29
  class ChatRequest(BaseModel):
30
  model: str
31
  messages: List[Message]
@@ -41,9 +55,38 @@ class ChatRequest(BaseModel):
41
  def build_payload(chat: ChatRequest):
42
  system_prompt = MODEL_PROMPTS.get(chat.model, "You are a helpful assistant.")
43
  filtered_messages = [msg for msg in chat.messages if msg.role != "system"]
44
- payload_messages = [{"role": "system", "content": system_prompt}] + [
45
- {"role": msg.role, "content": msg.content} for msg in filtered_messages
46
- ]
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
47
  return {
48
  "model": BACKEND_MODEL,
49
  "messages": payload_messages,
 
22
  MODEL_PROMPTS = json.load(f)
23
 
24
  # Request schema
25
+
26
+ # Define ContentType for vision
27
+ class ContentImage(BaseModel):
28
+ type: str # must be "image_url"
29
+ image_url: dict # {"url": "https://..." or "data:image/...;base64,..."}
30
+
31
+ class ContentText(BaseModel):
32
+ type: str # must be "text"
33
+ text: str
34
+
35
+ ContentType = Union[ContentText, ContentImage]
36
+
37
+ # Message model allows BOTH old and new formats
38
  class Message(BaseModel):
39
  role: str
40
+ content: Union[str, List[ContentType]] # str (legacy) or list of ContentType
41
 
42
+ # ChatRequest model
43
  class ChatRequest(BaseModel):
44
  model: str
45
  messages: List[Message]
 
55
  def build_payload(chat: ChatRequest):
56
  system_prompt = MODEL_PROMPTS.get(chat.model, "You are a helpful assistant.")
57
  filtered_messages = [msg for msg in chat.messages if msg.role != "system"]
58
+
59
+ payload_messages = [{"role": "system", "content": system_prompt}]
60
+
61
+ for msg in filtered_messages:
62
+ # Legacy format: string
63
+ if isinstance(msg.content, str):
64
+ payload_messages.append({"role": msg.role, "content": msg.content})
65
+
66
+ # Multimodal format
67
+ elif isinstance(msg.content, list):
68
+ content_payload = []
69
+ for content_item in msg.content:
70
+ # ContentText
71
+ if content_item.type == "text":
72
+ content_payload.append({
73
+ "type": "text",
74
+ "text": content_item.text
75
+ })
76
+ # ContentImage
77
+ elif content_item.type == "image_url":
78
+ content_payload.append({
79
+ "type": "image_url",
80
+ "image_url": content_item.image_url
81
+ })
82
+ else:
83
+ logger.warning(f"Unknown content type: {content_item.type}, skipping.")
84
+
85
+ payload_messages.append({"role": msg.role, "content": content_payload})
86
+
87
+ else:
88
+ logger.warning(f"Unknown message content format: {msg.content}")
89
+
90
  return {
91
  "model": BACKEND_MODEL,
92
  "messages": payload_messages,