Files
daily-journal-prompt/__pycache__/generate_prompts.cpython-313.pyc

105 lines
17 KiB
Plaintext
Raw Normal View History

2026-01-02 15:13:03 -07:00
<EFBFBD>
<00>@Xi6<00><00><><00>SrSSKrSSKrSSKrSSKrSSKJr SSKJrJrJ r J
r
SSK J r SSK Jr SSKJr SSKJr SS KJr SS
KJr SS KJrJr SS KJrJrJr "S S5rSr\ S:Xa\"5 gg)zo
Daily Journal Prompt Generator
A tool that uses AI to generate creative writing prompts for daily journaling.
<EFBFBD>N)<01>datetime)<04>List<73>Dict<63>Any<6E>Optional)<01>Path)<01>OpenAI)<01> load_dotenv)<01>Console)<01>Panel)<01>Table)<02>Prompt<70>Confirm)<03>Progress<73> SpinnerColumn<6D>
TextColumnc<00><><00>\rSrSrSrSS\4SjjrSrSrSr Sr
S r S
\4S jr S \4S jr S\S \\\\44SjrS \\\\44SjrS\\\\44SjrSrSrSrg)<18>JournalPromptGenerator<6F>z3Main class for generating journal prompts using AI.<2E> config_pathc<00><><00>[5UlXlSUl/UlSUlUR 5 UR5 UR5 g)z,Initialize the generator with configuration.N<>) r <00>consoler<00>client<6E>historic_prompts<74>prompt_template<74> _load_config<69>_load_prompt_template<74>_load_historic_prompts)<02>selfrs <20>generate_prompts.py<70>__init__<5F>JournalPromptGenerator.__init__sP<00><00><1E>y<EFBFBD><04> <0C>&<26><18><1A><04> <0B> "<22><04><1D>!<21><04><1C> <0A><19><19><1B> <0A>"<22>"<22>$<24> <0C>#<23>#<23>%<25>c<00><00>[UR5 [R"S5=(d [R"S5UlUR(dLUR
R S5 UR
R S5 [R"S5 [R"SS5Ul [R"SS 5Ul
[URURS
9Ul g ) z)Load configuration from environment file.<2E>DEEPSEEK_API_KEY<45>OPENAI_API_KEYz/[red]Error: No API key found in .env file[/red]z?Please add DEEPSEEK_API_KEY or OPENAI_API_KEY to your .env file<6C><00> API_BASE_URLzhttps://api.deepseek.com<6F>MODELz deepseek-chat)<02>api_key<65>base_urlN) r
r<00>os<6F>getenvr+r<00>print<6E>sys<79>exitr,<00>modelr r)r s r!r<00>#JournalPromptGenerator._load_config*s<><00><00><13>D<EFBFBD>$<24>$<24>%<25><1A>y<EFBFBD>y<EFBFBD>!3<>4<>S<><02> <09> <09>BR<42>8S<38><04> <0C><13>|<7C>|<7C> <10>L<EFBFBD>L<EFBFBD> <1E> <1E>P<> Q<> <10>L<EFBFBD>L<EFBFBD> <1E> <1E>`<60> a<> <0F>H<EFBFBD>H<EFBFBD>Q<EFBFBD>K<EFBFBD><1B> <09> <09>.<2E>2L<32>M<><04> <0A><18>Y<EFBFBD>Y<EFBFBD>w<EFBFBD><0F>8<><04>
<EFBFBD><1D><18>L<EFBFBD>L<EFBFBD><19>]<5D>]<5D>
<EFBFBD><04> r$c<00><><00>[SS5nUR5UlSSS5 g!,(df  g=f![a4 URR S5 [ R"S5 gf=f)z,Load the prompt template from ds_prompt.txt.z ds_prompt.txt<78>rNz)[red]Error: ds_prompt.txt not found[/red]r()<08>open<65>readr<00>FileNotFoundErrorrr/r0r1<00>r <00>fs r!r<00>,JournalPromptGenerator._load_prompt_templateAsY<00><00> <18><15>o<EFBFBD>s<EFBFBD>+<2B>q<EFBFBD>'(<28>v<EFBFBD>v<EFBFBD>x<EFBFBD><04>$<24>,<2C>+<2B>+<2B><> <20> <18> <10>L<EFBFBD>L<EFBFBD> <1E> <1E>J<> K<> <0F>H<EFBFBD>H<EFBFBD>Q<EFBFBD>K<EFBFBD> <18>s#<00> ><00>-<03>><00>
;<07>><00>><00>;A<<03>;A<c<00>Z<00>[SS5n[R"U5UlSSS5 g!,(df  g=f![a% UR
R S5 /Ulg[Ra% UR
R S5 /Ulgf=f)z%Load historic prompts from JSON file.<2E>historic_prompts.jsonr5NzV[yellow]Warning: historic_prompts.json not found, starting with empty history[/yellow]zY[yellow]Warning: historic_prompts.json is corrupted, starting with empty history[/yellow])r6<00>json<6F>loadrr8rr/<00>JSONDecodeErrorr9s r!r<00>-JournalPromptGenerator._load_historic_promptsJs<><00><00> '<27><15>-<2D>s<EFBFBD>3<>q<EFBFBD>(,<2C> <09> <09>!<21> <0C><04>%<25>4<>3<>3<><33> <20> '<27> <10>L<EFBFBD>L<EFBFBD> <1E> <1E>w<> x<>$&<26>D<EFBFBD> !<21><13>#<23>#<23> '<27> <10>L<EFBFBD>L<EFBFBD> <1E> <1E>z<> {<7B>$&<26>D<EFBFBD> !<21> '<27>s0<00> A<00>3<03>A<00>
A<07>A<00>A<00>,B*<03>25B*<03>)B*c<00><><00>[UR5S:<3A>aURSSUl[SS5n[R"URUSS9 SSS5 g!,(df  g=f)z;Save historic prompts to JSON file (keeping only first 60).<2E><Nr=<00>w<><00><01>indent)<05>lenrr6r><00>dumpr9s r!<00>_save_historic_prompts<74>-JournalPromptGenerator._save_historic_promptsVs[<00><00> <0F>t<EFBFBD>$<24>$<24> %<25><02> *<2A>$(<28>$9<>$9<>#<23>2<EFBFBD>$><3E>D<EFBFBD> !<21> <11>)<29>3<EFBFBD> /<2F>1<EFBFBD> <10>I<EFBFBD>I<EFBFBD>d<EFBFBD>+<2B>+<2B>Q<EFBFBD>q<EFBFBD> 9<>0<> /<2F> /<2F>s <00>!A$<03>$
A2c<00><><00>/n[UR5H=up#[UR55SnX4nSUS3nUR Xe05 M? Xlg)z9Renumber all prompts to maintain prompt00-prompt59 range.r<00>prompt<70>02dN)<05> enumerater<00>list<73>keys<79>append)r <00>renumbered_prompts<74>i<> prompt_dict<63>
prompt_key<EFBFBD> prompt_text<78>new_prompt_keys r!<00>_renumber_prompts<74>(JournalPromptGenerator._renumber_prompts_sm<00><00><1F><1A>'<27><04>(=<3D>(=<3D>><3E>N<EFBFBD>A<EFBFBD><1D>k<EFBFBD>.<2E>.<2E>0<>1<>!<21>4<>J<EFBFBD>%<25>1<>K<EFBFBD> &<26>a<EFBFBD><03>W<EFBFBD>-<2D>N<EFBFBD> <1E> %<25> %<25><1E>'<0E> <0F>?<3F>!3<>r$rWc<00><00>SU0nU/n[UR5HHupEUS:<3A>a O?[UR55SnXVnSUS-S3nUR Xq05 MJ X0lUR 5 g)z<>
Add a single prompt to the historic prompts cyclic buffer.
The new prompt becomes prompt00, all others shift down, and prompt59 is discarded.
<EFBFBD>prompt00<30>;rrMr(rNN)rOrrPrQrRrJ)r rW<00>
new_prompt<EFBFBD>updated_promptsrTrUrVrXs r!<00>add_prompt_to_history<72>,JournalPromptGenerator.add_prompt_to_historyos<><00><00> <17> <0B>
<EFBFBD>
<EFBFBD> &<26>,<2C><0F>(<28><04>(=<3D>(=<3D>><3E>N<EFBFBD>A<EFBFBD><10>B<EFBFBD>w<EFBFBD><15><1E>k<EFBFBD>.<2E>.<2E>0<>1<>!<21>4<>J<EFBFBD>%<25>1<>K<EFBFBD> &<26>a<EFBFBD><01>c<EFBFBD>#<23>Y<EFBFBD>/<2F>N<EFBFBD> <1B> "<22> "<22><1E>$<0E> <0F>?<3F>!0<><1D> <0C>#<23>#<23>%r$<00>returnc<00><><00>UR(a2[R"URSS9nURSU3nU$URnU$)z.Prepare the full prompt with historic context.rErFz
Previous prompts:
)rr><00>dumpsr)r <00>historic_context<78> full_prompts r!<00>_prepare_prompt<70>&JournalPromptGenerator._prepare_prompt<70>sY<00><00> <10> <20> <20>#<23>z<EFBFBD>z<EFBFBD>$<24>*?<3F>*?<3F><01>J<> <1C>!<21>1<>1<>2<>2I<32>JZ<4A>I[<5B>\<5C>K<EFBFBD><1B><1A><1F>.<2E>.<2E>K<EFBFBD><1A>r$<00>response_contentc<00>j<00>[R"U5n/n[S5HBnSU3nXR;dMX%nS[UR5U-S3U0nUR U5 MD U$![R a<> URRS5 UR5RS5n/n[USS5H^upIU R5n U (dM[U 5S:<3A>dM/S[UR5U-S3U 0nUR U5 M` Us$f=f) zr
Parse the AI response to extract new prompts.
Expected format: JSON array with keys "newprompt0" to "newprompt5"
<EFBFBD><00> newpromptrMrNzY[yellow]Warning: AI response is not valid JSON, attempting to extract prompts...[/yellow]<5D>
N<EFBFBD>2) r><00>loads<64>rangerHrrRr@rr/<00>strip<69>splitrO)
r ri<00>data<74> new_promptsrT<00>keyrW<00>
prompt_obj<EFBFBD>lines<65>lines
r!<00>_parse_ai_response<73>)JournalPromptGenerator._parse_ai_response<73>s7<00><00>
! <1F><17>:<3A>:<3A>.<2E>/<2F>D<EFBFBD><1D>K<EFBFBD><1A>1<EFBFBD>X<EFBFBD><01>!<21>!<21><13>o<EFBFBD><03><16>;<3B>"&<26>)<29>K<EFBFBD> <20><13>T<EFBFBD>%:<3A>%:<3A>!;<3B>a<EFBFBD>!?<3F><03> D<>E<>{<7B>"<16>J<EFBFBD> <20>&<26>&<26>z<EFBFBD>2<><1E><1F> <1E><><13>#<23>#<23> <1F> <10>L<EFBFBD>L<EFBFBD> <1E> <1E>z<> {<7B>%<25>*<2A>*<2A>,<2C>2<>2<>4<EFBFBD>8<>E<EFBFBD><1C>K<EFBFBD>$<24>U<EFBFBD>2<EFBFBD>A<EFBFBD>Y<EFBFBD>/<2F><07><01><1B>z<EFBFBD>z<EFBFBD>|<7C><04><17>4<EFBFBD>C<EFBFBD><04>I<EFBFBD><02>N<EFBFBD> <20><13>T<EFBFBD>%:<3A>%:<3A>!;<3B>a<EFBFBD>!?<3F><03> D<>E<>t<EFBFBD>"<16>J<EFBFBD> <20>&<26>&<26>z<EFBFBD>2<> 0<><1F> <1E>! <1F>s#<00>.A-<00>8A-<00>-A8D2<03>) D2<03>:5D2<03>1D2c<00><><00>URRS5 UR5n[[ 5[ S5SS9nUR SSS9nURRRRURSS S
.S US
./S S S9nURSRRnSSS5 UR!W5nU(dURRS5 /$U$![a4nURRSUS35 /sSnAsSSS5 $SnAff=f!,(df  N<>=f)z&Generate new journal prompts using AI.z/
[cyan]Generating new journal prompts...[/cyan]z([progress.description]{task.description}T)<01> transientzCalling AI API...N)<01>total<61>systemzdYou are a creative writing assistant that generates journal prompts. Always respond with valid JSON.)<02>role<6C>content<6E>usergffffff<66>?i<>)r2<00>messages<65> temperature<72>
max_tokensrzed]Error calling AI API: z[/red]z>[red]Error: Could not parse any prompts from AI response[/red])rr/rgrrr<00>add_taskr<00>chat<61> completions<6E>creater2<00>choices<65>messager<65><00> Exceptionry)r rf<00>progress<73>task<73>responseri<00>erts r!<00>generate_prompts<74>'JournalPromptGenerator.generate_prompts<74>sR<00><00> <0C> <0C> <0C><1A><1A>M<>N<><1B>*<2A>*<2A>,<2C> <0B><16> <19>O<EFBFBD> <16>A<> B<><1A>
<EFBFBD><16><1B>$<24>$<24>%8<><04>$<24>E<>D<EFBFBD> <1A><1F>;<3B>;<3B>+<2B>+<2B>7<>7<>><3E>><3E><1E>*<2A>*<2A>!)<29>7]<02>^<02>!'<27>K<EFBFBD>@<40><16>!$<24>#<23>?<3F><12><08>$,<2C>#3<>#3<>A<EFBFBD>#6<>#><3E>#><3E>#F<>#F<> <20>'
<EFBFBD>4<1B>-<2D>-<2D>.><3E>?<3F> <0B><1A> <10>L<EFBFBD>L<EFBFBD> <1E> <1E>_<> `<60><15>I<EFBFBD> <1B><1A><><1D> <1A><14> <0C> <0C>"<22>"<22>%@<40><11><03>6<EFBFBD>#J<>K<><19> <09>/
<EFBFBD>
<EFBFBD><EFBFBD>* <1A><>+
<EFBFBD>
<EFBFBD>s7<00>E<03>A%C?<02>?
D=<05> D8<05>)D=<05>*E<03>8D=<05>=E<03>
E<07>promptsc<00><><00>URRS5 URRS5 URRS5 [US5Hnup#[UR 55SnX4n[ SUS3SUS 3S
S S 9nURRU5 URR5 Mp g )z+Display generated prompts in a nice format.z=
============================================================u>[bold green]✨ NEW JOURNAL PROMPTS GENERATED ✨[/bold green]z=============================================================
r(rz[cyan]z[/cyan]z[bold]Prompt #z[/bold]<5D>blue)r(rE)<03>title<6C> border_style<6C>paddingN)rr/rOrPrQr )r r<>rTrUrVrW<00>panels r!<00>display_prompts<74>&JournalPromptGenerator.display_prompts<74>s<><00><00> <0C> <0C> <0C><1A><1A>=<3D>)<29> <0C> <0C> <0C><1A><1A>[<5B>\<5C> <0C> <0C> <0C><1A><1A>=<3D>)<29>'<27><07><11>3<>N<EFBFBD>A<EFBFBD><1D>k<EFBFBD>.<2E>.<2E>0<>1<>!<21>4<>J<EFBFBD>%<25>1<>K<EFBFBD><1A><18><1B> <0A>W<EFBFBD>-<2D>&<26>q<EFBFBD>c<EFBFBD><17>1<>#<23><1E> <0E>E<EFBFBD> <11>L<EFBFBD>L<EFBFBD> <1E> <1E>u<EFBFBD> %<25> <10>L<EFBFBD>L<EFBFBD> <1E> <1E> <20>4r$c
<00>`<00>[UR5n[SS9nURSSS9 URSSS9 UR S[ U55 UR S S
5 UR S [ [ S S U-
555 URRU5 g)z%Show statistics about prompt history.zPrompt History Statistics)r<><00>Metric<69>cyan)<01>style<6C>Value<75>greenzTotal prompts in historyzHistory capacityz
60 promptszAvailable slotsrrCN) rHrr <00>
add_column<EFBFBD>add_row<6F>str<74>maxrr/)r <00> total_prompts<74>tables r!<00>show_history_stats<74>)JournalPromptGenerator.show_history_statss<><00><00><1B>D<EFBFBD>1<>1<>2<> <0A><15>7<>8<><05> <0A><18><18><18><16><18>0<> <0A><18><18><17><07><18>0<> <0A> <0A> <0A>0<>#<23>m<EFBFBD>2D<32>E<> <0A> <0A> <0A>(<28>,<2C>7<> <0A> <0A> <0A>'<27><13>S<EFBFBD><11>B<EFBFBD><1D>4F<34>-G<>)H<>I<> <0C> <0C> <0C><1A><1A>5<EFBFBD>!r$c <00><><00>URR[R"SSS95 URRS5 URRS5 URRS5 URRS5 [R
"S/S QS
S 9nUS
:XGa<>UR 5nU(Ga<>URU5 [R
"S 5(Ga}[R
"S [S[U5S-5Vs/sHn[U5PM snS
S 9n[U5S-
nX%n[UR55SnXgn[R "5R#S5n SU S3n
[%U
S5n U R'S[R "5R#S5S35 U R'S5 U R'U5 U R'S5 U R'S5 SSS5 URRSU
S35 UR)U5 URRS5 O9US:XaUR+5 O"US:XaURRS 5 gGM<>s snf!,(df  N<>=f)!z*Run in interactive mode with user prompts.zg[bold]Daily Journal Prompt Generator[/bold]
Generate creative writing prompts for your journal practicer<65>)r<>z
[bold]Options:[/bold]z1. Generate new promptsz2. View history statisticsz3. Exitz
Enter your choice)<03>1<>2<>3r<33>)r<><00>defaultz7
Would you like to save one of these prompts to a file?z+Which prompt number would you like to save?r(rz %Y%m%d_%H%M%S<>journal_prompt_z.txtrDzJournal Prompt - z%Y-%m-%d %H:%M:%Srmz4==================================================
z5
==================================================
uHappy writing! ✍️
Nz[green]Prompt saved to z[/green]z2[green]Prompt added to history as prompt00[/green]r<>r<>u.[green]Goodbye! Happy journaling! 📓[/green])rr/r <00>fitr<00>askr<6B>r<>rrprHr<><00>intrPrQr<00>now<6F>strftimer6<00>writer`r<>) r <00>choicertrT<00>
prompt_num<EFBFBD>
prompt_idxrUrVrW<00> timestamp<6D>filenamer:s r!<00>interactive_mode<64>'JournalPromptGenerator.interactive_modesT<00><00> <0C> <0C> <0C><1A><1A>5<EFBFBD>9<EFBFBD>9<EFBFBD> J<01> <20>
<EFBFBD> <0B> <13> <10>L<EFBFBD>L<EFBFBD> <1E> <1E>8<> 9<> <10>L<EFBFBD>L<EFBFBD> <1E> <1E>8<> 9<> <10>L<EFBFBD>L<EFBFBD> <1E> <1E>;<3B> <<3C> <10>L<EFBFBD>L<EFBFBD> <1E> <1E>y<EFBFBD> )<29><1B>Z<EFBFBD>Z<EFBFBD> 5<><EFBFBD>X[<5B>\<5C>F<EFBFBD><15><13>}<7D>"<22>3<>3<>5<> <0B><1E><18>(<28>(<28><1B>5<><1F>{<7B>{<7B>#]<5D>^<5E>^<5E>%+<2B>Z<EFBFBD>Z<EFBFBD>I<>5:<3A>1<EFBFBD>c<EFBFBD>+<2B>>N<>QR<51>>R<>5S<35>$T<>5S<35><01>S<EFBFBD><11>V<EFBFBD>5S<35>$T<>$'<27>&<1A>
<EFBFBD> &)<29><1A>_<EFBFBD>q<EFBFBD>%8<>
<EFBFBD>&1<>&=<3D> <0B>%)<29>+<2B>*:<3A>*:<3A>*<<3C>%=<3D>a<EFBFBD>%@<40>
<EFBFBD>&1<>&=<3D> <0B>%-<2D>L<EFBFBD>L<EFBFBD>N<EFBFBD>$;<3B>$;<3B>O<EFBFBD>$L<> <09>%4<>Y<EFBFBD>K<EFBFBD>t<EFBFBD>#D<><08>!<21>(<28>C<EFBFBD>0<>A<EFBFBD><1D>G<EFBFBD>G<EFBFBD>&7<><08> <0C> <0C><0E>8O<38>8O<38>Pc<50>8d<38>7e<37>eg<65>$h<>i<><1D>G<EFBFBD>G<EFBFBD>O<EFBFBD>4<><1D>G<EFBFBD>G<EFBFBD>K<EFBFBD>0<><1D>G<EFBFBD>G<EFBFBD>$:<3A>;<3B><1D>G<EFBFBD>G<EFBFBD>$=<3D>><3E> 1<><1D> <0C> <0C>*<2A>*<2A>-D<>X<EFBFBD>J<EFBFBD>h<EFBFBD>+W<>X<><1D>2<>2<>;<3B>?<3F><1C> <0C> <0C>*<2A>*<2A>-_<>a<><61><17>3<EFBFBD><1D><14>'<27>'<27>)<29><17>3<EFBFBD><1D><14> <0C> <0C>"<22>"<22>#S<>T<><15>a<13><>"%U<01>1<>0<>s<00>+J:
<EFBFBD>.A<J?<03>?
K )r+r,rrrrr2rN)<01>.env)<16>__name__<5F>
__module__<EFBFBD> __qualname__<5F>__firstlineno__<5F>__doc__r<5F>r"rrrrJrYr`rgrrryr<>r<>r<>r<><00>__static_attributes__<5F>r$r!rrs<><00><00>=<3D> &<26>C<EFBFBD> &<26>
<EFBFBD>.<18>
'<27>:<3A>3<> &<26><13>&<26>@ <1B><13> <1B>&<1F>3<EFBFBD>&<1F>4<EFBFBD><04>S<EFBFBD>#<23>X<EFBFBD><0E>;O<>&<1F>P,<1B>$<24>t<EFBFBD>C<EFBFBD><13>H<EFBFBD>~<7E>"6<>,<1B>\!<21>t<EFBFBD>D<EFBFBD><13>c<EFBFBD><18>N<EFBFBD>';<3B>!<21>* "<22>8r$rc<00><><00>[R"SS9nURSSSSS9 URSS S
S S 9 URS SSSS9 UR5n[ UR
S9nUR (aUR5 gUR(aUR5 gUR5nU(aURU5 gg)z Main entry point for the script.z!Generate journal prompts using AI)<01> descriptionz --interactivez-i<>
store_truezRun in interactive mode)<02>action<6F>helpz--configz-cr<63>z*Path to configuration file (default: .env))r<>r<>z--statsz-szShow history statistics)rN) <0C>argparse<73>ArgumentParser<65> add_argument<6E>
parse_argsr<00>config<69>statsr<73><00> interactiver<65>r<>r<>)<04>parser<65>args<67> generatorrts r!<00>mainr<6E>Ns<><00><00> <15> $<24> $<24>1T<31> U<>F<EFBFBD>
<EFBFBD><17><17><17><14><1B> &<26><18><06>
 <0B><17><17><12>D<EFBFBD><16> 9<><18><06>
 <0B><17><17><11>4<EFBFBD><1B> &<26><18><06> <12> <1C> <1C> <1E>D<EFBFBD>'<27>4<EFBFBD>;<3B>;<3B>?<3F>I<EFBFBD> <0B>z<EFBFBD>z<EFBFBD><11>$<24>$<24>&<26> <0A> <19> <19><11>"<22>"<22>$<24> <20>0<>0<>2<> <0B> <16> <15> %<25> %<25>k<EFBFBD> 2<> r$<00>__main__)!r<>r-r>r0r<>r<00>typingrrrr<00>pathlibr<00>openair <00>dotenvr
<00> rich.consoler <00>
rich.panelr <00>
rich.tabler <00> rich.promptrr<00> rich.progressrrrrr<>r<>r<>r$r!<00><module>r<>sc<00><01><04>

<EFBFBD> <0B>
<EFBFBD><0F><1D>,<2C>,<2C><18><19><1E> <20><1C><1C>'<27>=<3D>=<3D>s<16>s<16>l 3<>F <0C>z<EFBFBD><19><08>F<EFBFBD>r$