CKT
commited on
Commit
·
3f6f4f8
1
Parent(s):
9bfdb4b
e2e tested
Browse files- app.py +19 -19
- data/messages.json +32 -0
- data/profiles.json +44 -0
app.py
CHANGED
|
@@ -100,8 +100,8 @@ def profile_questionnaire(request: gr.Request):
|
|
| 100 |
# Decide how to handle this error - maybe return an error to the client?
|
| 101 |
|
| 102 |
# 4. Return IDs, questionnaire data, and instructions
|
| 103 |
-
instructions_for_agent = "You have received a `profile_id` (public identifier for this user\'s profile) and an `auth_id` (private key for authentication for this user). Please ask the user to store both securely. The `auth_id` must be sent as an `X-Auth-ID` header in subsequent requests that require authentication for this user (e.g., `update_profile_answers`, `get_matches`, `get_messages`, `get_profile` for own profile, `send_message`). The `profile_id` is used to publicly identify this user to others (e.g., in matches, or when sending/receiving messages)."
|
| 104 |
-
instructions_for_user = "Your profile creation process has started! You\'ve been assigned a unique Profile ID and a secret Auth ID. Your AI agent will use these to manage your profile and interactions."
|
| 105 |
|
| 106 |
return {
|
| 107 |
"profile_id": profile_id,
|
|
@@ -200,30 +200,30 @@ def get_matches(request: gr.Request):
|
|
| 200 |
if not requester_profile_id:
|
| 201 |
return {"status": "error", "message": "Authentication failed: Invalid X-Auth-ID."}
|
| 202 |
|
| 203 |
-
|
| 204 |
-
|
| 205 |
-
|
|
|
|
|
|
|
| 206 |
|
| 207 |
-
# Randomly select up to 3 matches
|
| 208 |
-
num_matches = min(len(
|
| 209 |
-
|
| 210 |
|
| 211 |
matches_list = []
|
| 212 |
-
for
|
| 213 |
-
|
| 214 |
-
|
| 215 |
-
|
| 216 |
-
|
| 217 |
-
|
| 218 |
-
|
| 219 |
-
"profile_image_filename": match_profile.get("profile_image_filename")
|
| 220 |
-
})
|
| 221 |
|
| 222 |
return {
|
| 223 |
"status": "success",
|
| 224 |
"matches": matches_list,
|
| 225 |
-
"instructions_for_agent": "You have received a list of matches. For each match, you can call `get_profile` using their `profile_id` to get more details
|
| 226 |
-
"instructions_for_user": "Here are some potential matches! Your AI agent can get more details on them or help you send a message."
|
| 227 |
}
|
| 228 |
|
| 229 |
def get_profile(profile_id_to_get: str, request: gr.Request):
|
|
|
|
| 100 |
# Decide how to handle this error - maybe return an error to the client?
|
| 101 |
|
| 102 |
# 4. Return IDs, questionnaire data, and instructions
|
| 103 |
+
instructions_for_agent = "You have received a `profile_id` (public identifier for this user\'s profile) and an `auth_id` (private key for authentication for this user). Please ask the user to store both securely. The `auth_id` must be sent as an `X-Auth-ID` header in subsequent requests that require authentication for this user (e.g., `update_profile_answers`, `get_matches`, `get_messages`, `get_profile` for own profile, `send_message`). The `profile_id` is used to publicly identify this user to others (e.g., in matches, or when sending/receiving messages). You must now walk the user through the questionnaire, preferably question by question, and collect the answers (in preparation to update the user's profile using update_profile_answers)."
|
| 104 |
+
instructions_for_user = "Your profile creation process has started! You\'ve been assigned a unique Profile ID and a secret Auth ID. Your AI agent will use these to manage your profile and interactions. You must now walk through the questionnaire, preferably question by question, and provide your answers."
|
| 105 |
|
| 106 |
return {
|
| 107 |
"profile_id": profile_id,
|
|
|
|
| 200 |
if not requester_profile_id:
|
| 201 |
return {"status": "error", "message": "Authentication failed: Invalid X-Auth-ID."}
|
| 202 |
|
| 203 |
+
# Filter for potential matches: not the user themselves, and have a non-blank name.
|
| 204 |
+
potential_matches_profiles = [
|
| 205 |
+
profile for pid, profile in profiles.items()
|
| 206 |
+
if pid != requester_profile_id and profile.get("name")
|
| 207 |
+
]
|
| 208 |
|
| 209 |
+
# Randomly select up to 3 matches from the filtered list
|
| 210 |
+
num_matches = min(len(potential_matches_profiles), 3)
|
| 211 |
+
selected_matches = random.sample(potential_matches_profiles, k=num_matches)
|
| 212 |
|
| 213 |
matches_list = []
|
| 214 |
+
for match_profile in selected_matches:
|
| 215 |
+
matches_list.append({
|
| 216 |
+
"profile_id": match_profile.get("profile_id"),
|
| 217 |
+
"name": match_profile.get("name"),
|
| 218 |
+
"profile_summary": match_profile.get("profile_summary"),
|
| 219 |
+
"profile_image_filename": match_profile.get("profile_image_filename")
|
| 220 |
+
})
|
|
|
|
|
|
|
| 221 |
|
| 222 |
return {
|
| 223 |
"status": "success",
|
| 224 |
"matches": matches_list,
|
| 225 |
+
"instructions_for_agent": "You have received a list of matches. For each match, you can call `get_profile` using their `profile_id` to get more details. You can also use `send_message` to send a message to a match's `profile_id`.",
|
| 226 |
+
"instructions_for_user": "Here are some potential matches! Your AI agent can get more details on them ($0.10 per profile) or help you send a message ($1.00 per message). Or, if you don't like any of your matches, you can call `get_matches` again to get a new list."
|
| 227 |
}
|
| 228 |
|
| 229 |
def get_profile(profile_id_to_get: str, request: gr.Request):
|
data/messages.json
CHANGED
|
@@ -23,5 +23,37 @@
|
|
| 23 |
"timestamp": "2025-06-06T06:44:02.018941+00:00",
|
| 24 |
"read_status": true,
|
| 25 |
"payment_confirmation_id": "not_provided"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 26 |
}
|
| 27 |
]
|
|
|
|
| 23 |
"timestamp": "2025-06-06T06:44:02.018941+00:00",
|
| 24 |
"read_status": true,
|
| 25 |
"payment_confirmation_id": "not_provided"
|
| 26 |
+
},
|
| 27 |
+
{
|
| 28 |
+
"message_id": "e5cb586f-f664-40d5-812b-527a700477f0",
|
| 29 |
+
"sender_profile_id": "user_y38k71ox",
|
| 30 |
+
"receiver_profile_id": "user_t2ysgmnp",
|
| 31 |
+
"content": "Hey Charlie",
|
| 32 |
+
"timestamp": "2025-06-06T07:10:46.319365+00:00",
|
| 33 |
+
"read_status": true
|
| 34 |
+
},
|
| 35 |
+
{
|
| 36 |
+
"message_id": "d4cda280-99bc-4960-9419-0daf71c48c78",
|
| 37 |
+
"sender_profile_id": "user_y38k71ox",
|
| 38 |
+
"receiver_profile_id": "user_t2ysgmnp",
|
| 39 |
+
"content": "Hey Charlie",
|
| 40 |
+
"timestamp": "2025-06-06T07:13:28.067145+00:00",
|
| 41 |
+
"read_status": true
|
| 42 |
+
},
|
| 43 |
+
{
|
| 44 |
+
"message_id": "f5ae4191-ddc9-430d-a5a9-0498e3dee627",
|
| 45 |
+
"sender_profile_id": "user_y38k71ox",
|
| 46 |
+
"receiver_profile_id": "user_t2ysgmnp",
|
| 47 |
+
"content": "Hey Charlie",
|
| 48 |
+
"timestamp": "2025-06-06T07:16:10.584026+00:00",
|
| 49 |
+
"read_status": true
|
| 50 |
+
},
|
| 51 |
+
{
|
| 52 |
+
"message_id": "3d565b74-a0b2-4006-b501-b83637a180f4",
|
| 53 |
+
"sender_profile_id": "user_1p6vx64b",
|
| 54 |
+
"receiver_profile_id": "user_t2ysgmnp",
|
| 55 |
+
"content": "Hey Charlie",
|
| 56 |
+
"timestamp": "2025-06-06T07:18:28.078347+00:00",
|
| 57 |
+
"read_status": true
|
| 58 |
}
|
| 59 |
]
|
data/profiles.json
CHANGED
|
@@ -64,5 +64,49 @@
|
|
| 64 |
"q_looking_for": "A partner-in-crime for game nights and tech talks.",
|
| 65 |
"q_vibe": "Geeky and friendly."
|
| 66 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 67 |
}
|
| 68 |
}
|
|
|
|
| 64 |
"q_looking_for": "A partner-in-crime for game nights and tech talks.",
|
| 65 |
"q_vibe": "Geeky and friendly."
|
| 66 |
}
|
| 67 |
+
},
|
| 68 |
+
"user_gq61ow1v": {
|
| 69 |
+
"profile_id": "user_gq61ow1v",
|
| 70 |
+
"auth_id": "2e30881b-4dbb-46cf-a35a-c08e408e1c26",
|
| 71 |
+
"created_at": "2025-06-06T06:56:50.622902+00:00",
|
| 72 |
+
"updated_at": "2025-06-06T06:56:50.622902+00:00",
|
| 73 |
+
"name": "",
|
| 74 |
+
"profile_image_filename": null,
|
| 75 |
+
"profile_summary": "",
|
| 76 |
+
"answers": {}
|
| 77 |
+
},
|
| 78 |
+
"user_1p6vx64b": {
|
| 79 |
+
"profile_id": "user_1p6vx64b",
|
| 80 |
+
"auth_id": "1a824149-5ddc-4489-8856-0c774042b538",
|
| 81 |
+
"created_at": "2025-06-06T07:00:38.209630+00:00",
|
| 82 |
+
"updated_at": "2025-06-06T07:04:31.734665+00:00",
|
| 83 |
+
"name": "Chris",
|
| 84 |
+
"profile_image_filename": "placeholder.png",
|
| 85 |
+
"profile_summary": "I am a fun guy.",
|
| 86 |
+
"answers": {
|
| 87 |
+
"q_hobby": "I like to play video games.",
|
| 88 |
+
"q_looking_for": "Someone to play video games with.",
|
| 89 |
+
"q_vibe": "Homebody."
|
| 90 |
+
}
|
| 91 |
+
},
|
| 92 |
+
"user_fx0tg6yb": {
|
| 93 |
+
"profile_id": "user_fx0tg6yb",
|
| 94 |
+
"auth_id": "19d5a977-7402-43ff-99a2-23f7e091bc79",
|
| 95 |
+
"created_at": "2025-06-06T07:30:26.098125+00:00",
|
| 96 |
+
"updated_at": "2025-06-06T07:30:26.098125+00:00",
|
| 97 |
+
"name": "",
|
| 98 |
+
"profile_image_filename": null,
|
| 99 |
+
"profile_summary": "",
|
| 100 |
+
"answers": {}
|
| 101 |
+
},
|
| 102 |
+
"user_u1d6b1mw": {
|
| 103 |
+
"profile_id": "user_u1d6b1mw",
|
| 104 |
+
"auth_id": "1a4033ff-d4a6-436f-883b-a81bc48caabb",
|
| 105 |
+
"created_at": "2025-06-06T07:30:39.861151+00:00",
|
| 106 |
+
"updated_at": "2025-06-06T07:30:39.861151+00:00",
|
| 107 |
+
"name": "",
|
| 108 |
+
"profile_image_filename": null,
|
| 109 |
+
"profile_summary": "",
|
| 110 |
+
"answers": {}
|
| 111 |
}
|
| 112 |
}
|