|
16 | 16 | import json |
17 | 17 | import logging |
18 | 18 | import time |
19 | | -import uuid |
20 | 19 | from dataclasses import dataclass |
21 | 20 | from typing import Any, AsyncGenerator, Dict, List |
22 | 21 |
|
23 | 22 | from sqlalchemy.ext.asyncio import AsyncSession |
24 | 23 |
|
25 | 24 | from aperag.db.ops import AsyncDatabaseOps, async_db_ops |
26 | | -from aperag.flow.engine import FlowEngine |
27 | | -from aperag.flow.parser import FlowParser |
28 | 25 |
|
29 | 26 | logger = logging.getLogger(__name__) |
30 | 27 |
|
@@ -117,58 +114,11 @@ async def stream_openai_sse_response(self, generator: AsyncGenerator[str, None], |
117 | 114 | yield f"data: {json.dumps(formatter.format_stream_end(msg_id))}\n\n" |
118 | 115 |
|
119 | 116 | async def openai_chat_completions(self, user, body_data, query_params): |
120 | | - """Handle OpenAI-compatible chat completions""" |
121 | | - bot_id = query_params.get("bot_id") or query_params.get("app_id") |
122 | | - if not bot_id: |
123 | | - return None, OpenAIFormatter.format_error("bot_id is required") |
124 | | - |
125 | | - api_request = APIRequest( |
126 | | - user=user, |
127 | | - bot_id=bot_id, |
128 | | - msg_id=str(uuid.uuid4()), |
129 | | - stream=body_data.get("stream", False), |
130 | | - messages=body_data.get("messages", []), |
| 117 | + """Handle OpenAI-compatible chat completions - Not implemented""" |
| 118 | + return None, OpenAIFormatter.format_error( |
| 119 | + "The /v1/chat/completions endpoint is not implemented. Please use WebSocket API for agent-type bots." |
131 | 120 | ) |
132 | 121 |
|
133 | | - bot = await self.db_ops.query_bot(api_request.user, api_request.bot_id) |
134 | | - if not bot: |
135 | | - return None, OpenAIFormatter.format_error("Bot not found") |
136 | | - |
137 | | - formatter = OpenAIFormatter() |
138 | | - |
139 | | - # Get bot's flow configuration |
140 | | - bot_config = json.loads(bot.config or "{}") |
141 | | - flow_config = bot_config.get("flow") |
142 | | - if not flow_config: |
143 | | - return None, OpenAIFormatter.format_error("Bot flow config not found") |
144 | | - |
145 | | - flow = FlowParser.parse(flow_config) |
146 | | - engine = FlowEngine() |
147 | | - initial_data = { |
148 | | - "query": api_request.messages[-1]["content"], |
149 | | - "user": api_request.user, |
150 | | - "message_id": api_request.msg_id, |
151 | | - } |
152 | | - |
153 | | - try: |
154 | | - _, system_outputs = await engine.execute_flow(flow, initial_data) |
155 | | - logger.info("Flow executed successfully!") |
156 | | - except Exception as e: |
157 | | - logger.exception(e) |
158 | | - return None, OpenAIFormatter.format_error(str(e)) |
159 | | - |
160 | | - async_generator = None |
161 | | - nodes = engine.find_end_nodes(flow) |
162 | | - for node in nodes: |
163 | | - async_generator = system_outputs[node].get("async_generator") |
164 | | - if async_generator: |
165 | | - break |
166 | | - |
167 | | - if not async_generator: |
168 | | - return None, OpenAIFormatter.format_error("No output node found") |
169 | | - |
170 | | - return (api_request, formatter, async_generator), None |
171 | | - |
172 | 122 |
|
173 | 123 | # Create a global service instance for easy access |
174 | 124 | # This uses the global db_ops instance and doesn't require session management in views |
|
0 commit comments