More jobs:
LVN/LPN
Job in
Rochester, Monroe County, New York, 14621, USA
Listed on 2026-01-21
Listing for:
vTech Solution, Inc.
Full Time
position Listed on 2026-01-21
Job specializations:
-
IT/Tech
Data Analyst, AI Engineer, Data Science Manager
Job Description & How to Apply Below
Job Summary:
te("/api/proposals//outline", methods=["GET"])
def _create_proposal_outline():
"""
GET /api/proposals//outline
• If outline exists → return cached version
• If not → generate, save, return
• Dynamic sections based on Fed / SLED
• Includes _contents
"""
try:
# 0 Check if outline already exists in DB
cached = db.collection("").where("proposal
Id", "==", ).get()
if cached:
doc = cached[0].()
outline = doc.get("outline")
outline["_contents"] = [s.get("") for s in outline.get("sections", [])]
return jsonify({
"proposal
Id": ,
"from Cache": True,
"outline": outline,
"saved
Id": cached[0].
}), 200
# 1 Load Proposal Document
snapshot = db.collection("proposals").document().get()
if not snapshot.exists:
return jsonify({"error": "Proposal not found"}), 404
proposal = snapshot.()
content = proposal.get("content", "") or ""
= proposal.get("title") or proposal.get("name", "")
# Normalize proposal type
= str(proposal.get("type", "")).strip().lower()
if == "fed":
= "Fed"
elif == "sled":
= "SLED"
else:
return jsonify({"error": f"Invalid type '{proposal.get('type')}'. Must be Fed or SLED."}), 400
# 2 Extract usable RFP text
files = proposal.get("files") or []
= content
if not and files:
= " ".join([(f.get("text Content") or "")[:100000] for f in files])
= _text()
# 3 LLM → Metadata Extraction
metadata = _from_rfp()
= metadata.get("opportunity
Name") or or "[Opportunity Name]"
= metadata.get("submitted
To") or "[Submitted To]"
= metadata.get("subject
Title") or "[Subject Title]"
poc = metadata.get("client
POC") or {}
= poc.get("name") or "[Client Name]"
= poc.get("title") or "[Client Title]"
= poc.get("email") or "[Client Email]"
= poc.get("phone") or "[Client Phone]"
# 4 Dynamic Section Builder (Fed / SLED)
= [
{"": "Executive Summary", "": "Provide 4-6 paragraphs summarizing."},
{"": "Technical Volume",
"": "Detailed technical approach.",
"subsections": [
{"": "3.1 Understanding of the Problem", "": "Discuss business challenges."},
{"": "3.2 Proposed Solution", "": "Solution details with bullets."},
{"": "3.3 Implementation Plan", "": "Timeline, phases, deliverables."}
]
},
{"": "Management Plan", "": "Governance, team, roles."},
{"": "Past Performance", "": "Case studies & references."}
]
= [
{"": "Executive Summary", "": "Provide 4-6 paragraphs summarizing."},
{"": "Technical Volume",
"": "Detailed technical approach.",
"subsections": [
{"": "3.1 Understanding of the Problem", "": "Discuss business challenges."},
{"": "3.2 Proposed Solution", "": "Solution details with bullets."},
{"": "3.3 Implementation Plan", "": "Timeline, phases, deliverables."}
]
},
{"": "Management Plan", "": "Governance, team, roles."},
{"": "Past Performance", "": "Case studies & references."}
]
= if == "Fed" else
# 5 Build Prompt to Generate Full Outline JSON
= f"""
You are a professional proposal generator. Return ONLY valid JSON. No markdown.
Generate a complete outline for a {} proposal.
Metadata:
Opportunity: {}
Submitted To: {}
Client POC: {} / {} / {} / {}
JSON Format:
{{
"": "{}",
"_name": "{}",
"_email": "{}",
"_phone": "{}",
"_date": "February 2025",
"_client_contact": "{}, {}, {}, {}",
"_subject_line": "{}",
"_body": "Create a full and professional cover letter.",
"": "{}",
"sections": {json.dumps(, indent=2)}
}}
"""
# 6 Call Azure Chat
= _chat(
"You are a JSON-only proposal writer.",
,
=10000,
temperature=0.0
)
= _from_text()
if not :
return jsonify({"error": "AI returned invalid JSON"}), 500
# 7 Build Table of Contents
toc = [s.get("") for s in .get("sections", [])]
["_contents"] = toc
# 8 Save outline to Firestore
now = datetime.now(timezone.utc)
= {
"proposal
Id": ,
"created
At": now,
"outline": ,
"proposal
Type":
}
_, = db.collection("").add()
# 9 Return Response
return jsonify({
"proposal
Id": ,
"proposal
Type": ,
"from Cache": False,
"saved
Id": ,
"outline":
}), 200
except Exception as e:
import traceback
print(traceback.())
return jsonify({"error": str(e)}), 500
# put
te("/api/proposals//outline", methods=["PUT"])
def _outline():
"""
PUT /api/proposals//outline
• Frontend sends edited outline
• Update existing Firestore document
• Auto-rebuild TOC
• Return updated version
"""
try:
data = request.()
if not data:
return jsonify({"error": "Missing JSON body"}), 400
# 1 Find existing outline record
query =…
To View & Apply for jobs on this site that accept applications from your location or country, tap the button below to make a Search.
(If this job is in fact in your jurisdiction, then you may be using a Proxy or VPN to access this site, and to progress further, you should change your connectivity to another mobile device or PC).
(If this job is in fact in your jurisdiction, then you may be using a Proxy or VPN to access this site, and to progress further, you should change your connectivity to another mobile device or PC).
Search for further Jobs Here:
×