<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Bia Silva</title>
    <description>The latest articles on DEV Community by Bia Silva (@biancassilva).</description>
    <link>https://dev.to/biancassilva</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F1236868%2F907eae4c-44e8-4cd3-b5cb-334c7a6ad105.jpeg</url>
      <title>DEV Community: Bia Silva</title>
      <link>https://dev.to/biancassilva</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/biancassilva"/>
    <language>en</language>
    <item>
      <title>Stopping the Stream: A Pythonic Guide to Controlling OpenAI Responses</title>
      <dc:creator>Bia Silva</dc:creator>
      <pubDate>Thu, 27 Mar 2025 21:10:22 +0000</pubDate>
      <link>https://dev.to/biancassilva/stopping-the-stream-a-pythonic-guide-to-controlling-openai-responses-4gpb</link>
      <guid>https://dev.to/biancassilva/stopping-the-stream-a-pythonic-guide-to-controlling-openai-responses-4gpb</guid>
      <description>&lt;p&gt;Hey there, &lt;em&gt;Python devs&lt;/em&gt;! 👋 &lt;/p&gt;

&lt;p&gt;Let’s explore a practical approach to giving users control over stopping those AI-generated responses?&lt;/p&gt;

&lt;h2&gt;
  
  
  The Scenario
&lt;/h2&gt;

&lt;p&gt;Imagine you're building a FastAPI application that uses OpenAI's API. You've got streaming responses working smoothly, but there's one thing missing: the ability for users to stop the stream mid-generation. &lt;/p&gt;

&lt;h2&gt;
  
  
  The Challenge
&lt;/h2&gt;

&lt;p&gt;Stopping a stream isn't as straightforward as you might think. OpenAI's API keeps pumping out tokens, and you need a clean way to interrupt that flow without breaking your entire application.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Solution
&lt;/h2&gt;

&lt;p&gt;Here's a killer implementation that'll make your users happy:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;import asyncio
from fastapi import FastAPI, WebSocket
from openai import AsyncOpenAI
from typing import Optional

class StreamController:
    def __init__(self):
        self.stop_generation = False

    def request_stop(self):
        self.stop_generation = True

class AIResponseGenerator:
    def __init__(self, client: AsyncOpenAI):
        self.client = client
        self.stream_controller = StreamController()

    async def generate_streaming_response(self, prompt: str):
        # Reset the stop flag
        self.stream_controller.stop_generation = False

        try:
            stream = await self.client.chat.completions.create(
                model="gpt-3.5-turbo",
                messages=[{"role": "user", "content": prompt}],
                stream=True
            )

            full_response = ""
            for chunk in stream:
                # Check if stop was requested
                if self.stream_controller.stop_generation:
                    break

                if chunk.choices[0].delta.content:
                    content = chunk.choices[0].delta.content
                    full_response += content
                    yield content

        except Exception as e:
            print(f"Stream generation error: {e}")

    def stop_stream(self):
        # Trigger the stop mechanism
        self.stream_controller.request_stop()
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Let's unpack what's happening here:
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;StreamController&lt;/strong&gt;: This is our traffic cop. It manages a simple boolean flag to control stream generation.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;AIResponseGenerator&lt;/strong&gt;: The main class that handles AI response streaming.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Uses AsyncOpenAI for non-blocking API calls&lt;/li&gt;
&lt;li&gt;Implements a generator that can be stopped mid-stream&lt;/li&gt;
&lt;li&gt;Provides a &lt;code&gt;stop_stream()&lt;/code&gt; method to interrupt generation&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Pro Tips
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;🚀 Performance: This approach is memory-efficient and doesn't block the event loop.&lt;/li&gt;
&lt;li&gt;🛡️ Error Handling: Includes basic error catching to prevent unexpected crashes.&lt;/li&gt;
&lt;li&gt;🔧 Flexibility: Easy to adapt to different streaming scenarios.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Potential Improvements
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Add timeout mechanisms&lt;/li&gt;
&lt;li&gt;Implement more granular error handling&lt;/li&gt;
&lt;li&gt;Create a more sophisticated stop mechanism for complex streams&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;See u guys!&lt;/p&gt;

</description>
      <category>python</category>
      <category>ai</category>
      <category>openai</category>
      <category>fastapi</category>
    </item>
    <item>
      <title>Utilizando domínio personalizado do Registro.br com Fly.io</title>
      <dc:creator>Bia Silva</dc:creator>
      <pubDate>Thu, 20 Mar 2025 13:10:53 +0000</pubDate>
      <link>https://dev.to/biancassilva/utilizando-dominio-personalizado-do-registrobr-com-flyio-1157</link>
      <guid>https://dev.to/biancassilva/utilizando-dominio-personalizado-do-registrobr-com-flyio-1157</guid>
      <description>&lt;p&gt;A &lt;strong&gt;Fly.io&lt;/strong&gt; é uma plataforma avançada para implantação de aplicações, permitindo que desenvolvedores disponibilizem seus aplicativos globalmente de forma eficiente. Com ela, seu app pode rodar automaticamente em diversos locais ao redor do mundo, graças ao proxy globalmente distribuido sem necessidade de configuração, isolamento de hardware e conexões &lt;strong&gt;WireGuard VPN&lt;/strong&gt; instantâneas. O processo de deploy é simplificado e permite escalar para milhares de instâncias sem complicações.&lt;/p&gt;

&lt;p&gt;Neste guia, detalharei o passo a passo para configurar sua aplicação corretamente. Vamos lá! 🚀&lt;/p&gt;




&lt;h2&gt;
  
  
  Passo 1: Criar sua Aplicação na Fly.io
&lt;/h2&gt;

&lt;p&gt;Se ainda não realizou o deploy da sua aplicação, siga estes passos:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Instale o Fly CLI&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;   curl &lt;span class="nt"&gt;-L&lt;/span&gt; https://fly.io/install.sh | sh
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Após a instalação, reinicie seu terminal.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Faça login na Fly.io&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;   flyctl auth login
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Crie e faça o deploy do seu app&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;   flyctl launch
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Siga as instruções exibidas no console para configurar seu aplicativo.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Verifique se a aplicação está rodando&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;   flyctl status &lt;span class="nt"&gt;-a&lt;/span&gt; your-app-name
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Se sua aplicação estiver ativa, você verá seu status e o subdomínio atribuído (por exemplo, &lt;code&gt;your-app-name.fly.dev&lt;/code&gt;).&lt;/p&gt;




&lt;h2&gt;
  
  
  Passo 2: Configurar o DNS no Registro.br
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Liste os endereços IPv4 e IPv6 da sua aplicação&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;   fly ips list &lt;span class="nt"&gt;-a&lt;/span&gt; your-app-name
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Configurar os Registros DNS no Registro.br&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Acesse a seção &lt;strong&gt;Configurar Zona DNS&lt;/strong&gt; e clique em &lt;strong&gt;Nova Entrada&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Adicione as seguintes entradas:

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Tipo&lt;/strong&gt;: A
&lt;strong&gt;Nome do host&lt;/strong&gt;: Deixe em branco
&lt;strong&gt;Endereço IP&lt;/strong&gt;: Utilize o valor de IPv4 obtido no passo anterior.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Tipo&lt;/strong&gt;: AAAA
&lt;strong&gt;Nome do host&lt;/strong&gt;: Deixe em branco
&lt;strong&gt;Endereço IP&lt;/strong&gt;: Utilize o valor de IPv6 obtido no passo anterior.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;/li&gt;

&lt;li&gt;&lt;p&gt;&lt;strong&gt;Salve a Configuração&lt;/strong&gt; e aguarde a propagação do DNS (que pode levar de alguns minutos a algumas horas).&lt;/p&gt;&lt;/li&gt;

&lt;/ul&gt;




&lt;h2&gt;
  
  
  Passo 3: Criar Certificado de Validação
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Crie um novo certificado SSL&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;   fly certs create your-domain.com.br
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Verifique se o domínio está corretamente configurado&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;   flyctl certs show your-domain.com.br
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Se tudo estiver correto, a Fly.io emitirá um certificado SSL para seu domínio.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Teste seu Domínio&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;Abra um navegador e acesse &lt;code&gt;https://your-domain.com.br&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Seu aplicativo Fly.io agora deve estar acessível pelo seu domínio personalizado!&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;




&lt;h2&gt;
  
  
  Solução de Problemas
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Problemas com SSL:&lt;/strong&gt; Certifique-se de que as configurações do DNS correspondem às fornecidas pela Fly.io e verifique o status do certificado com:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;  flyctl certs list
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Verifique os Logs para Erros:&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;  flyctl logs
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Conclusão
&lt;/h2&gt;

&lt;p&gt;Seguindo esses passos, você poderá conectar seu domínio do &lt;strong&gt;Registro.br&lt;/strong&gt; à &lt;strong&gt;Fly.io&lt;/strong&gt; com sucesso. Sua aplicação estará acessível por meio de um domínio personalizado, com segurança SSL e alta disponibilidade.&lt;/p&gt;

</description>
    </item>
  </channel>
</rss>
