feat: add api
This commit is contained in:
parent
dca17c862c
commit
a4c2bfa97e
@ -14,7 +14,7 @@ from fastapi.middleware.cors import CORSMiddleware
|
|||||||
from llm import stream_openai_response
|
from llm import stream_openai_response
|
||||||
from mock import mock_completion
|
from mock import mock_completion
|
||||||
from image_generation import create_alt_url_mapping, generate_images
|
from image_generation import create_alt_url_mapping, generate_images
|
||||||
from prompts import assemble_prompt
|
from prompts import assemble_prompt, assemble_instruction_generation_prompt
|
||||||
from routes import screenshot
|
from routes import screenshot
|
||||||
|
|
||||||
app = FastAPI(openapi_url=None, docs_url=None, redoc_url=None)
|
app = FastAPI(openapi_url=None, docs_url=None, redoc_url=None)
|
||||||
@ -149,3 +149,64 @@ async def stream_code(websocket: WebSocket):
|
|||||||
)
|
)
|
||||||
finally:
|
finally:
|
||||||
await websocket.close()
|
await websocket.close()
|
||||||
|
|
||||||
|
|
||||||
|
@app.websocket("/generate-instruction")
|
||||||
|
async def stream_code(websocket: WebSocket):
|
||||||
|
await websocket.accept()
|
||||||
|
|
||||||
|
params = await websocket.receive_json()
|
||||||
|
|
||||||
|
# Get the OpenAI API key from the request. Fall back to environment variable if not provided.
|
||||||
|
# If neither is provided, we throw an error.
|
||||||
|
if params["openAiApiKey"]:
|
||||||
|
openai_api_key = params["openAiApiKey"]
|
||||||
|
print("Using OpenAI API key from client-side settings dialog")
|
||||||
|
else:
|
||||||
|
openai_api_key = os.environ.get("OPENAI_API_KEY")
|
||||||
|
if openai_api_key:
|
||||||
|
print("Using OpenAI API key from environment variable")
|
||||||
|
|
||||||
|
if not openai_api_key:
|
||||||
|
print("OpenAI API key not found")
|
||||||
|
await websocket.send_json(
|
||||||
|
{
|
||||||
|
"type": "error",
|
||||||
|
"value": "No OpenAI API key found. Please add your API key in the settings dialog or add it to backend/.env file.",
|
||||||
|
}
|
||||||
|
)
|
||||||
|
return
|
||||||
|
|
||||||
|
print("generating code...")
|
||||||
|
await websocket.send_json({"type": "status", "value": "Generating instruction..."})
|
||||||
|
|
||||||
|
async def process_chunk(content):
|
||||||
|
await websocket.send_json({"type": "chunk", "value": content})
|
||||||
|
|
||||||
|
prompt_messages = assemble_instruction_generation_prompt(params["image"], params["resultImage"])
|
||||||
|
|
||||||
|
if SHOULD_MOCK_AI_RESPONSE:
|
||||||
|
completion = await mock_completion(process_chunk)
|
||||||
|
else:
|
||||||
|
completion = await stream_openai_response(
|
||||||
|
prompt_messages,
|
||||||
|
api_key=openai_api_key,
|
||||||
|
callback=lambda x: process_chunk(x),
|
||||||
|
)
|
||||||
|
|
||||||
|
# Write the messages dict into a log so that we can debug later
|
||||||
|
write_logs(prompt_messages, completion)
|
||||||
|
|
||||||
|
try:
|
||||||
|
await websocket.send_json({"type": "setInstruction", "value": completion})
|
||||||
|
await websocket.send_json(
|
||||||
|
{"type": "status", "value": "Instruction generation complete."}
|
||||||
|
)
|
||||||
|
except Exception as e:
|
||||||
|
traceback.print_exc()
|
||||||
|
await websocket.send_json(
|
||||||
|
{"type": "status", "value": "Instruction generation failed."}
|
||||||
|
)
|
||||||
|
finally:
|
||||||
|
await websocket.close()
|
||||||
|
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user