I've been kind annoyed by how hard it is to find specific how-to guides on our little forum. We have some great content, but I find it hard to search, even using google. Maybe your google fu is stronger than mine, IDK. But w/o too much effort I extracted the links from the how-to subforum and attempted to classify them. My thinking was that it is easier to do a quick visual scan in a labeled subsection or a ctrl-F to find a specific word. Maybe I'm the only one who thinks so, I guess we'll see. At this point we don't get that much new content here so maintaining this shouldn't be super hard.
If you disagree with the classification of a topic, I can move it. Lots of topics span multiple categories, so I tried to go with the primary topic. Case in point is the guide on the 4WD light. Is that transfer case, electrical, lighting, or interior? I went with lighting, because I had to pick something. There are a bunch of others that weren't immediately obvious how to categorize, so I stuck them in the drunk drawer, confident that y'all would come out of the woodwork to tell me where they should be classified.
Anyway, I hope this helps. I know it will help me. And maybe it will save people from making duplicate how-to's. You probably didn't realize how many of those we had.
Enjoy, flame away.
I hope you're getting paid for this. If not, thank you.
Glad somebody finds it useful besides me.![]()
And since I'll probably wonder how I did this, or if somebody else wants to do better....
Python:import csv with open('scratch_1.txt') as file: csv_reader = csv.reader(file) print('[list]') for link in csv_reader: l = link[0] # the BBcode link needs the wranglertjforum domain prefix addr = l.replace('https://', '') # hygiene the human readable link s = l.replace('https://wranglertjforum.com/threads/', '') s = s.replace('-', ' ') s = s[:s.rfind('.')] print(f'[*][url="{addr}"]{s}[/url]') print('[/list]')
there is several mentioned in threads that here in the "How To" is the thread on increasing fuel tank capacity. Am probably blind and missed it.... does not seem to be listed in the index. least not under Fuel system. Did a generic search for Tank in the whole "How To" forum as well. Does not come up with it that either.
Thanks in advance.
I think that's actually just a regular thread in the main forum. With some effort it could probably find its way here.
Which reminds me, I need to go back and actually finish this project, including the part where it identifies new how to's.
65 processors:
66 - log:
67 level: INFO
68 message: 'OPENAI CALL (cache miss) thread_id=${! meta("thread_id") } title="${! meta("title") }"'
69
70 # tally 1 for every cache miss
71 - metric:
72 type: counter
73 name: tjforum_openai_calls_total
74 labels:
75 model: gpt-4o-mini
76 pipeline: tj_classification
77 value: 1
78
79
80 - mapping: |
81 let cats = [
82 "Axles/Differential","Body/Doors/Exterior","Brakes","Cooling","Electrical",
83 "Engine / Sensors","Frame","Fuel System","Hard top/Soft top","HVAC","Interior",
84 "Lifts/Tires","Lighting","PCM Related","Seats","Sound System","Steering/Suspension",
85 "Transfer Case","Transmission","Off-Road / Trail Mods","Odds & Ends"
86 ]
87 root = {
88 "title": meta("title"),
89 "message": meta("message"),
90 "allowed_categories": $cats
91 }
92
93 - openai_chat_completion:
94 api_key: ${OPENAI_API_KEY}
95 model: gpt-4o-mini
96 system_prompt: |
97 You classify Jeep Wrangler TJ how-to threads into exactly ONE primary category.
98 You MUST choose one from allowed_categories. "Odds & Ends" is acceptable.
99 prompt: |
100 Title: ${! json("title") }
101 Body: ${! json("message") }
102 Allowed categories: ${! json("allowed_categories").join(", ") }
103 Return JSON only.
104 response_format: json_schema
105 json_schema:
106 name: tj_primary_category
107 schema: |
108 {
109 "type":"object",
110 "additionalProperties":false,
111 "properties":{
112 "primary_category":{"type":"string"},
113 "confidence":{"type":"number","minimum":0,"maximum":1},
114 "rationale":{"type":"string"}
115 },
116 "required":["primary_category","confidence","rationale"]
117 }
118
rpk connect run cache_classification.yaml
INFO[2025-12-16T01:40:31-06:00] Running main config from specified file @service=redpanda-connect benthos_version=4.69.0 path=cache_classification.yaml
INFO[2025-12-16T01:40:31-06:00] Listening for HTTP requests at: http://0.0.0.0:4195 @service=redpanda-connect
INFO[2025-12-16T01:40:31-06:00] Successfully loaded Redpanda license @service=redpanda-connect expires_at="2028-01-13T12:51:19-06:00" license_org=cnelson license_type=enterprise
INFO[2025-12-16T01:40:31-06:00] Launching a Redpanda Connect instance, use CTRL+C to close @service=redpanda-connect
INFO[2025-12-16T01:40:31-06:00] Output type mongodb is now active @service=redpanda-connect label="" path=root.output.broker.outputs.1
INFO[2025-12-16T01:40:31-06:00] Output type kafka_franz is now active @service=redpanda-connect label="" path=root.output.broker.outputs.0
INFO[2025-12-16T01:40:31-06:00] Input type kafka_franz is now active @service=redpanda-connect label="" path=root.input
INFO[2025-12-16T01:40:36-06:00] OPENAI CALL (cache miss) thread_id=471 title="How to replace the heater core on a Jeep Wrangler TJ" @service=redpanda-connect custom_source=true label="" path=root.pipeline.processors.2.cached.processors.0
INFO[2025-12-16T01:40:36-06:00] OPENAI CALL (cache miss) thread_id=662 title="How to clean your IAC (Idle Air Controller) valve" @service=redpanda-connect custom_source=true label="" path=root.pipeline.processors.2.cached.processors.0
INFO[2025-12-16T01:40:36-06:00] OPENAI CALL (cache miss) thread_id=82 title="Diagnosing and Fixing Death Wobble" @service=redpanda-connect custom_source=true label="" path=root.pipeline.processors.2.cached.processors.0
INFO[2025-12-16T01:40:36-06:00] OPENAI CALL (cache miss) thread_id=85 title="How to align your Jeep Wrangler TJ" @service=redpanda-connect custom_source=true label="" path=root.pipeline.processors.2.cached.processors.0
And since threads without pictures are no good....
This is the raw topic, the output of the xenforo api call.
View attachment 660961
This is the relevant AI section of the Redpanda Connect AI pipeline:
YAML:65 processors: 66 - log: 67 level: INFO 68 message: 'OPENAI CALL (cache miss) thread_id=${! meta("thread_id") } title="${! meta("title") }"' 69 70 # tally 1 for every cache miss 71 - metric: 72 type: counter 73 name: tjforum_openai_calls_total 74 labels: 75 model: gpt-4o-mini 76 pipeline: tj_classification 77 value: 1 78 79 80 - mapping: | 81 let cats = [ 82 "Axles/Differential","Body/Doors/Exterior","Brakes","Cooling","Electrical", 83 "Engine / Sensors","Frame","Fuel System","Hard top/Soft top","HVAC","Interior", 84 "Lifts/Tires","Lighting","PCM Related","Seats","Sound System","Steering/Suspension", 85 "Transfer Case","Transmission","Off-Road / Trail Mods","Odds & Ends" 86 ] 87 root = { 88 "title": meta("title"), 89 "message": meta("message"), 90 "allowed_categories": $cats 91 } 92 93 - openai_chat_completion: 94 api_key: ${OPENAI_API_KEY} 95 model: gpt-4o-mini 96 system_prompt: | 97 You classify Jeep Wrangler TJ how-to threads into exactly ONE primary category. 98 You MUST choose one from allowed_categories. "Odds & Ends" is acceptable. 99 prompt: | 100 Title: ${! json("title") } 101 Body: ${! json("message") } 102 Allowed categories: ${! json("allowed_categories").join(", ") } 103 Return JSON only. 104 response_format: json_schema 105 json_schema: 106 name: tj_primary_category 107 schema: | 108 { 109 "type":"object", 110 "additionalProperties":false, 111 "properties":{ 112 "primary_category":{"type":"string"}, 113 "confidence":{"type":"number","minimum":0,"maximum":1}, 114 "rationale":{"type":"string"} 115 }, 116 "required":["primary_category","confidence","rationale"] 117 } 118
And then the logging output of that pipeline:
Code:rpk connect run cache_classification.yaml INFO[2025-12-16T01:40:31-06:00] Running main config from specified file @service=redpanda-connect benthos_version=4.69.0 path=cache_classification.yaml INFO[2025-12-16T01:40:31-06:00] Listening for HTTP requests at: http://0.0.0.0:4195 @service=redpanda-connect INFO[2025-12-16T01:40:31-06:00] Successfully loaded Redpanda license @service=redpanda-connect expires_at="2028-01-13T12:51:19-06:00" license_org=cnelson license_type=enterprise INFO[2025-12-16T01:40:31-06:00] Launching a Redpanda Connect instance, use CTRL+C to close @service=redpanda-connect INFO[2025-12-16T01:40:31-06:00] Output type mongodb is now active @service=redpanda-connect label="" path=root.output.broker.outputs.1 INFO[2025-12-16T01:40:31-06:00] Output type kafka_franz is now active @service=redpanda-connect label="" path=root.output.broker.outputs.0 INFO[2025-12-16T01:40:31-06:00] Input type kafka_franz is now active @service=redpanda-connect label="" path=root.input INFO[2025-12-16T01:40:36-06:00] OPENAI CALL (cache miss) thread_id=471 title="How to replace the heater core on a Jeep Wrangler TJ" @service=redpanda-connect custom_source=true label="" path=root.pipeline.processors.2.cached.processors.0 INFO[2025-12-16T01:40:36-06:00] OPENAI CALL (cache miss) thread_id=662 title="How to clean your IAC (Idle Air Controller) valve" @service=redpanda-connect custom_source=true label="" path=root.pipeline.processors.2.cached.processors.0 INFO[2025-12-16T01:40:36-06:00] OPENAI CALL (cache miss) thread_id=82 title="Diagnosing and Fixing Death Wobble" @service=redpanda-connect custom_source=true label="" path=root.pipeline.processors.2.cached.processors.0 INFO[2025-12-16T01:40:36-06:00] OPENAI CALL (cache miss) thread_id=85 title="How to align your Jeep Wrangler TJ" @service=redpanda-connect custom_source=true label="" path=root.pipeline.processors.2.cached.processors.0
And then the mongodb collection with the classified threads:
View attachment 660962
This is where I need all the people in that microprocessor thread to chime in. LOL
WHAT DID YOU CALL ME ?Thems fightin words.
You classify Jeep Wrangler TJ how-to threads into exactly ONE primary category.
You MUST choose exactly one from allowed_categories.
IMPORTANT: "Odds & Ends" is a last-resort category. Only choose it if none of the other categories reasonably fit.
If the thread is about a Jeep TJ modification, repair, maintenance task, troubleshooting, parts install, or upgrade,
you should almost always choose a more specific category than "Odds & Ends". Do not invent new categories.
Category guidance (apply if the category name exists in allowed_categories):
- "Off-Road / Trail Mods":
Use for modifications intended to improve off-road or trail capability/durability, including: lift,
bump stops, control arms, skid plates/armor, rock sliders,
bumpers/winch mounts, recovery points, winches, , lockers,
tummy tuck/high-clearance, articulation improvements, gear/tools storage.
Tie-breakers:
1) Prefer the category that matches the main task a reader would follow the how-to for.
2) If multiple categories could fit, choose the most specific one.
3) Do NOT choose "Odds & Ends" due to vagueness; pick the closest applicable category.
