← back to debrockb__embabel-debrock

Function bodies 269 total

All specs Real LLM only Function bodies
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 acc
defaultCurrencyInfo 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,
                      SearchTargetServi
FerryAgent 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 -> m
buildBrowserTask 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,
                       SearchTar
HostelAgent 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,
                      SearchTarge
HotelAgent 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 itinerary
OrchestratorAgent 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.currentTimeMill
buildSynthesisPrompt 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
‹ prevpage 2 / 6next ›