[{"data":1,"prerenderedAt":518},["ShallowReactive",2],{"navigation_docs":3,"-ramble-configuration":92,"-ramble-configuration-surround":513},[4,10,24,41,60,69,79],{"title":5,"path":6,"stem":7,"children":8},"Introduction","/introduction","0.introduction/index",[9],{"title":5,"path":6,"stem":7},{"title":11,"path":12,"stem":13,"children":14,"page":23},"Installation","/installation","1.installation",[15,19],{"title":16,"path":17,"stem":18},"Docker","/installation/docker","1.installation/1.docker",{"title":20,"path":21,"stem":22},"From source","/installation/manual","1.installation/2.manual",false,{"title":25,"path":26,"stem":27,"children":28,"page":23},"Features","/features","2.features",[29,33,37],{"title":30,"path":31,"stem":32},"Templates","/features/templates","2.features/1.templates",{"title":34,"path":35,"stem":36},"Assistant","/features/assistant","2.features/2.assistant",{"title":38,"path":39,"stem":40},"Profiles","/features/profiles","2.features/4.profiles",{"title":42,"path":43,"stem":44,"children":45},"Ramble","/ramble","3.ramble",[46,48,52,56],{"title":42,"path":43,"stem":47},"3.ramble/index",{"title":49,"path":50,"stem":51},"Install and configure","/ramble/configuration","3.ramble/1.configuration",{"title":53,"path":54,"stem":55},"Ramble API","/ramble/api","3.ramble/2.api",{"title":57,"path":58,"stem":59},"iOS Shortcuts","/ramble/ios","3.ramble/3.ios",{"title":61,"path":62,"stem":63,"children":64,"page":23},"Guide","/guide","4.guide",[65],{"title":66,"path":67,"stem":68},"App usage","/guide/usage","4.guide/1.usage",{"title":70,"path":71,"stem":72,"children":73},"Contributing","/contribute","5.contribute/1.index",[74,75],{"title":70,"path":71,"stem":72},{"title":76,"path":77,"stem":78},"Localization","/contribute/localization","5.contribute/2.localization",{"title":80,"path":81,"stem":82,"children":83,"page":23},"About","/about","6.about",[84,88],{"title":85,"path":86,"stem":87},"Architecture","/about/architecture","6.about/0.architecture",{"title":89,"path":90,"stem":91},"Attribution","/about/attribution","6.about/1.attribution",{"id":93,"title":49,"body":94,"description":507,"extension":508,"links":509,"meta":510,"navigation":386,"path":50,"seo":511,"stem":51,"__hash__":512},"docs/3.ramble/1.configuration.md",{"type":95,"value":96,"toc":501},"minimark",[97,102,111,189,198,217,221,229,236,311,314,318,321,460,463,467,475,490,493,497],[98,99,101],"h2",{"id":100},"_1-configure-transaction-interpretation","1. Configure transaction interpretation",[103,104,105,106,110],"p",{},"Ramble needs an OpenAI-compatible ",[107,108,109],"code",{},"/chat/completions"," endpoint. This can be a hosted provider or a self-hosted service such as Ollama, LiteLLM, or llama.cpp.",[112,113,114,130],"table",{},[115,116,117],"thead",{},[118,119,120,124,127],"tr",{},[121,122,123],"th",{},"Variable",[121,125,126],{},"Default",[121,128,129],{},"Purpose",[131,132,133,149,164,177],"tbody",{},[118,134,135,141,146],{},[136,137,138],"td",{},[107,139,140],{},"ASSISTANT_LLM_ENDPOINT",[136,142,143],{},[107,144,145],{},"https://api.openai.com/v1/chat/completions",[136,147,148],{},"Full chat completions URL.",[118,150,151,156,161],{},[136,152,153],{},[107,154,155],{},"ASSISTANT_LLM_MODEL",[136,157,158],{},[107,159,160],{},"gpt-4o-mini",[136,162,163],{},"Model sent with each request.",[118,165,166,171,174],{},[136,167,168],{},[107,169,170],{},"ASSISTANT_LLM_API_KEY",[136,172,173],{},"None",[136,175,176],{},"API key sent as a Bearer token. It may be empty for a local service without authentication.",[118,178,179,184,186],{},[136,180,181],{},[107,182,183],{},"ASSISTANT_LLM_CONTEXT",[136,185,173],{},[136,187,188],{},"Optional instructions added to every request, such as a preferred language for descriptions.",[103,190,191,192,194,195,197],{},"Ramble is enabled when either ",[107,193,140],{}," or ",[107,196,170],{}," is set.",[199,200,201,208],"ul",{},[202,203,204,205,207],"li",{},"With OpenAI, setting only ",[107,206,170],{}," uses the default endpoint and model.",[202,209,210,211,213,214,216],{},"With a self-hosted service, set ",[107,212,140],{}," and usually ",[107,215,155],{},". A key is optional if your service does not require one.",[98,218,220],{"id":219},"_2-configure-audio-transcription-optional","2. Configure audio transcription (optional)",[103,222,223,224,228],{},"You only need this service when clients upload audio to the ",[225,226,53],"a",{"href":227},"/features/ramble/api#mode-2-audio",". Typing and device dictation work without it.",[103,230,231,232,235],{},"The service must provide an OpenAI-compatible ",[107,233,234],{},"/audio/transcriptions"," endpoint.",[112,237,238,248],{},[115,239,240],{},[118,241,242,244,246],{},[121,243,123],{},[121,245,126],{},[121,247,129],{},[131,249,250,265,280,292],{},[118,251,252,257,262],{},[136,253,254],{},[107,255,256],{},"ASSISTANT_TRANSCRIPTION_ENDPOINT",[136,258,259],{},[107,260,261],{},"https://api.openai.com/v1/audio/transcriptions",[136,263,264],{},"Full audio transcription URL.",[118,266,267,272,277],{},[136,268,269],{},[107,270,271],{},"ASSISTANT_TRANSCRIPTION_MODEL",[136,273,274],{},[107,275,276],{},"gpt-4o-mini-transcribe",[136,278,279],{},"Transcription model sent with each request.",[118,281,282,287,289],{},[136,283,284],{},[107,285,286],{},"ASSISTANT_TRANSCRIPTION_API_KEY",[136,288,173],{},[136,290,291],{},"API key sent as a Bearer token.",[118,293,294,299,301],{},[136,295,296],{},[107,297,298],{},"ASSISTANT_TRANSCRIPTION_LANGUAGE",[136,300,173],{},[136,302,303,304,194,307,310],{},"Optional language hint, such as ",[107,305,306],{},"en",[107,308,309],{},"ro",". This improves short recordings that are difficult to identify automatically.",[103,312,313],{},"The transcription service is enabled when either its endpoint or API key is set. Uploaded recordings are transcribed after the upload response; Pico retries pending transcription when saved rambles are loaded.",[98,315,317],{"id":316},"docker-compose-example","Docker Compose example",[103,319,320],{},"Add the variables under the existing Pico service:",[322,323,328],"pre",{"className":324,"code":325,"language":326,"meta":327,"style":327},"language-yaml shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","services:\n  firefly-pico:\n    image: cioraneanu/firefly-pico:latest\n    environment:\n      - FIREFLY_URL=https://firefly.example.com\n\n      - ASSISTANT_LLM_ENDPOINT=https://api.openai.com/v1/chat/completions\n      - ASSISTANT_LLM_MODEL=gpt-4o-mini\n      - ASSISTANT_LLM_API_KEY=your-api-key\n      # - ASSISTANT_LLM_CONTEXT=Return descriptions in Romanian.\n\n      # Optional: required only for uploaded audio\n      - ASSISTANT_TRANSCRIPTION_ENDPOINT=https://api.openai.com/v1/audio/transcriptions\n      - ASSISTANT_TRANSCRIPTION_MODEL=gpt-4o-mini-transcribe\n      - ASSISTANT_TRANSCRIPTION_API_KEY=your-api-key\n      # - ASSISTANT_TRANSCRIPTION_LANGUAGE=ro\n","yaml","",[107,329,330,343,351,364,372,381,388,396,404,412,419,424,430,438,446,454],{"__ignoreMap":327},[331,332,335,339],"span",{"class":333,"line":334},"line",1,[331,336,338],{"class":337},"swJcz","services",[331,340,342],{"class":341},"sMK4o",":\n",[331,344,346,349],{"class":333,"line":345},2,[331,347,348],{"class":337},"  firefly-pico",[331,350,342],{"class":341},[331,352,354,357,360],{"class":333,"line":353},3,[331,355,356],{"class":337},"    image",[331,358,359],{"class":341},":",[331,361,363],{"class":362},"sfazB"," cioraneanu/firefly-pico:latest\n",[331,365,367,370],{"class":333,"line":366},4,[331,368,369],{"class":337},"    environment",[331,371,342],{"class":341},[331,373,375,378],{"class":333,"line":374},5,[331,376,377],{"class":341},"      -",[331,379,380],{"class":362}," FIREFLY_URL=https://firefly.example.com\n",[331,382,384],{"class":333,"line":383},6,[331,385,387],{"emptyLinePlaceholder":386},true,"\n",[331,389,391,393],{"class":333,"line":390},7,[331,392,377],{"class":341},[331,394,395],{"class":362}," ASSISTANT_LLM_ENDPOINT=https://api.openai.com/v1/chat/completions\n",[331,397,399,401],{"class":333,"line":398},8,[331,400,377],{"class":341},[331,402,403],{"class":362}," ASSISTANT_LLM_MODEL=gpt-4o-mini\n",[331,405,407,409],{"class":333,"line":406},9,[331,408,377],{"class":341},[331,410,411],{"class":362}," ASSISTANT_LLM_API_KEY=your-api-key\n",[331,413,415],{"class":333,"line":414},10,[331,416,418],{"class":417},"sHwdD","      # - ASSISTANT_LLM_CONTEXT=Return descriptions in Romanian.\n",[331,420,422],{"class":333,"line":421},11,[331,423,387],{"emptyLinePlaceholder":386},[331,425,427],{"class":333,"line":426},12,[331,428,429],{"class":417},"      # Optional: required only for uploaded audio\n",[331,431,433,435],{"class":333,"line":432},13,[331,434,377],{"class":341},[331,436,437],{"class":362}," ASSISTANT_TRANSCRIPTION_ENDPOINT=https://api.openai.com/v1/audio/transcriptions\n",[331,439,441,443],{"class":333,"line":440},14,[331,442,377],{"class":341},[331,444,445],{"class":362}," ASSISTANT_TRANSCRIPTION_MODEL=gpt-4o-mini-transcribe\n",[331,447,449,451],{"class":333,"line":448},15,[331,450,377],{"class":341},[331,452,453],{"class":362}," ASSISTANT_TRANSCRIPTION_API_KEY=your-api-key\n",[331,455,457],{"class":333,"line":456},16,[331,458,459],{"class":417},"      # - ASSISTANT_TRANSCRIPTION_LANGUAGE=ro\n",[103,461,462],{},"Restart the Pico container after changing its environment.",[98,464,466],{"id":465},"_3-verify-the-setup","3. Verify the setup",[103,468,469,470,474],{},"In Pico, open ",[471,472,473],"strong",{},"Settings → Assistant",". The page shows the resolved endpoint and model for each service.",[476,477,478,481,484],"ol",{},[202,479,480],{},"Test the language model connection.",[202,482,483],{},"If you configured audio transcription, test that connection too.",[202,485,486,487,489],{},"Optionally add personal LLM context. It is combined with the server-wide ",[107,488,183],{},".",[103,491,492],{},"When the language model test succeeds, open the new transaction screen and try a short message in Ramble.",[494,495,496],"warning",{},"Keep API keys in Pico's server environment. Do not place them in an iOS Shortcut or another client.",[498,499,500],"style",{},"html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":327,"searchDepth":345,"depth":345,"links":502},[503,504,505,506],{"id":100,"depth":345,"text":101},{"id":219,"depth":345,"text":220},{"id":316,"depth":345,"text":317},{"id":465,"depth":345,"text":466},"Enable Ramble and optionally add server-side audio transcription.","md",null,{},{"title":49,"description":507},"sLDH4kWWUSOSqlDjLg_br3cstCtl-Nx0-UjrkVdItN4",[514,516],{"title":42,"path":43,"stem":47,"description":515,"children":-1},"Turn a few spoken or written words into complete transaction drafts.",{"title":53,"path":54,"stem":55,"description":517,"children":-1},"Save text or audio rambles from automations and other devices.",1785488524533]