mirror of
https://github.com/aaronpo97/the-biergarten-app.git
synced 2026-06-01 01:54:00 +00:00
1 line
31 KiB
XML
1 line
31 KiB
XML
<?plantuml 1.2026.2?><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" contentStyleType="text/css" data-diagram-type="CLASS" height="1057px" preserveAspectRatio="none" style="width:1661px;height:1057px;background:#FAFCF9;" version="1.1" viewBox="0 0 1661 1057" width="1661px" zoomAndPan="magnify"><title>The Biergarten Data Pipeline - Class Diagram</title><defs/><g><rect fill="#FAFCF9" height="1057" style="stroke:none;stroke-width:1;" width="1661" x="0" y="0"/><g class="title" data-source-line="25"><text fill="#28342A" font-family="'Volkhov'" font-size="20" font-weight="bold" lengthAdjust="spacing" textLength="443.18" x="602.086" y="29.42">The Biergarten Data Pipeline - Class Diagram</text></g><!--class BiergartenDataGenerator--><g class="entity" data-qualified-name="BiergartenDataGenerator" data-source-line="27" id="ent0002"><rect fill="#FAFCF9" height="171.824" rx="2.5" ry="2.5" style="stroke:#547461;stroke-width:0.5;" width="441.7737" x="549.42" y="53.8"/><rect fill="#EAF0E8" height="28.228" rx="2.5" ry="2.5" style="stroke:#EAF0E8;stroke-width:0.5;" width="441.7737" x="549.42" y="53.8"/><rect fill="#EAF0E8" height="2.5" style="stroke:#EAF0E8;stroke-width:0.5;" width="441.7737" x="549.42" y="79.528"/><rect fill="none" height="171.824" rx="2.5" ry="2.5" style="stroke:#547461;stroke-width:0.5;" width="441.7737" x="549.42" y="53.8"/><text fill="#28342A" font-family="'DM Sans'" font-size="14" lengthAdjust="spacing" textLength="163.6743" x="688.4697" y="72.688">BiergartenDataGenerator</text><line style="stroke:#547461;stroke-width:0.5;" x1="550.42" x2="990.1937" y1="82.028" y2="82.028"/><g data-visibility-modifier="PRIVATE_FIELD"><rect fill="none" height="6" style="stroke:#C82930;stroke-width:1;" width="6" x="557.42" y="93.642"/></g><text fill="#28342A" font-family="'DM Sans'" font-size="14" lengthAdjust="spacing" textLength="366.6779" x="568.42" y="99.916">context_service_ : std::unique_ptr<IEnrichmentService></text><g data-visibility-modifier="PRIVATE_FIELD"><rect fill="none" height="6" style="stroke:#C82930;stroke-width:1;" width="6" x="557.42" y="111.87"/></g><text fill="#28342A" font-family="'DM Sans'" font-size="14" lengthAdjust="spacing" textLength="294.8859" x="568.42" y="118.144">generator_ : std::unique_ptr<DataGenerator></text><g data-visibility-modifier="PRIVATE_FIELD"><rect fill="none" height="6" style="stroke:#C82930;stroke-width:1;" width="6" x="557.42" y="130.098"/></g><text fill="#28342A" font-family="'DM Sans'" font-size="14" lengthAdjust="spacing" textLength="366.9547" x="568.42" y="136.372">generated_breweries_ : std::vector<GeneratedBrewery></text><line style="stroke:#547461;stroke-width:0.5;" x1="550.42" x2="990.1937" y1="144.712" y2="144.712"/><g data-visibility-modifier="PUBLIC_METHOD"><ellipse cx="560.42" cy="159.326" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/></g><text fill="#28342A" font-family="'DM Sans'" font-size="14" lengthAdjust="spacing" textLength="73.5806" x="568.42" y="162.6">Run() : bool</text><g data-visibility-modifier="PRIVATE_METHOD"><rect fill="#F24D5C" height="6" style="stroke:#C82930;stroke-width:1;" width="6" x="557.42" y="174.554"/></g><text fill="#28342A" font-family="'DM Sans'" font-size="14" lengthAdjust="spacing" textLength="332.658" x="568.42" y="180.828">QueryCitiesWithCountries() : std::vector<Location></text><g data-visibility-modifier="PRIVATE_METHOD"><rect fill="#F24D5C" height="6" style="stroke:#C82930;stroke-width:1;" width="6" x="557.42" y="192.782"/></g><text fill="#28342A" font-family="'DM Sans'" font-size="14" lengthAdjust="spacing" textLength="416.7737" x="568.42" y="199.056">GenerateBreweries(cities : std::span<const EnrichedCity>) : void</text><g data-visibility-modifier="PRIVATE_METHOD"><rect fill="#F24D5C" height="6" style="stroke:#C82930;stroke-width:1;" width="6" x="557.42" y="211.01"/></g><text fill="#28342A" font-family="'DM Sans'" font-size="14" lengthAdjust="spacing" textLength="118.9687" x="568.42" y="217.284">LogResults() : void</text></g><!--class IEnrichmentService--><g class="entity" data-qualified-name="IEnrichmentService" data-source-line="37" id="ent0003"><rect fill="#FAFCF9" height="80.684" rx="2.5" ry="2.5" style="stroke:#547461;stroke-width:0.5;" width="379.3302" x="28.64" y="314.74"/><rect fill="#EAF0E8" height="46.456" rx="2.5" ry="2.5" style="stroke:#EAF0E8;stroke-width:0.5;" width="379.3302" x="28.64" y="314.74"/><rect fill="#EAF0E8" height="2.5" style="stroke:#EAF0E8;stroke-width:0.5;" width="379.3302" x="28.64" y="358.696"/><rect fill="none" height="80.684" rx="2.5" ry="2.5" style="stroke:#547461;stroke-width:0.5;" width="379.3302" x="28.64" y="314.74"/><text fill="#28342A" font-family="DM Sans" font-size="14" font-style="italic" lengthAdjust="spacing" textLength="71.148" x="182.7311" y="333.628">«interface»</text><text fill="#28342A" font-family="'DM Sans'" font-size="14" font-style="italic" lengthAdjust="spacing" textLength="125.692" x="155.4591" y="351.856">IEnrichmentService</text><line style="stroke:#547461;stroke-width:0.5;" x1="29.64" x2="406.9702" y1="361.196" y2="361.196"/><line style="stroke:#547461;stroke-width:0.5;" x1="29.64" x2="406.9702" y1="369.196" y2="369.196"/><g data-visibility-modifier="PUBLIC_METHOD"><ellipse cx="39.64" cy="383.81" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/></g><text fill="#28342A" font-family="'DM Sans'" font-size="14" lengthAdjust="spacing" textLength="354.3302" x="47.64" y="387.084">GetLocationContext(loc : const Location&) : std::string</text></g><!--class WikipediaService--><g class="entity" data-qualified-name="WikipediaService" data-source-line="41" id="ent0004"><rect fill="#FAFCF9" height="117.14" rx="2.5" ry="2.5" style="stroke:#547461;stroke-width:0.5;" width="422.6147" x="7" y="539.22"/><rect fill="#EAF0E8" height="28.228" rx="2.5" ry="2.5" style="stroke:#EAF0E8;stroke-width:0.5;" width="422.6147" x="7" y="539.22"/><rect fill="#EAF0E8" height="2.5" style="stroke:#EAF0E8;stroke-width:0.5;" width="422.6147" x="7" y="564.948"/><rect fill="none" height="117.14" rx="2.5" ry="2.5" style="stroke:#547461;stroke-width:0.5;" width="422.6147" x="7" y="539.22"/><text fill="#28342A" font-family="'DM Sans'" font-size="14" lengthAdjust="spacing" textLength="111.7306" x="162.442" y="558.108">WikipediaService</text><line style="stroke:#547461;stroke-width:0.5;" x1="8" x2="428.6147" y1="567.448" y2="567.448"/><g data-visibility-modifier="PRIVATE_FIELD"><rect fill="none" height="6" style="stroke:#C82930;stroke-width:1;" width="6" x="15" y="579.062"/></g><text fill="#28342A" font-family="'DM Sans'" font-size="14" lengthAdjust="spacing" textLength="238.9101" x="26" y="585.336">client_ : std::unique_ptr<WebClient></text><g data-visibility-modifier="PRIVATE_FIELD"><rect fill="none" height="6" style="stroke:#C82930;stroke-width:1;" width="6" x="15" y="597.29"/></g><text fill="#28342A" font-family="'DM Sans'" font-size="14" lengthAdjust="spacing" textLength="397.6147" x="26" y="603.564">extract_cache_ : std::unordered_map<std::string, std::string></text><line style="stroke:#547461;stroke-width:0.5;" x1="8" x2="428.6147" y1="611.904" y2="611.904"/><g data-visibility-modifier="PUBLIC_METHOD"><ellipse cx="18" cy="626.518" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/></g><text fill="#28342A" font-family="'DM Sans'" font-size="14" lengthAdjust="spacing" textLength="354.3302" x="26" y="629.792">GetLocationContext(loc : const Location&) : std::string</text><g data-visibility-modifier="PRIVATE_METHOD"><rect fill="#F24D5C" height="6" style="stroke:#C82930;stroke-width:1;" width="6" x="15" y="641.746"/></g><text fill="#28342A" font-family="'DM Sans'" font-size="14" lengthAdjust="spacing" textLength="318.5638" x="26" y="648.02">FetchExtract(query : std::string_view) : std::string</text></g><!--class WebClient--><g class="entity" data-qualified-name="WebClient" data-source-line="48" id="ent0005"><rect fill="#FAFCF9" height="98.912" rx="2.5" ry="2.5" style="stroke:#547461;stroke-width:0.5;" width="335.0342" x="50.79" y="791.04"/><rect fill="#EAF0E8" height="46.456" rx="2.5" ry="2.5" style="stroke:#EAF0E8;stroke-width:0.5;" width="335.0342" x="50.79" y="791.04"/><rect fill="#EAF0E8" height="2.5" style="stroke:#EAF0E8;stroke-width:0.5;" width="335.0342" x="50.79" y="834.996"/><rect fill="none" height="98.912" rx="2.5" ry="2.5" style="stroke:#547461;stroke-width:0.5;" width="335.0342" x="50.79" y="791.04"/><text fill="#28342A" font-family="DM Sans" font-size="14" font-style="italic" lengthAdjust="spacing" textLength="71.148" x="182.7331" y="809.928">«interface»</text><text fill="#28342A" font-family="'DM Sans'" font-size="14" font-style="italic" lengthAdjust="spacing" textLength="68.222" x="184.1961" y="828.156">WebClient</text><line style="stroke:#547461;stroke-width:0.5;" x1="51.79" x2="384.8242" y1="837.496" y2="837.496"/><line style="stroke:#547461;stroke-width:0.5;" x1="51.79" x2="384.8242" y1="845.496" y2="845.496"/><g data-visibility-modifier="PUBLIC_METHOD"><ellipse cx="61.79" cy="860.11" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/></g><text fill="#28342A" font-family="'DM Sans'" font-size="14" lengthAdjust="spacing" textLength="249.8552" x="69.79" y="863.384">Get(url : const std::string&) : std::string</text><g data-visibility-modifier="PUBLIC_METHOD"><ellipse cx="61.79" cy="878.338" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/></g><text fill="#28342A" font-family="'DM Sans'" font-size="14" lengthAdjust="spacing" textLength="310.0342" x="69.79" y="881.612">UrlEncode(value : const std::string&) : std::string</text></g><!--class CURLWebClient--><g class="entity" data-qualified-name="CURLWebClient" data-source-line="53" id="ent0006"><rect fill="#FAFCF9" height="80.684" rx="2.5" ry="2.5" style="stroke:#547461;stroke-width:0.5;" width="335.0342" x="50.79" y="969.96"/><rect fill="#EAF0E8" height="28.228" rx="2.5" ry="2.5" style="stroke:#EAF0E8;stroke-width:0.5;" width="335.0342" x="50.79" y="969.96"/><rect fill="#EAF0E8" height="2.5" style="stroke:#EAF0E8;stroke-width:0.5;" width="335.0342" x="50.79" y="995.688"/><rect fill="none" height="80.684" rx="2.5" ry="2.5" style="stroke:#547461;stroke-width:0.5;" width="335.0342" x="50.79" y="969.96"/><text fill="#28342A" font-family="'DM Sans'" font-size="14" lengthAdjust="spacing" textLength="103.1695" x="166.7223" y="988.848">CURLWebClient</text><line style="stroke:#547461;stroke-width:0.5;" x1="51.79" x2="384.8242" y1="998.188" y2="998.188"/><line style="stroke:#547461;stroke-width:0.5;" x1="51.79" x2="384.8242" y1="1006.188" y2="1006.188"/><g data-visibility-modifier="PUBLIC_METHOD"><ellipse cx="61.79" cy="1020.802" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/></g><text fill="#28342A" font-family="'DM Sans'" font-size="14" lengthAdjust="spacing" textLength="249.8552" x="69.79" y="1024.076">Get(url : const std::string&) : std::string</text><g data-visibility-modifier="PUBLIC_METHOD"><ellipse cx="61.79" cy="1039.03" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/></g><text fill="#28342A" font-family="'DM Sans'" font-size="14" lengthAdjust="spacing" textLength="310.0342" x="69.79" y="1042.304">UrlEncode(value : const std::string&) : std::string</text></g><!--class DataGenerator--><g class="entity" data-qualified-name="DataGenerator" data-source-line="58" id="ent0007"><rect fill="#FAFCF9" height="98.912" rx="2.5" ry="2.5" style="stroke:#547461;stroke-width:0.5;" width="653.8885" x="443.36" y="305.62"/><rect fill="#EAF0E8" height="46.456" rx="2.5" ry="2.5" style="stroke:#EAF0E8;stroke-width:0.5;" width="653.8885" x="443.36" y="305.62"/><rect fill="#EAF0E8" height="2.5" style="stroke:#EAF0E8;stroke-width:0.5;" width="653.8885" x="443.36" y="349.576"/><rect fill="none" height="98.912" rx="2.5" ry="2.5" style="stroke:#547461;stroke-width:0.5;" width="653.8885" x="443.36" y="305.62"/><text fill="#28342A" font-family="DM Sans" font-size="14" font-style="italic" lengthAdjust="spacing" textLength="71.148" x="734.7302" y="324.508">«interface»</text><text fill="#28342A" font-family="'DM Sans'" font-size="14" font-style="italic" lengthAdjust="spacing" textLength="97.062" x="721.7732" y="342.736">DataGenerator</text><line style="stroke:#547461;stroke-width:0.5;" x1="444.36" x2="1096.2485" y1="352.076" y2="352.076"/><line style="stroke:#547461;stroke-width:0.5;" x1="444.36" x2="1096.2485" y1="360.076" y2="360.076"/><g data-visibility-modifier="PUBLIC_METHOD"><ellipse cx="454.36" cy="374.69" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/></g><text fill="#28342A" font-family="'DM Sans'" font-size="14" lengthAdjust="spacing" textLength="628.8885" x="462.36" y="377.964">GenerateBrewery(location : const Location&, region_context : const std::string&) : BreweryResult</text><g data-visibility-modifier="PUBLIC_METHOD"><ellipse cx="454.36" cy="392.918" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/></g><text fill="#28342A" font-family="'DM Sans'" font-size="14" lengthAdjust="spacing" textLength="343.1897" x="462.36" y="396.192">GenerateUser(locale : const std::string&) : UserResult</text></g><!--class MockGenerator--><g class="entity" data-qualified-name="MockGenerator" data-source-line="63" id="ent0008"><rect fill="#FAFCF9" height="98.912" rx="2.5" ry="2.5" style="stroke:#547461;stroke-width:0.5;" width="374.5106" x="465.05" y="548.33"/><rect fill="#EAF0E8" height="28.228" rx="2.5" ry="2.5" style="stroke:#EAF0E8;stroke-width:0.5;" width="374.5106" x="465.05" y="548.33"/><rect fill="#EAF0E8" height="2.5" style="stroke:#EAF0E8;stroke-width:0.5;" width="374.5106" x="465.05" y="574.058"/><rect fill="none" height="98.912" rx="2.5" ry="2.5" style="stroke:#547461;stroke-width:0.5;" width="374.5106" x="465.05" y="548.33"/><text fill="#28342A" font-family="'DM Sans'" font-size="14" lengthAdjust="spacing" textLength="101.4686" x="601.571" y="567.218">MockGenerator</text><line style="stroke:#547461;stroke-width:0.5;" x1="466.05" x2="838.5606" y1="576.558" y2="576.558"/><line style="stroke:#547461;stroke-width:0.5;" x1="466.05" x2="838.5606" y1="584.558" y2="584.558"/><g data-visibility-modifier="PUBLIC_METHOD"><ellipse cx="476.05" cy="599.172" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/></g><text fill="#28342A" font-family="'DM Sans'" font-size="14" lengthAdjust="spacing" textLength="236.0966" x="484.05" y="602.446">GenerateBrewery(...) : BreweryResult</text><g data-visibility-modifier="PUBLIC_METHOD"><ellipse cx="476.05" cy="617.4" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/></g><text fill="#28342A" font-family="'DM Sans'" font-size="14" lengthAdjust="spacing" textLength="188.4403" x="484.05" y="620.674">GenerateUser(...) : UserResult</text><g data-visibility-modifier="PRIVATE_METHOD"><rect fill="#F24D5C" height="6" style="stroke:#C82930;stroke-width:1;" width="6" x="473.05" y="632.628"/></g><text fill="#28342A" font-family="'DM Sans'" font-size="14" lengthAdjust="spacing" textLength="349.5106" x="484.05" y="638.902">DeterministicHash(location : const Location&) : size_t</text></g><!--class LlamaGenerator--><g class="entity" data-qualified-name="LlamaGenerator" data-source-line="69" id="ent0009"><rect fill="#FAFCF9" height="226.508" rx="2.5" ry="2.5" style="stroke:#547461;stroke-width:0.5;" width="397.138" x="874.74" y="484.54"/><rect fill="#EAF0E8" height="28.228" rx="2.5" ry="2.5" style="stroke:#EAF0E8;stroke-width:0.5;" width="397.138" x="874.74" y="484.54"/><rect fill="#EAF0E8" height="2.5" style="stroke:#EAF0E8;stroke-width:0.5;" width="397.138" x="874.74" y="510.268"/><rect fill="none" height="226.508" rx="2.5" ry="2.5" style="stroke:#547461;stroke-width:0.5;" width="397.138" x="874.74" y="484.54"/><text fill="#28342A" font-family="'DM Sans'" font-size="14" lengthAdjust="spacing" textLength="104.5242" x="1021.0469" y="503.428">LlamaGenerator</text><line style="stroke:#547461;stroke-width:0.5;" x1="875.74" x2="1270.878" y1="512.768" y2="512.768"/><g data-visibility-modifier="PRIVATE_FIELD"><rect fill="none" height="6" style="stroke:#C82930;stroke-width:1;" width="6" x="882.74" y="524.382"/></g><text fill="#28342A" font-family="'DM Sans'" font-size="14" lengthAdjust="spacing" textLength="145.1239" x="893.74" y="530.656">model_ : ModelHandle</text><g data-visibility-modifier="PRIVATE_FIELD"><rect fill="none" height="6" style="stroke:#C82930;stroke-width:1;" width="6" x="882.74" y="542.61"/></g><text fill="#28342A" font-family="'DM Sans'" font-size="14" lengthAdjust="spacing" textLength="167.0061" x="893.74" y="548.884">context_ : ContextHandle</text><g data-visibility-modifier="PRIVATE_FIELD"><rect fill="none" height="6" style="stroke:#C82930;stroke-width:1;" width="6" x="882.74" y="560.838"/></g><text fill="#28342A" font-family="'DM Sans'" font-size="14" lengthAdjust="spacing" textLength="372.138" x="893.74" y="567.112">prompt_formatter_ : std::unique_ptr<IPromptFormatter></text><g data-visibility-modifier="PRIVATE_FIELD"><rect fill="none" height="6" style="stroke:#C82930;stroke-width:1;" width="6" x="882.74" y="579.066"/></g><text fill="#28342A" font-family="'DM Sans'" font-size="14" lengthAdjust="spacing" textLength="123.1442" x="893.74" y="585.34">rng_ : std::mt19937</text><line style="stroke:#547461;stroke-width:0.5;" x1="875.74" x2="1270.878" y1="593.68" y2="593.68"/><g data-visibility-modifier="PUBLIC_METHOD"><ellipse cx="885.74" cy="608.294" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/></g><text fill="#28342A" font-family="'DM Sans'" font-size="14" lengthAdjust="spacing" textLength="236.0966" x="893.74" y="611.568">GenerateBrewery(...) : BreweryResult</text><g data-visibility-modifier="PUBLIC_METHOD"><ellipse cx="885.74" cy="626.522" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/></g><text fill="#28342A" font-family="'DM Sans'" font-size="14" lengthAdjust="spacing" textLength="188.4403" x="893.74" y="629.796">GenerateUser(...) : UserResult</text><g data-visibility-modifier="PRIVATE_METHOD"><rect fill="#F24D5C" height="6" style="stroke:#C82930;stroke-width:1;" width="6" x="882.74" y="641.75"/></g><text fill="#28342A" font-family="'DM Sans'" font-size="14" lengthAdjust="spacing" textLength="285.3309" x="893.74" y="648.024">Load(model_path : const std::string&) : void</text><g data-visibility-modifier="PRIVATE_METHOD"><rect fill="#F24D5C" height="6" style="stroke:#C82930;stroke-width:1;" width="6" x="882.74" y="659.978"/></g><text fill="#28342A" font-family="'DM Sans'" font-size="14" lengthAdjust="spacing" textLength="122.0454" x="893.74" y="666.252">Infer(...) : std::string</text><g data-visibility-modifier="PRIVATE_METHOD"><rect fill="#F24D5C" height="6" style="stroke:#C82930;stroke-width:1;" width="6" x="882.74" y="678.206"/></g><text fill="#28342A" font-family="'DM Sans'" font-size="14" lengthAdjust="spacing" textLength="190.817" x="893.74" y="684.48">InferFormatted(...) : std::string</text><g data-visibility-modifier="PRIVATE_METHOD"><rect fill="#F24D5C" height="6" style="stroke:#C82930;stroke-width:1;" width="6" x="882.74" y="696.434"/></g><text fill="#28342A" font-family="'DM Sans'" font-size="14" lengthAdjust="spacing" textLength="275.2861" x="893.74" y="702.708">LoadBrewerySystemPrompt(...) : std::string</text></g><!--class IPromptFormatter--><g class="entity" data-qualified-name="IPromptFormatter" data-source-line="82" id="ent0010"><rect fill="#FAFCF9" height="80.684" rx="2.5" ry="2.5" style="stroke:#547461;stroke-width:0.5;" width="580.1605" x="783.23" y="800.16"/><rect fill="#EAF0E8" height="46.456" rx="2.5" ry="2.5" style="stroke:#EAF0E8;stroke-width:0.5;" width="580.1605" x="783.23" y="800.16"/><rect fill="#EAF0E8" height="2.5" style="stroke:#EAF0E8;stroke-width:0.5;" width="580.1605" x="783.23" y="844.116"/><rect fill="none" height="80.684" rx="2.5" ry="2.5" style="stroke:#547461;stroke-width:0.5;" width="580.1605" x="783.23" y="800.16"/><text fill="#28342A" font-family="DM Sans" font-size="14" font-style="italic" lengthAdjust="spacing" textLength="71.148" x="1037.7363" y="819.048">«interface»</text><text fill="#28342A" font-family="'DM Sans'" font-size="14" font-style="italic" lengthAdjust="spacing" textLength="116.48" x="1015.0703" y="837.276">IPromptFormatter</text><line style="stroke:#547461;stroke-width:0.5;" x1="784.23" x2="1362.3905" y1="846.616" y2="846.616"/><line style="stroke:#547461;stroke-width:0.5;" x1="784.23" x2="1362.3905" y1="854.616" y2="854.616"/><g data-visibility-modifier="PUBLIC_METHOD"><ellipse cx="794.23" cy="869.23" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/></g><text fill="#28342A" font-family="'DM Sans'" font-size="14" lengthAdjust="spacing" textLength="555.1605" x="802.23" y="872.504">Format(system_prompt : std::string_view, user_prompt : std::string_view) : std::string</text></g><!--class Gemma4JinjaPromptFormatter--><g class="entity" data-qualified-name="Gemma4JinjaPromptFormatter" data-source-line="86" id="ent0011"><rect fill="#FAFCF9" height="62.456" rx="2.5" ry="2.5" style="stroke:#547461;stroke-width:0.5;" width="580.1605" x="783.23" y="979.07"/><rect fill="#EAF0E8" height="28.228" rx="2.5" ry="2.5" style="stroke:#EAF0E8;stroke-width:0.5;" width="580.1605" x="783.23" y="979.07"/><rect fill="#EAF0E8" height="2.5" style="stroke:#EAF0E8;stroke-width:0.5;" width="580.1605" x="783.23" y="1004.798"/><rect fill="none" height="62.456" rx="2.5" ry="2.5" style="stroke:#547461;stroke-width:0.5;" width="580.1605" x="783.23" y="979.07"/><text fill="#28342A" font-family="'DM Sans'" font-size="14" lengthAdjust="spacing" textLength="202.5557" x="972.0324" y="997.958">Gemma4JinjaPromptFormatter</text><line style="stroke:#547461;stroke-width:0.5;" x1="784.23" x2="1362.3905" y1="1007.298" y2="1007.298"/><line style="stroke:#547461;stroke-width:0.5;" x1="784.23" x2="1362.3905" y1="1015.298" y2="1015.298"/><g data-visibility-modifier="PUBLIC_METHOD"><ellipse cx="794.23" cy="1029.912" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/></g><text fill="#28342A" font-family="'DM Sans'" font-size="14" lengthAdjust="spacing" textLength="555.1605" x="802.23" y="1033.186">Format(system_prompt : std::string_view, user_prompt : std::string_view) : std::string</text></g><!--class JsonLoader--><g class="entity" data-qualified-name="JsonLoader" data-source-line="90" id="ent0012"><rect fill="#FAFCF9" height="62.456" rx="2.5" ry="2.5" style="stroke:#547461;stroke-width:0.5;" width="522.092" x="1132.26" y="323.85"/><rect fill="#EAF0E8" height="28.228" rx="2.5" ry="2.5" style="stroke:#EAF0E8;stroke-width:0.5;" width="522.092" x="1132.26" y="323.85"/><rect fill="#EAF0E8" height="2.5" style="stroke:#EAF0E8;stroke-width:0.5;" width="522.092" x="1132.26" y="349.578"/><rect fill="none" height="62.456" rx="2.5" ry="2.5" style="stroke:#547461;stroke-width:0.5;" width="522.092" x="1132.26" y="323.85"/><text fill="#28342A" font-family="'DM Sans'" font-size="14" lengthAdjust="spacing" textLength="75.5861" x="1355.513" y="342.738">JsonLoader</text><line style="stroke:#547461;stroke-width:0.5;" x1="1133.26" x2="1653.352" y1="352.078" y2="352.078"/><line style="stroke:#547461;stroke-width:0.5;" x1="1133.26" x2="1653.352" y1="360.078" y2="360.078"/><g data-visibility-modifier="PUBLIC_METHOD"><ellipse cx="1143.26" cy="374.692" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/></g><text fill="#28342A" font-family="'DM Sans'" font-size="14" lengthAdjust="spacing" text-decoration="underline" textLength="497.092" x="1151.26" y="377.966">LoadLocations(filepath : const std::filesystem::path&) : std::vector<Location></text></g><!--reverse link BiergartenDataGenerator to IEnrichmentService--><g class="link" data-entity-1="ent0002" data-entity-2="ent0003" data-link-type="composition" data-source-line="95" id="lnk13"><path codeLine="95" d="M538.1769,230.4361 C459.2369,260.9461 385.24,289.55 321.04,314.37" fill="none" id="BiergartenDataGenerator-backto-IEnrichmentService" style="stroke:#628A5B;stroke-width:1;"/><polygon fill="#628A5B" points="549.37,226.11,542.3314,224.542,538.1769,230.4361,545.2155,232.0041,549.37,226.11" style="stroke:#628A5B;stroke-width:1;"/><text fill="#28342A" font-family="'DM Sans'" font-size="14" lengthAdjust="spacing" textLength="34.0411" x="462.26" y="270.508">owns</text></g><!--reverse link BiergartenDataGenerator to DataGenerator--><g class="link" data-entity-1="ent0002" data-entity-2="ent0007" data-link-type="composition" data-source-line="96" id="lnk14"><path codeLine="96" d="M770.31,237.96 C770.31,264.89 770.31,281.72 770.31,305.2" fill="none" id="BiergartenDataGenerator-backto-DataGenerator" style="stroke:#628A5B;stroke-width:1;"/><polygon fill="#628A5B" points="770.31,225.96,766.31,231.96,770.31,237.96,774.31,231.96,770.31,225.96" style="stroke:#628A5B;stroke-width:1;"/><text fill="#28342A" font-family="'DM Sans'" font-size="14" lengthAdjust="spacing" textLength="34.0411" x="771.31" y="270.508">owns</text></g><!--reverse link IEnrichmentService to WikipediaService--><g class="link" data-entity-1="ent0003" data-entity-2="ent0004" data-link-type="extension" data-source-line="98" id="lnk15"><path codeLine="98" d="M218.31,413.83 C218.31,452.82 218.31,494.7 218.31,538.96" fill="none" id="IEnrichmentService-backto-WikipediaService" style="stroke:#628A5B;stroke-width:1;stroke-dasharray:7,7;"/><polygon fill="none" points="218.31,395.83,212.31,413.83,224.31,413.83,218.31,395.83" style="stroke:#628A5B;stroke-width:1;"/><text fill="#28342A" font-family="'DM Sans'" font-size="14" lengthAdjust="spacing" textLength="76.65" x="219.31" y="449.428">implements</text></g><!--reverse link WikipediaService to WebClient--><g class="link" data-entity-1="ent0004" data-entity-2="ent0005" data-link-type="composition" data-source-line="99" id="lnk16"><path codeLine="99" d="M218.31,668.75 C218.31,709.65 218.31,751.84 218.31,790.57" fill="none" id="WikipediaService-backto-WebClient" style="stroke:#628A5B;stroke-width:1;"/><polygon fill="#628A5B" points="218.31,656.75,214.31,662.75,218.31,668.75,222.31,662.75,218.31,656.75" style="stroke:#628A5B;stroke-width:1;"/><text fill="#28342A" font-family="'DM Sans'" font-size="14" lengthAdjust="spacing" textLength="34.0411" x="219.31" y="755.928">owns</text></g><!--reverse link WebClient to CURLWebClient--><g class="link" data-entity-1="ent0005" data-entity-2="ent0006" data-link-type="extension" data-source-line="101" id="lnk17"><path codeLine="101" d="M218.31,908.03 C218.31,933.3 218.31,945.8 218.31,969.63" fill="none" id="WebClient-backto-CURLWebClient" style="stroke:#628A5B;stroke-width:1;stroke-dasharray:7,7;"/><polygon fill="none" points="218.31,890.03,212.31,908.03,224.31,908.03,218.31,890.03" style="stroke:#628A5B;stroke-width:1;"/><text fill="#28342A" font-family="'DM Sans'" font-size="14" lengthAdjust="spacing" textLength="76.65" x="219.31" y="934.848">implements</text></g><!--reverse link DataGenerator to MockGenerator--><g class="link" data-entity-1="ent0007" data-entity-2="ent0008" data-link-type="extension" data-source-line="103" id="lnk18"><path codeLine="103" d="M738.5074,420.9527 C718.0374,462.7127 696.61,506.41 676.15,548.15" fill="none" id="DataGenerator-backto-MockGenerator" style="stroke:#628A5B;stroke-width:1;stroke-dasharray:7,7;"/><polygon fill="none" points="746.43,404.79,733.1198,418.3118,743.8949,423.5935,746.43,404.79" style="stroke:#628A5B;stroke-width:1;"/><text fill="#28342A" font-family="'DM Sans'" font-size="14" lengthAdjust="spacing" textLength="76.65" x="729.77" y="449.428">implements</text></g><!--reverse link DataGenerator to LlamaGenerator--><g class="link" data-entity-1="ent0007" data-entity-2="ent0009" data-link-type="extension" data-source-line="104" id="lnk19"><path codeLine="104" d="M845.7149,415.9852 C874.6849,438.9952 896.47,456.31 931.64,484.25" fill="none" id="DataGenerator-backto-LlamaGenerator" style="stroke:#628A5B;stroke-width:1;stroke-dasharray:7,7;"/><polygon fill="none" points="831.62,404.79,841.9832,420.6835,849.4467,411.2869,831.62,404.79" style="stroke:#628A5B;stroke-width:1;"/><text fill="#28342A" font-family="'DM Sans'" font-size="14" lengthAdjust="spacing" textLength="76.65" x="886.76" y="449.428">implements</text></g><!--reverse link LlamaGenerator to IPromptFormatter--><g class="link" data-entity-1="ent0009" data-entity-2="ent0010" data-link-type="composition" data-source-line="106" id="lnk20"><path codeLine="106" d="M1073.31,723.39 C1073.31,755.08 1073.31,775.49 1073.31,799.79" fill="none" id="LlamaGenerator-backto-IPromptFormatter" style="stroke:#628A5B;stroke-width:1;"/><polygon fill="#628A5B" points="1073.31,711.39,1069.31,717.39,1073.31,723.39,1077.31,717.39,1073.31,711.39" style="stroke:#628A5B;stroke-width:1;"/><text fill="#28342A" font-family="'DM Sans'" font-size="14" lengthAdjust="spacing" textLength="30.044" x="1074.31" y="755.928">uses</text></g><!--reverse link IPromptFormatter to Gemma4JinjaPromptFormatter--><g class="link" data-entity-1="ent0010" data-entity-2="ent0011" data-link-type="extension" data-source-line="108" id="lnk21"><path codeLine="108" d="M1073.31,899.27 C1073.31,929.12 1073.31,951.38 1073.31,978.73" fill="none" id="IPromptFormatter-backto-Gemma4JinjaPromptFormatter" style="stroke:#628A5B;stroke-width:1;stroke-dasharray:7,7;"/><polygon fill="none" points="1073.31,881.27,1067.31,899.27,1079.31,899.27,1073.31,881.27" style="stroke:#628A5B;stroke-width:1;"/><text fill="#28342A" font-family="'DM Sans'" font-size="14" lengthAdjust="spacing" textLength="76.65" x="1074.31" y="934.848">implements</text></g><!--link BiergartenDataGenerator to JsonLoader--><g class="link" data-entity-1="ent0002" data-entity-2="ent0012" data-link-type="dependency" data-source-line="110" id="lnk22"><path codeLine="110" d="M991.27,216.39 C1098.86,253.24 1216.5536,293.5462 1297.9436,321.4162" fill="none" id="BiergartenDataGenerator-to-JsonLoader" style="stroke:#628A5B;stroke-width:1;stroke-dasharray:7,7;"/><polygon fill="#628A5B" points="1303.62,323.36,1296.4012,316.6601,1298.8896,321.7402,1293.8095,324.2287,1303.62,323.36" style="stroke:#628A5B;stroke-width:1;"/><text fill="#28342A" font-family="'DM Sans'" font-size="14" lengthAdjust="spacing" textLength="30.044" x="1156.93" y="270.508">uses</text></g><?plantuml-src lLPXRzis4FtkNq6aGESjYTUaRfiOXW7RiPCMJj4bo_9HOAIppOOYLP9ovdNzxpkIaYnPKbPWGxy4WUxTlSTtnwFr8nC9LJGcscmvu5_5GfF6lAEBI0HBcd8pby9yf36GWujhSak5FcZ6tBA_W9pqIq7338TT-X-IFwxbvg09uP9FNvL23pHyN2cPYcWgkLJanNmydyxFcxapoEdPw_xfkAb-6s2ib7pAWczFpyPl9frIDEHKQ_ArGyYaHGqXLq0ZKBNuR3n_DJkpcL9XFFlwfl-k__O4lpRm4b8N-gsiHaW3pMB-XQonhhE6_Bu6Cc6WLbGP4EI26ae-iGGu4q2EoTGPSC7e2WLqEjwF7Tx2Bq60eWQBMsd794Go-DC46jI6XH2G0GvND1YaWdr98KYC6hwV2PosTGpOTuyQkTHLNgefgS9LmKCKF2Xu0iL05vaR214tlCmX4uVOsiH3SfEAxi-8V92Ikqg_fHYRCeCLxfbPJz5ROyivLBdUGeRKC2cyWBpw9AVlXgv6dgGJAePeY3R47naY9DcERDMDP94hif2h6z0uo9xDVSV-CBHHBMa8f6uN6GwBy6ZaZ3z4CIPND_Kzw78POaKl88-zB8vaxxnOMIxVrtlsY9sF6CrPiePoXinDBRc7XwaBUZUGKT7G1275WvRmRYQnIJ5DXYNYexAAqNywWcMVWmdNCo-X-yNsimeADWoU6iw-yxauJfkztLJnGaofJ8EUGtAd-4o4CeBkXl8KlYklQCNqxcQna_D31UpygDxkPa_Ayx-rpN8DgdViY2XOuJz1jXvQrMIb_8seaDpXHd4ClFqi5fEb5bvUo_2nkgJgmdkztdUGPwWIYHsy2q1ROYQODYoyedhzZ0tERtpgWfA-1QTnROl6s3Tkxz2r_UUAYeX3PRrYABiYfM2YP9oOO2bLJ0sgQbo-dnnedcFytLLuGN9mR4xEpr-_-z-DMaWQTVt14chMhKqiDkDxiTmLsx_lBfYV8cf3MSvCxErM6uZzwPlWrPsxvrBZ-FjeLxl2WJU_OUaSaHIDQ8-tRe5BY6FQ_y34PxelvyS8-A2bi0uMX5-rmK4ElpbVywdMtINZK6-f_Ugb3GOs-hBzCKN6dyYjKId-1bMKanlWllIQ9PhyYdSi0H612BVOzy-OZR5Es--GNuwFczxC0P5FGZ-RLVsI9NIQtj-_UxtwUpaWB4uuMA3krAAMOBVJy-AbHyVMh2x-Ii7EtZwsyEfkgy0Rq7kRfbfzB-XCt9-wWHqawqZjTjZopunhbQgj1RtUg3nodkqV?></g></svg> |