Function bodies 269 total
CountrySpecialistAgent method · java · L46-L57 (12 LOC)src/main/java/com/matoe/agents/CountrySpecialistAgent.java
public CountrySpecialistAgent(BrowserAgentService browserService, LlmService llmService,
ObjectMapper objectMapper, PromptTemplateService promptTemplateService,
DynamicPromptService dynamicPromptService, LlmCostTrackingService costTracker,
SearchTargetService searchTargetService) {
this.browserService = browserService;
this.llmService = llmService;
this.objectMapper = objectMapper;
this.promptTemplateService = promptTemplateService;
this.dynamicPromptService = dynamicPromptService;
this.costTracker = costTracker;
this.searchTargetService = searchTargetService;
}init method · java · L60-L62 (3 LOC)src/main/java/com/matoe/agents/CountrySpecialistAgent.java
void init() {
dynamicPromptService.registerDefault("country-specialist", defaultPrompt);
}gatherRegionalInsights method · java · L64-L116 (53 LOC)src/main/java/com/matoe/agents/CountrySpecialistAgent.java
public Map<String, Object> gatherRegionalInsights(String destination, String modelString) {
if (modelString == null || modelString.isBlank()) modelString = defaultModel;
// ── primary: browser-use visits real tourism resources ──────────────
if (browserService.isAvailable()) {
try {
Map<String, Object> insights = browserService.browseForMap(
String.format("Research travel intelligence for %s. " +
"Find: best time to visit, local transit tips, cultural customs, " +
"safety advice, local currency, primary language(s), typical weather, " +
"local cuisine highlights, visa requirements, emergency contact numbers.",
destination),
searchTargetService.getSites("country-specialist", countrySites),
"JSON object with keys: bestTimeToVisit, localTransitRecommendation, " +
defaultInsights method · java · L118-L131 (14 LOC)src/main/java/com/matoe/agents/CountrySpecialistAgent.java
private Map<String, Object> defaultInsights(String destination) {
Map<String, Object> d = new HashMap<>();
d.put("bestTimeToVisit", "Spring or autumn for pleasant weather");
d.put("localTransitRecommendation", "Use public transport or rideshare apps");
d.put("culturalTips", "Research local customs before arriving");
d.put("safetyConsiderations", "Exercise standard travel precautions");
d.put("currency", "Check the local currency and exchange rates");
d.put("language", "English is widely spoken in tourist areas");
d.put("weatherExpectation", "Check forecast closer to travel date");
d.put("localCuisine", "Try local specialties at family-run restaurants");
d.put("visaRequirements", "Check visa requirements for your nationality before travel");
d.put("emergencyNumbers", "Research local emergency numbers (police, ambulance, fire)");
return d;
}resolveProvider method · java · L133-L140 (8 LOC)src/main/java/com/matoe/agents/CountrySpecialistAgent.java
private String resolveProvider(String model) {
if (model == null) return "anthropic";
if (model.startsWith("anthropic/")) return "anthropic";
if (model.startsWith("lmstudio/")) return "lmstudio";
if (model.startsWith("ollama/")) return "ollama";
if (model.startsWith("openrouter/")) return "openrouter";
return "unknown";
}CurrencyAgent class · java · L25-L114 (90 LOC)src/main/java/com/matoe/agents/CurrencyAgent.java
public class CurrencyAgent {
private static final Logger log = LoggerFactory.getLogger(CurrencyAgent.class);
private final BrowserAgentService browserService;
private final LlmService llmService;
private final ObjectMapper objectMapper;
private final PromptTemplateService promptTemplateService;
private final DynamicPromptService dynamicPromptService;
private final LlmCostTrackingService costTracker;
@Value("${travel-agency.prompts.currency-agent}")
private String defaultPrompt;
public CurrencyAgent(BrowserAgentService browserService, LlmService llmService,
ObjectMapper objectMapper, PromptTemplateService promptTemplateService,
DynamicPromptService dynamicPromptService, LlmCostTrackingService costTracker) {
this.browserService = browserService;
this.llmService = llmService;
this.objectMapper = objectMapper;
this.promptTemplateService = promptTemplateService;
CurrencyAgent method · java · L39-L48 (10 LOC)src/main/java/com/matoe/agents/CurrencyAgent.java
public CurrencyAgent(BrowserAgentService browserService, LlmService llmService,
ObjectMapper objectMapper, PromptTemplateService promptTemplateService,
DynamicPromptService dynamicPromptService, LlmCostTrackingService costTracker) {
this.browserService = browserService;
this.llmService = llmService;
this.objectMapper = objectMapper;
this.promptTemplateService = promptTemplateService;
this.dynamicPromptService = dynamicPromptService;
this.costTracker = costTracker;
}Repobility's GitHub App fixes findings like these · https://github.com/apps/repobility-bot
init method · java · L51-L53 (3 LOC)src/main/java/com/matoe/agents/CurrencyAgent.java
void init() {
dynamicPromptService.registerDefault("currency-agent", defaultPrompt);
}getCurrencyInfo method · java · L55-L90 (36 LOC)src/main/java/com/matoe/agents/CurrencyAgent.java
public Map<String, Object> getCurrencyInfo(TravelRequest request) {
String model = request.extractorModel();
try {
String systemPrompt = dynamicPromptService.getPrompt("currency-agent");
if (systemPrompt.isBlank()) systemPrompt = defaultPrompt;
String userPrompt = String.format(
"Provide currency and money-handling information for travelers visiting %s. " +
"Return a JSON object with keys: " +
"localCurrency (string, full name of currency), " +
"currencyCode (string, ISO 4217 code like 'EUR' or 'JPY'), " +
"exchangeRate (string, approximate rate vs USD like '1 USD = 0.92 EUR'), " +
"tippingCustoms (string, local tipping etiquette and expected percentages), " +
"atmAvailability (string, how easy it is to find ATMs and any fees to expect), " +
"cardAcceptance (string, how widely credit/debit cards are accdefaultCurrencyInfo method · java · L92-L102 (11 LOC)src/main/java/com/matoe/agents/CurrencyAgent.java
private Map<String, Object> defaultCurrencyInfo(String destination) {
Map<String, Object> d = new HashMap<>();
d.put("localCurrency", "Check the local currency for " + destination);
d.put("currencyCode", "N/A");
d.put("exchangeRate", "Check current exchange rates before travel");
d.put("tippingCustoms", "Research local tipping customs; 10-15% is common in many countries");
d.put("atmAvailability", "ATMs are generally available in urban areas; carry some cash for rural regions");
d.put("cardAcceptance", "Major credit cards are accepted in most tourist areas; carry cash as backup");
d.put("costOfLiving", "Research cost of living to plan daily spending budget");
return d;
}resolveProvider method · java · L104-L111 (8 LOC)src/main/java/com/matoe/agents/CurrencyAgent.java
private String resolveProvider(String model) {
if (model == null) return "anthropic";
if (model.startsWith("anthropic/")) return "anthropic";
if (model.startsWith("lmstudio/")) return "lmstudio";
if (model.startsWith("ollama/")) return "ollama";
if (model.startsWith("openrouter/")) return "openrouter";
return "unknown";
}FerryAgent class · java · L28-L158 (131 LOC)src/main/java/com/matoe/agents/FerryAgent.java
public class FerryAgent {
private static final Logger log = LoggerFactory.getLogger(FerryAgent.class);
private final BrowserAgentService browserService;
private final LlmService llmService;
private final ObjectMapper objectMapper;
private final PromptTemplateService promptTemplateService;
private final DynamicPromptService dynamicPromptService;
private final LlmCostTrackingService costTracker;
private final SearchTargetService searchTargetService;
@Value("${travel-agency.prompts.ferry-agent}")
private String defaultPrompt;
@Value("${travel-agency.browser.ferry-sites:directferries.com,aferry.com}")
private String ferrySites;
public FerryAgent(BrowserAgentService browserService, LlmService llmService,
ObjectMapper objectMapper, PromptTemplateService promptTemplateService,
DynamicPromptService dynamicPromptService, LlmCostTrackingService costTracker,
SearchTargetServiFerryAgent method · java · L46-L59 (14 LOC)src/main/java/com/matoe/agents/FerryAgent.java
public FerryAgent(BrowserAgentService browserService, LlmService llmService,
ObjectMapper objectMapper, PromptTemplateService promptTemplateService,
DynamicPromptService dynamicPromptService, LlmCostTrackingService costTracker,
SearchTargetService searchTargetService) {
this.browserService = browserService;
this.llmService = llmService;
this.objectMapper = objectMapper;
this.promptTemplateService = promptTemplateService;
this.dynamicPromptService = dynamicPromptService;
this.costTracker = costTracker;
this.searchTargetService = searchTargetService;
// Register YAML default (DB version will override if set by admin)
dynamicPromptService.registerDefault("ferry-agent", "");
}init method · java · L62-L64 (3 LOC)src/main/java/com/matoe/agents/FerryAgent.java
void init() {
dynamicPromptService.registerDefault("ferry-agent", defaultPrompt);
}searchFerries method · java · L66-L114 (49 LOC)src/main/java/com/matoe/agents/FerryAgent.java
public List<TransportOption> searchFerries(TravelRequest request) {
long days = ChronoUnit.DAYS.between(request.startDate(), request.endDate());
if (days <= 0) days = 1;
String model = request.extractorModel();
// -- primary: real browser search --
if (browserService.isAvailable()) {
try {
List<Map<String, Object>> raw = browserService.browseForList(
buildBrowserTask(request, days),
searchTargetService.getSites("ferry-agent", ferrySites),
"a JSON array of ferry route objects each with: operator (string), " +
"departureTime (HH:mm), arrivalTime (HH:mm), duration (string), " +
"price (per person, number), bookingUrl (string), cabinType (string), " +
"origin (string), destination (string)",
model
);
if (raw != null && !raw.isEmpty()) {
Repobility · code-quality intelligence · https://repobility.com
buildBrowserTask method · java · L116-L128 (13 LOC)src/main/java/com/matoe/agents/FerryAgent.java
private String buildBrowserTask(TravelRequest request, long days) {
return String.format(
"Search for 3-5 ferry routes for %d passengers from %s to %s, " +
"departing %s. Trip duration: %d days. Max budget per person: approx. %.0f EUR. " +
"Include both deck passage and cabin options if available. " +
"For each ferry get: operator, departure time, arrival time, duration, " +
"price per person, booking URL, cabin type.",
request.guestCount(),
request.originCity().isEmpty() ? "nearest ferry port" : request.originCity(),
request.destination(),
request.startDate(), days, request.budgetMax()
);
}map method · java · L130-L141 (12 LOC)src/main/java/com/matoe/agents/FerryAgent.java
private TransportOption map(Map<String, Object> m, String source, TravelRequest request) {
double price = num(m, "price");
String tier = price < 50 ? "budget" : price > 200 ? "luxury" : "standard";
return new TransportOption(
UUID.randomUUID().toString(), "ferry",
str(m, "operator"), str(m, "departureTime"), str(m, "arrivalTime"),
str(m, "duration"), price, 0,
str(m, "bookingUrl"), tier, source,
str(m, "origin").isEmpty() ? request.originCity() : str(m, "origin"),
str(m, "destination").isEmpty() ? request.destination() : str(m, "destination")
);
}num method · java · L143-L145 (3 LOC)src/main/java/com/matoe/agents/FerryAgent.java
private double num(Map<String, Object> m, String key) {
Object v = m.get(key); return v instanceof Number n ? n.doubleValue() : 0.0;
}str method · java · L146-L148 (3 LOC)src/main/java/com/matoe/agents/FerryAgent.java
private String str(Map<String, Object> m, String key) {
Object v = m.get(key); return v != null ? v.toString() : "";
}resolveProvider method · java · L149-L156 (8 LOC)src/main/java/com/matoe/agents/FerryAgent.java
private String resolveProvider(String model) {
if (model == null) return "anthropic";
if (model.startsWith("anthropic/")) return "anthropic";
if (model.startsWith("lmstudio/")) return "lmstudio";
if (model.startsWith("ollama/")) return "ollama";
if (model.startsWith("openrouter/")) return "openrouter";
return "unknown";
}FlightAgent class · java · L27-L154 (128 LOC)src/main/java/com/matoe/agents/FlightAgent.java
public class FlightAgent {
private static final Logger log = LoggerFactory.getLogger(FlightAgent.class);
private final BrowserAgentService browserService;
private final LlmService llmService;
private final ObjectMapper objectMapper;
private final PromptTemplateService promptTemplateService;
private final DynamicPromptService dynamicPromptService;
private final LlmCostTrackingService costTracker;
private final SearchTargetService searchTargetService;
@Value("${travel-agency.prompts.flight-agent}")
private String defaultPrompt;
@Value("${travel-agency.browser.flight-sites:skyscanner.com,google.com/flights,kayak.com}")
private String flightSites;
public FlightAgent(BrowserAgentService browserService, LlmService llmService,
ObjectMapper objectMapper, PromptTemplateService promptTemplateService,
DynamicPromptService dynamicPromptService, LlmCostTrackingService costTracker,
FlightAgent method · java · L45-L58 (14 LOC)src/main/java/com/matoe/agents/FlightAgent.java
public FlightAgent(BrowserAgentService browserService, LlmService llmService,
ObjectMapper objectMapper, PromptTemplateService promptTemplateService,
DynamicPromptService dynamicPromptService, LlmCostTrackingService costTracker,
SearchTargetService searchTargetService) {
this.browserService = browserService;
this.llmService = llmService;
this.objectMapper = objectMapper;
this.promptTemplateService = promptTemplateService;
this.dynamicPromptService = dynamicPromptService;
this.costTracker = costTracker;
this.searchTargetService = searchTargetService;
// Register YAML default (DB version will override if set by admin)
dynamicPromptService.registerDefault("flight-agent", "");
}init method · java · L61-L63 (3 LOC)src/main/java/com/matoe/agents/FlightAgent.java
void init() {
dynamicPromptService.registerDefault("flight-agent", defaultPrompt);
}Generated by Repobility's multi-pass static-analysis pipeline (https://repobility.com)
searchFlights method · java · L65-L110 (46 LOC)src/main/java/com/matoe/agents/FlightAgent.java
public List<TransportOption> searchFlights(TravelRequest request) {
String model = request.extractorModel();
// -- primary: real browser search --
if (browserService.isAvailable()) {
try {
List<Map<String, Object>> raw = browserService.browseForList(
buildBrowserTask(request),
searchTargetService.getSites("flight-agent", flightSites),
"a JSON array of flight objects each with: airline (string), departureTime (HH:mm), " +
"arrivalTime (HH:mm), duration (e.g. '2h 30m'), stops (integer), " +
"price (per person, number), bookingUrl (string), origin (string), destination (string)",
model
);
if (raw != null && !raw.isEmpty()) {
log.info("FlightAgent: {} results via browser for {}", raw.size(), request.destination());
return raw.stream().map(m -> mbuildBrowserTask method · java · L112-L123 (12 LOC)src/main/java/com/matoe/agents/FlightAgent.java
private String buildBrowserTask(TravelRequest request) {
return String.format(
"Search for 4-6 flights for %d passengers from %s to %s, " +
"departing %s returning %s. Max budget per person: approx. %.0f EUR. " +
"Include budget and premium options. " +
"For each flight get: airline, departure time, arrival time, duration, stops, price per person, booking URL.",
request.guestCount(),
request.originCity().isEmpty() ? "nearest major airport" : request.originCity(),
request.destination(),
request.startDate(), request.endDate(), request.budgetMax()
);
}map method · java · L125-L137 (13 LOC)src/main/java/com/matoe/agents/FlightAgent.java
private TransportOption map(Map<String, Object> m, String source, TravelRequest request) {
double price = num(m, "price");
String tier = price < 150 ? "budget" : price > 500 ? "luxury" : "standard";
return new TransportOption(
UUID.randomUUID().toString(), "flight",
str(m, "airline"), str(m, "departureTime"), str(m, "arrivalTime"),
str(m, "duration"), price,
((Number) m.getOrDefault("stops", 0)).intValue(),
str(m, "bookingUrl"), tier, source,
str(m, "origin").isEmpty() ? request.originCity() : str(m, "origin"),
str(m, "destination").isEmpty() ? request.destination() : str(m, "destination")
);
}num method · java · L139-L141 (3 LOC)src/main/java/com/matoe/agents/FlightAgent.java
private double num(Map<String, Object> m, String key) {
Object v = m.get(key); return v instanceof Number n ? n.doubleValue() : 0.0;
}str method · java · L142-L144 (3 LOC)src/main/java/com/matoe/agents/FlightAgent.java
private String str(Map<String, Object> m, String key) {
Object v = m.get(key); return v != null ? v.toString() : "";
}resolveProvider method · java · L145-L152 (8 LOC)src/main/java/com/matoe/agents/FlightAgent.java
private String resolveProvider(String model) {
if (model == null) return "anthropic";
if (model.startsWith("anthropic/")) return "anthropic";
if (model.startsWith("lmstudio/")) return "lmstudio";
if (model.startsWith("ollama/")) return "ollama";
if (model.startsWith("openrouter/")) return "openrouter";
return "unknown";
}HostelAgent class · java · L27-L155 (129 LOC)src/main/java/com/matoe/agents/HostelAgent.java
public class HostelAgent {
private static final Logger log = LoggerFactory.getLogger(HostelAgent.class);
private final BrowserAgentService browserService;
private final LlmService llmService;
private final ObjectMapper objectMapper;
private final PromptTemplateService promptTemplateService;
private final DynamicPromptService dynamicPromptService;
private final LlmCostTrackingService costTracker;
private final SearchTargetService searchTargetService;
@Value("${travel-agency.prompts.hostel-agent}")
private String defaultPrompt;
@Value("${travel-agency.browser.hostel-sites:hostelworld.com,booking.com}")
private String hostelSites;
public HostelAgent(BrowserAgentService browserService, LlmService llmService,
ObjectMapper objectMapper, PromptTemplateService promptTemplateService,
DynamicPromptService dynamicPromptService, LlmCostTrackingService costTracker,
SearchTarHostelAgent method · java · L45-L58 (14 LOC)src/main/java/com/matoe/agents/HostelAgent.java
public HostelAgent(BrowserAgentService browserService, LlmService llmService,
ObjectMapper objectMapper, PromptTemplateService promptTemplateService,
DynamicPromptService dynamicPromptService, LlmCostTrackingService costTracker,
SearchTargetService searchTargetService) {
this.browserService = browserService;
this.llmService = llmService;
this.objectMapper = objectMapper;
this.promptTemplateService = promptTemplateService;
this.dynamicPromptService = dynamicPromptService;
this.costTracker = costTracker;
this.searchTargetService = searchTargetService;
// Register YAML default (DB version will override if set by admin)
dynamicPromptService.registerDefault("hostel-agent", "");
}All rows scored by the Repobility analyzer (https://repobility.com)
init method · java · L61-L63 (3 LOC)src/main/java/com/matoe/agents/HostelAgent.java
void init() {
dynamicPromptService.registerDefault("hostel-agent", defaultPrompt);
}searchHostels method · java · L65-L111 (47 LOC)src/main/java/com/matoe/agents/HostelAgent.java
public List<AccommodationOption> searchHostels(TravelRequest request) {
long nights = request.nights();
String model = request.extractorModel();
// ── primary: real browser search ─────────────────────────────────────
if (browserService.isAvailable()) {
try {
List<Map<String, Object>> raw = browserService.browseForList(
buildBrowserTask(request, nights),
searchTargetService.getSites("hostel-agent", hostelSites),
"a JSON array of hostel objects each with: name, pricePerNight (number), " +
"totalPrice (number), rating (number 1-5), location (string), " +
"amenities (array of strings), bookingUrl (string)",
model
);
if (raw != null && !raw.isEmpty()) {
log.info("HostelAgent: {} results via browser for {}", raw.size(), request.destination());
buildBrowserTask method · java · L113-L123 (11 LOC)src/main/java/com/matoe/agents/HostelAgent.java
private String buildBrowserTask(TravelRequest request, long nights) {
return String.format(
"Find 3-5 hostels or budget accommodation in %s for %d guests, " +
"check-in %s, check-out %s (%d nights). " +
"Budget: \u20ac%.0f\u2013\u20ac%.0f total. Travel style: %s. " +
"For each get: name, price per night, total price, rating, neighborhood, amenities, booking URL.",
request.destination(), request.guestCount(),
request.startDate(), request.endDate(), nights,
request.budgetMin(), request.budgetMax(), request.travelStyle()
);
}map method · java · L125-L135 (11 LOC)src/main/java/com/matoe/agents/HostelAgent.java
private AccommodationOption map(Map<String, Object> m, long nights, String source) {
double ppn = num(m, "pricePerNight");
double tot = num(m, "totalPrice", ppn * nights);
double avgPpn = nights > 0 ? tot / nights : ppn;
String tier = avgPpn < 30 ? "budget" : avgPpn > 80 ? "luxury" : "standard";
return new AccommodationOption(
UUID.randomUUID().toString(), "hostel", str(m, "name"), ppn, tot,
num(m, "rating"), str(m, "location"), toStringList(m.get("amenities")),
str(m, "bookingUrl"), tier, source, str(m, "imageUrl")
);
}toStringList method · java · L143-L145 (3 LOC)src/main/java/com/matoe/agents/HostelAgent.java
private List<String> toStringList(Object v) {
if (v instanceof List<?> l) return l.stream().map(Object::toString).collect(Collectors.toList());
return List.of(); }resolveProvider method · java · L146-L153 (8 LOC)src/main/java/com/matoe/agents/HostelAgent.java
private String resolveProvider(String model) {
if (model == null) return "anthropic";
if (model.startsWith("anthropic/")) return "anthropic";
if (model.startsWith("lmstudio/")) return "lmstudio";
if (model.startsWith("ollama/")) return "ollama";
if (model.startsWith("openrouter/")) return "openrouter";
return "unknown";
}HotelAgent class · java · L27-L154 (128 LOC)src/main/java/com/matoe/agents/HotelAgent.java
public class HotelAgent {
private static final Logger log = LoggerFactory.getLogger(HotelAgent.class);
private final BrowserAgentService browserService;
private final LlmService llmService;
private final ObjectMapper objectMapper;
private final PromptTemplateService promptTemplateService;
private final DynamicPromptService dynamicPromptService;
private final LlmCostTrackingService costTracker;
private final SearchTargetService searchTargetService;
@Value("${travel-agency.prompts.hotel-agent}")
private String defaultPrompt;
@Value("${travel-agency.browser.hotel-sites:booking.com,hotels.com,expedia.com}")
private String hotelSites;
public HotelAgent(BrowserAgentService browserService, LlmService llmService,
ObjectMapper objectMapper, PromptTemplateService promptTemplateService,
DynamicPromptService dynamicPromptService, LlmCostTrackingService costTracker,
SearchTargeHotelAgent method · java · L45-L58 (14 LOC)src/main/java/com/matoe/agents/HotelAgent.java
public HotelAgent(BrowserAgentService browserService, LlmService llmService,
ObjectMapper objectMapper, PromptTemplateService promptTemplateService,
DynamicPromptService dynamicPromptService, LlmCostTrackingService costTracker,
SearchTargetService searchTargetService) {
this.browserService = browserService;
this.llmService = llmService;
this.objectMapper = objectMapper;
this.promptTemplateService = promptTemplateService;
this.dynamicPromptService = dynamicPromptService;
this.costTracker = costTracker;
this.searchTargetService = searchTargetService;
// Register YAML default (DB version will override if set by admin)
dynamicPromptService.registerDefault("hotel-agent", "");
}Repobility's GitHub App fixes findings like these · https://github.com/apps/repobility-bot
init method · java · L61-L63 (3 LOC)src/main/java/com/matoe/agents/HotelAgent.java
void init() {
dynamicPromptService.registerDefault("hotel-agent", defaultPrompt);
}searchHotels method · java · L65-L111 (47 LOC)src/main/java/com/matoe/agents/HotelAgent.java
public List<AccommodationOption> searchHotels(TravelRequest request) {
long nights = request.nights();
String model = request.extractorModel();
// ── primary: real browser search ─────────────────────────────────────
if (browserService.isAvailable()) {
try {
List<Map<String, Object>> raw = browserService.browseForList(
buildBrowserTask(request, nights),
searchTargetService.getSites("hotel-agent", hotelSites),
"a JSON array of hotel objects each with: name, pricePerNight (number), " +
"totalPrice (number), rating (number 1-5), location (string), " +
"amenities (array of strings), bookingUrl (string)",
model
);
if (raw != null && !raw.isEmpty()) {
log.info("HotelAgent: {} results via browser for {}", raw.size(), request.destination());
buildBrowserTask method · java · L113-L122 (10 LOC)src/main/java/com/matoe/agents/HotelAgent.java
private String buildBrowserTask(TravelRequest request, long nights) {
return String.format(
"Search for 4-6 hotels in %s for %d guests, check-in %s, check-out %s (%d nights). " +
"Budget: €%.0f–€%.0f total. Travel style: %s. " +
"For each hotel get: name, price per night, total price, star rating, neighborhood, amenities, booking URL.",
request.destination(), request.guestCount(),
request.startDate(), request.endDate(), nights,
request.budgetMin(), request.budgetMax(), request.travelStyle()
);
}map method · java · L124-L134 (11 LOC)src/main/java/com/matoe/agents/HotelAgent.java
private AccommodationOption map(Map<String, Object> m, long nights, String source) {
double ppn = num(m, "pricePerNight");
double tot = num(m, "totalPrice", ppn * nights);
double avgPpn = nights > 0 ? tot / nights : ppn;
String tier = avgPpn < 100 ? "budget" : avgPpn > 250 ? "luxury" : "standard";
return new AccommodationOption(
UUID.randomUUID().toString(), "hotel", str(m, "name"), ppn, tot,
num(m, "rating"), str(m, "location"), toStringList(m.get("amenities")),
str(m, "bookingUrl"), tier, source, str(m, "imageUrl")
);
}toStringList method · java · L142-L144 (3 LOC)src/main/java/com/matoe/agents/HotelAgent.java
private List<String> toStringList(Object v) {
if (v instanceof List<?> l) return l.stream().map(Object::toString).collect(Collectors.toList());
return List.of(); }resolveProvider method · java · L145-L152 (8 LOC)src/main/java/com/matoe/agents/HotelAgent.java
private String resolveProvider(String model) {
if (model == null) return "anthropic";
if (model.startsWith("anthropic/")) return "anthropic";
if (model.startsWith("lmstudio/")) return "lmstudio";
if (model.startsWith("ollama/")) return "ollama";
if (model.startsWith("openrouter/")) return "openrouter";
return "unknown";
}OrchestratorAgent class · java · L25-L302 (278 LOC)src/main/java/com/matoe/agents/OrchestratorAgent.java
public class OrchestratorAgent {
private static final Logger log = LoggerFactory.getLogger(OrchestratorAgent.class);
private final LlmService llmService;
private final ObjectMapper objectMapper;
private final DynamicPromptService dynamicPromptService;
private final LlmCostTrackingService costTracker;
@Value("${travel-agency.prompts.orchestrator}")
private String defaultPrompt;
public OrchestratorAgent(LlmService llmService, ObjectMapper objectMapper,
DynamicPromptService dynamicPromptService,
LlmCostTrackingService costTracker) {
this.llmService = llmService;
this.objectMapper = objectMapper;
this.dynamicPromptService = dynamicPromptService;
this.costTracker = costTracker;
}
@jakarta.annotation.PostConstruct
void init() {
dynamicPromptService.registerDefault("orchestrator", defaultPrompt);
}
/**
* Synthesize the final itineraryOrchestratorAgent method · java · L37-L44 (8 LOC)src/main/java/com/matoe/agents/OrchestratorAgent.java
public OrchestratorAgent(LlmService llmService, ObjectMapper objectMapper,
DynamicPromptService dynamicPromptService,
LlmCostTrackingService costTracker) {
this.llmService = llmService;
this.objectMapper = objectMapper;
this.dynamicPromptService = dynamicPromptService;
this.costTracker = costTracker;
}Repobility · code-quality intelligence · https://repobility.com
init method · java · L47-L49 (3 LOC)src/main/java/com/matoe/agents/OrchestratorAgent.java
void init() {
dynamicPromptService.registerDefault("orchestrator", defaultPrompt);
}synthesizeItinerary method · java · L55-L121 (67 LOC)src/main/java/com/matoe/agents/OrchestratorAgent.java
public UnforgettableItinerary synthesizeItinerary(
TravelRequest request,
List<AccommodationOption> accommodations,
List<TransportOption> transport,
List<AttractionOption> attractions,
Map<String, Object> regionInsights,
Map<String, Object> weatherForecast,
Map<String, Object> currencyInfo) {
String model = request.orchestratorModel();
if (model == null || model.isBlank()) model = "anthropic/claude-3-5-sonnet";
// Build the synthesis prompt with all gathered data
String systemPrompt = dynamicPromptService.getPrompt("orchestrator");
if (systemPrompt.isBlank()) systemPrompt = defaultPrompt;
String userPrompt = buildSynthesisPrompt(request, accommodations, transport,
attractions, regionInsights, weatherForecast, currencyInfo);
List<ItineraryVariant> variants = List.of();
try {
long start = System.currentTimeMillbuildSynthesisPrompt method · java · L123-L196 (74 LOC)src/main/java/com/matoe/agents/OrchestratorAgent.java
private String buildSynthesisPrompt(TravelRequest request,
List<AccommodationOption> accommodations, List<TransportOption> transport,
List<AttractionOption> attractions, Map<String, Object> insights,
Map<String, Object> weather, Map<String, Object> currency) {
StringBuilder sb = new StringBuilder();
sb.append("Plan a ").append(request.nights()).append("-day trip to ").append(request.destination());
sb.append(" for ").append(request.guestCount()).append(" guests, ");
sb.append(request.startDate()).append(" to ").append(request.endDate()).append(".\n");
sb.append("Budget: €").append(String.format("%.0f", request.budgetMin()));
sb.append("–€").append(String.format("%.0f", request.budgetMax())).append(" total.\n");
sb.append("Travel style preference: ").append(request.travelStyle()).append(".\n\n");
if (insights != null && !insights.isEmpty()) {
sb.append("=== REGIONAL INSI